0

さて、ここに私の問題があります:

私は Web サイトにメンバーのリストを持っており、定期的に私のサイトの管理者 (Web や技術にあまり詳しくない) の 1 人がメンバーリストにニュースレターを送信します。私の現在のメンバーリストは、800 人をはるかに超えています。

そこで、Bcc ヘッダーにリストされたメンバーを含む完全なメンバーリストに電子メールを送信する電子メール スクリプトを作成しました。

しかし、私のホスト サーバーには 1 時間あたり 300 通の電子メールの制限があることがわかりました。メンバーが Bcc フィールドにリストされていても、明らかにそれを超えています。(Bcc の動作が、リストの名前ごとに個別のメールを送信することだとは、以前は知りませんでした...)

しばらく考えた結果、スクリプトで最初の 300 通のメールにのみメールを送信し、1 時間待ってから次の 300 通に 2 通目のメールを送信し、さらに 1 時間待つことが唯一の解決策であるという結論に達しました。というように、メンバー リスト全体にメールを送信するまで続けます。

インターネットを見回すと、PHP でメールを遅らせるために人々が思いついた他のソリューションがいくつか見られました。スクリプトを開いたまま 3 ~ 4 時間実行したままにしておくことはできないため、Sleep() は明らかにオプションではありません。cron ジョブを提案する人を見たことがありますが、メールを送信するたびに 3 つの新しい cron ジョブを作成し、それらを 1 回使用してから削除することがどれほど実現可能かはわかりません。私が見た最後の(そして私が最も賢いと思う)解決策は、遅延して後で送信される電子メールを一時的に保存するテーブルをデータベースに作成し、このSQLテーブルを1時間ごとにチェックするcronジョブを作成することですまたは、行のタイムスタンプを現在のタイムスタンプと比較し、1 時間が経過した場合に電子メールを送信します。

そこで皆さんにおすすめの方法を教えてください。私が完全に調べたより簡単な解決策はありますか(別のホスティングプランを取得することは別として.ha!)、またはデータベース/ cronジョブアプローチよりもクリーンな方法はありますか?

tl;dr: 1 時間あたり 300 通に制限されているサーバーで、1 時間に送信するメールが 800 通を超えています。PHP を使用して、電子メールの送信者が「送信」をクリックするだけで済むように、この問題を回避する方法を見つけてください。

4

3 に答える 3

1

これをギアマン キューに送信してから、ギアマン ワーカーに適切なスリープ コールを持たせることができます。http://gearman.org/およびhttp://php.net/gearmanを参照してください。

于 2010-03-23T18:10:12.323 に答える
0

送信するメッセージのプールからプルし、cron 中に実行されるたびに X を処理するバッチ機能をセットアップする必要があるようです。次に、送信されたメッセージと送信者を追跡するテーブルを用意して、誰が電子メールを受信したかを追跡できるようにします。

于 2010-03-23T18:07:15.637 に答える
0

キューを作成し、メールを送信する必要があるたびにキューから X 個のアイテムを処理することをお勧めします。メッセージの送信者はメールをキューに入れるだけで、処理コードはその期間に最大数のアイテムを送信するアイテムを取得します。場合によっては障害が発生することがありますが、キューを使用すると簡単に復旧できます。アイテムが処理されたときにのみ、キューからアイテムを削除します。

単純なデータベース テーブルをキューとして使用できますが、専用のキューイング ソリューションを使用することをお勧めします。

もう 1 つの推奨事項は、 Strongmailなどの外部メール サービスを調べることです。これらは、1 時間あたりにより多くのメールを送信するのに役立ちます。

于 2010-03-23T18:12:30.403 に答える