0

大量の電子メール送信を処理するアプリケーションに取り組んでおり、最小限の電子メール キュー ソリューションを探しています。

送信コードが行うことは、キューから「To」、「From」、「Subject」、「Text」、「Format」フィールドを取得し、ヘッダーを生成して、電子メールを送信することです。送信に失敗した場合は、再試行できます。少なくとも 2 段階の優先度がある、優先度システムも欲しいです。

私が考えていて、私が得たアイデアは次のとおりです。

  • MySQL: システム内の他のすべてが MySQL を通過するため、MySQL テーブルをキューとして使用することを考えました。問題は、送信者が常にテーブルを見ている必要があるため、プロセッサの負荷が高くなることです。
  • ファイル: ディレクトリ内の XML ファイルを介してキューを作成できます。これはすべてに悪影響を及ぼします (パフォーマンス、サーバーの寿命など)。
  • FIFO: C アプリケーションで FIFO を使用したことがありますが、おそらくこれは高レベルのアプリケーションにはレベルが低すぎます。また、生データを処理するのは少し難しくなります (サイズ、パラメーターの順序...)。

そこで、このメール キューを簡単な方法で行う方法についてのアイデアを探しています。システムは PHP で作成されていますが、解決策があれば PHP で作成したいと考えています。

前もって感謝します。

4

2 に答える 2

2

PHP 用の電子メール キュー システムを開発しました。これは、まさにあなたが求めていることを実行します。ここで確認してください。https://github.com/tin-cat/emailqueue

于 2015-01-27T22:09:46.530 に答える
0

1日に約200,000通のメールを送信するために、これと同様のことを以前に行いました。それらはタイム クリティカルではなかったので、( Mail_Mimeを使用して) それらを生成し、それらすべてをMail_Queueを使用してデータベースに格納し、マシンの負荷平均が OK の場合に自身を再実行し続けるシェル スクリプトを使用してそれらを送信しました。

今日、私はSwiftmailerWhite October SwiftMailer DB Bundleを中心とした Symfony ベースのシステムでそれを行います。

データベースを回避するには (最適ではありませんが、うまくいきます)、DBBundle をベースとして使用し、代わりにBeanstalkdなどのキュー システムを通過させます(これは大きな仕事ではありません)。データベース テーブルではなく、キューに送信します)。送信システムは、ジョブが「古すぎる」と判断した場合、そのジョブを削除できます。キュー ジョブに優先度を追加するのも非常に簡単です。これは Beanstalkd に組み込まれています。

また、単に「ユーザー X に更新メールを送信する」というメッセージをキューに入れることを選択することもできます。この場合、キュー ランナーは元の DB に移動して、メールが送信される直前にメールを組み立てます。

于 2015-01-28T10:00:37.223 に答える