2011-02-07 6 views
0

私は社内にニュースレターシステムを構築するための電子メールライブラリを探しています。 Webサーバーをブロックすることなく、メッセージキューイング(キューへのメールの供給、バックグラウンドでの自動メール送信)をサポートする必要があります。 私はバックグラウンド処理をサーバー上のバックグラウンドサービスとして実行する必要があると思います。 はaspmailと似ていますが、PHPの場合は同様です。php:メッセージキューイングをサポートする電子メールライブラリを探しています

提案がありますか? ありがとう

答えて

2

PEARのMail_Queueを使用して、一度に200,000件以上のメールをキューに入れました。データベースを作成するのは、カスタマイズされたコンテンツであっても、簡単で迅速です。そして、負荷平均があまり高くなければ、かなり簡単なスクリプトが約250回を送信します。次に、ループして次のバッチを送信します。これはバックグラウンドから実行され、キューテーブルが空の場合、再度チェックする前に一時停止します(1秒に数回チェックすると誰にも役立たないため)。

マシンの負荷平均をチェックすることの利点は、自己作成のリソース不足の問題なしにキューを突き抜けてしまうことです。

Mail_Queue tutorialは、データベースキューが空になるまで「send_messages.php」スクリプトをループするだけです(コマンドラインからの方がいいです)。

4

Gearmanを使用して、Webサーバーから送信されたジョブを待機する自律デーモンを構築することをお勧めします。

純粋なPHPコードでデーモンを作成する方法を説明している素敵な記事があります:http://kevin.vanzonneveld.net/techblog/article/create_daemons_in_php/です。

ウェブサーバー側では、単にジョブ(ギアマンクライアント)を作成し、gearmanデーモンに非同期でキューイングします。 次に、メーラーphpデーモンがジョブ(ギアマンワーカー)を待っていて、キューで使用可能になったときにそれらを実行します。

大量のメールを送信する場合は、電子メール処理を最適化するために、同じギアマンジョブキューで待機する複数のサーバーにワーカーを配置することもできます。

+0

+1はGearmanの推奨 –

1

ウェブサーバーをブロックせずにメッセージキューイング(キューへのメールの供給、バックグラウンドでの自動郵送)をサポートする必要があります。バックグラウンド処理はバックグラウンドサービスとして実行する必要があります。

WTF?キューを管理することは、電子メールシステムの仕事です。つまり、は、のように設計されています。それは、それに対話するアプリケーションの責任ではありません。メッセージを送信するたびにメールサーバーがブロックされている場合は、と非常にが間違っています。

あなたの現在の規定に間違いを修正するのではなく、あなた自身のMTAを書いているように思えます。

オフライン機能を提供する必要がある場合は、PHPが動作しているマシンにMTAをインストールしてください。

+0

は、PHPのsendmailコールブロッキング(相対的な遅い)ではありません。あなたがあなたのウェブリクエストの中にいるのなら、気づくでしょうか?)。特にあなたがそれらの多くをする必要があるとき? – Alfred

+0

効果的にそれはエグゼクティブコールですが、**秒間以上ブロックしてはいけません。そうでなければ間違ったものがあります(誤った設定のsmartHostのような) – symcbean

1

あなたのmessage queueとしてredisを使用することができます。

message queue

Redisのは非常に高速かつ積極的に開発されたデータ構造サーバです。レディスを使って何かを書くことは、パイのように簡単になるだろう。なぜ私は他のメッセージキューに対抗したいのですか:

  • が積極的に開発されました。
  • のRedis:

    オープンソースは、 キー値ストアを進め。 のキーには、文字列、ハッシュ、 のリスト、セット、およびソートされたセットを含めることができるため、データ構造サーバーとして と呼ばれることがよくあります。

    非常に強力です。

  • インストールが非常に簡単:make
  • は、ほぼすべての言語でC-バインディングを持っています。
  • cクライアントライブラリhiredisは非常にユーザーフレンドリーです。あなたは本当に良いパフォーマンスが必要な場合は、Cで何かを書くことができます。 This example(hiredisに感謝)makeだけを使用してコンパイルを作成しました。
1

何が必要なのかという理由から、私はtheresをMTAの任務のための特別なソリューションとは考えていませんが、間違っている可能性があります。

私は最近、送信されたかどうかを示すフィールドを持つメールをデータベースキューに送信し、次にCRONジョブを実行してセットバッチの送信スクリプトを処理しますそれらの電子メールを送信し、送信、リンス、リピートとしてマークします。

私は基本的に同じことをやっているので、あなたが見ているシステムについて計画しているものを見るために電子メール/ MSNであなたとチャットをすることに興味があります。

+0

ちょっとフォローアップノートです。 ! :P – Horse

関連する問題