1

専用 IP で 1 時間あたり最大 500 通のメールを使用して、たとえば 3000 人の受信者にメールを送信するにはどうすればよいですか? これまでのところ、各メールを 9 秒ごとに送信することを考えています。これは 1 時間に約 450 通のメールになります...しかし、どうすればこれを行うことができますか?

メールの送信に関する私の計画は次のとおりです...

$emails = ARRAY OF EMAILS, MYSQL RESULT
for($emails){
mail($subject,$row[email],$headers);
}

これは機能しません。間違った種類のステートメントですが、とにかくこの概念....

4

5 に答える 5

3

私がすることは:

  • 1 時間に 1 回 cron を介して起動される PHP スクリプトを作成する
  • このスクリプトは、独自の速度で 450 通の電子メールのみを送信します
  • 450通のメールが送信されると、スクリプトは終了します
  • しばらくして、cron によって再起動され、450 の他のメールが送信されます。

秘訣は、どのメールがすでに送信されたかを知る必要があるということです。
DB の ID などでメールを注文し、制限を使用しても問題ないと思います。

メールの合間にしばらく眠りたい場合は、sleep機能を使用してください。スクリプトが cron によって再起動される前に、450 通のメールのチャンクが終了していることを確認するために、おそらく 2 秒から 5 秒の間で問題ありません。


そして、それについて考えてみてください:

  • 何らかのログ機能を用意する必要があります。10 通の電子メールを受け取ったと誰かが文句を言った場合、その理由を突き止めるのに役立ちます。
  • 私はmail関数を使用しません: 十分にテストされ、既に開発された多くの機能を提供するライブラリを使用して、他にも多くの可能性があります: 車輪を再発明しないでください ;-)

ここに私が考えることができるいくつかのライブラリがあります:

于 2009-08-27T20:49:33.087 に答える
2

送信するメッセージをデータベースに保存し、送信されたメッセージにマークを付けます。cron ジョブで、送信されていないものをいくつか選択して処理します。cron ジョブの頻度によって、電子メールの送信速度が決まります。

于 2009-08-27T20:48:26.940 に答える
1

SwiftMailerはこれを行います:

于 2009-08-28T00:18:30.700 に答える
0

すべての答えをありがとう!私が見つけた最善の方法は、実際には、400通のメールをテストしたときにsleep()を使用して呼び出しの間にsleep()を実行することでした。これには、17秒かかりました:)

ユーザーが450を超える制限を送信する可能性は低いですが、もしそうなら、while()が450を超える行があるかどうかのチェックを終了する前に、ifステートメントがあります。そうであれば、それぞれの間にスリープします...これ面倒なデータベースなしで動作します:)

ありがとう!

于 2009-08-28T09:18:07.950 に答える
0

この非常に便利な Timer クラスを使用して、面倒な作業 (ループ内の開始、停止、経過時間の取得など) を行うことができます: PHPClasses: Timer.php

于 2009-08-27T20:50:58.747 に答える