質問

Webアプリケーションから大量のメールを送信する方法と、そのためのベストプラクティスがあるかどうかを考えています。 StackOverflowはすでにこれを「主観的」とラベル付けしていますが、ある程度はそうかもしれませんが、このシステムを実装する最も成功した方法、または標準化されたアプローチが存在するかどうかを知る必要があります。

私のwebappには、1〜10,000人のユーザーのグループのヘッドであるユーザーがいます。このユーザーは、私のシステムを介してこれらすべてのユーザーにメールを送信できる必要があります。したがって、私のシステムは、グループヘッドごとに最大10,000件のメールを個々のユーザーに送信する責任があります。

私が知る限り、GMailには個人にメッセージを送信するためのレート制限はありません(最大500人の受信者がいます)。

今、私の現在の設定は次のとおりです。

  • システムを介してメッセージが送信されると、メールキューに入ります。
  • cronスクリプトは数分ごとにキューからメッセージを取得し、それらのメールを送信します。
  • すべてのメールは、GMailのSMTPサーバーを介して行われます。
  • メーリングを行う実際のアプリケーションはPHPMailerです。

この設定は、ユーザーベースの拡大に伴い、おそらく十分ではありません。質問は次のとおりです。

  1. 代わりにローカルSMTPサーバーを使用すべきですか?
  2. 代わりにローカルマシンでメールバイナリを使用する必要がありますか?この場合、おそらくキューを完全にスキップできますか?
  3. これを行うための一般的な方法はありますか?

ありがとう!

役に立ちましたか?

解決

メール数が「高」の場合1日に10.000であるため、GMail(またはその他の)SMTPに依存しません。彼らがそれを扱えないということではなく、明らかにもっと多くのことを扱うことができます。しかし、彼らはおそらく望んでいません。

ローカルのSMTPサーバーを使用することはIMOの方法です:

  • 設定は非常に簡単です(強力な認証スキームなしでユーザーに使用させないでください)
  • 最新の MTA はキューの送信を非常によく処理します
  • GMail(または他の人)がクォータの理由でいつかアカウントをブロックすることを決定する必要はありません

他のヒント

Google App Engine

次の理由により、Googleアプリエンジン(python)でこれを記述します。

  • 優れた拡張性。
  • 優れたメールAPIがあります。
  • アクセスに適したAPIを備えたタスクキューがあります。
  • pythonは本当に素晴らしい言語だからです。
  • (比較的)安価です。

PHP

PHPで実装する場合

  • Gmailではこの種のボリュームを送信できないため、この量のメールを送信できる優れたSMTPサーバーを見つけてください。確かにこれにはいくらかお金がかかります。
  • あなたが言ったように、たとえばPHPMailerなどでメッセージを送信するための、まともなPHPメールライブラリを見つけてください。
  • beanstalkdなどのメッセージキューを使用して、電子メールメッセージをキューに入れ、非同期で電子メールを送信します。これは、ユーザーがページをすばやく読み込むことができるためです。次に、beanstalkdのようなメッセージキューを使用すると、送信速度をより適切に制御でき、PCが仕事で過負荷になるのを防ぎます。 beanstalkdをコンパイル(インストール)するには、サーバーへのsshアクセスが必要です。 beanstalkdは、 beanstalkd
  • で見つけることができます。
  • メッセージキューを処理するPHPスクリプトをバックグラウンドで実行するには、sshアクセスも必要です。 beanstalkd-clientは、 php beanstalkd-client
  • で見つけることができます。

php / apache / webpageから

これは、ユーザーにメッセージを送信するページです。このページから、この行に何かをコーディングして、beanstalkdにメッセージを送信します。

// register Pheanstalk class loader
require_once('pheanstalk_init.php');
$pheanstalk = new Pheanstalk('127.0.0.1');
$message = ""; // This would contain your message
$pheanstalk->put(json_encode($message);

putコマンドを使用してメッセージをメッセージキューに入れる必要があります

バックグラウンドで長時間実行されているPHPスクリプトから:

コードは次のようになります。

// register Pheanstalk class loader
require_once('pheanstalk_init.php');
$pheanstalk = new Pheanstalk('127.0.0.1');

while(true) {
  $job =  $pheanstalk->reserve();
  $email = json_decode($job->getData());
  // Sent email using PHP mailer.
  $pheanstalk->delete($job);
}

PHPとGoogleの両方のアプリエンジンで可能だと言っているのですが、実装が簡単なのでアプリエンジンに行きます。

GmailとGoogle Appsでは、1日に約500件のメールに制限されています。最大500人の受信者とどのように組み合わされるかはわかりませんが、10000個の電子メールを送信する場合は、おそらく別のメールサーバーを検索する必要があります。個人的にローカルサーバーまたはISPまたはデータセンターのSMTPを使用しています。

それほど多くのメールを送信している場合は、キューを使用することをお勧めします。そうすれば、ユーザーがメールを送信するのを待っていることはありません。

ドメインがスパムドメインとしてブラックリストに登録されないように十分に注意してください。もしそうなら、あなたはあなたの電子メールのほとんどがブロックされ、サポート、販売などを期待することができます。

代わりに、 AWeber などのサービスを使用できます。これらの量の電子メールを処理するようにセットアップされているだけでなく、おそらく自分で実装できるよりも多くのメトリックを提供できます。

どこで公開されているかわかりませんが、経験から、一度に数百のメッセージを送信し始めると、Gmailがアカウントに15分程度のフリーズをかけると言うことができます。これは先週私に起こりました。独自のSMTPサーバーをホストする必要があると思います。多くの場合、mail()関数を使用すると、誰かのスパムフォルダーにメールが配置されます。

アクセス速度を最大にするには、ローカルマシンまたは同じLAN上のマシンにPostfixをインストールするだけです。外部からしっかりと固定され、内部からすばやくアクセスできることを確認してください。

次に、PHPスクリプトをコーディングして、メールをPostfixキューに直接注入します。これにより、メール配信の処理速度が劇的に向上します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top