4

特定のイベント/ユーザー アクション (写真にタグを付ける、友達として追加するなど) 後にユーザーにメール通知を送信するサイトを開発しています。

私の経験から、Web サーバーからの電子メールの送信は遅くなる可能性があります。たとえば、新しいユーザーを作成するときに、アカウントを確認/歓迎するメールを送信します。ただし、電子メールの送信が完了するまで、ページの読み込みを待機する短い一時停止が発生することがあります。

メール サーバーへの接続に問題が発生したり、メール サーバーが過負荷になったりすると、アプリケーションやページの読み込みがボトルネックになるのではないかと心配しています。

私の質問は、一貫してメールを送信する Web アプリケーションからメールを送信する最良の方法は何ですか?

電子メールの内容をデータベースに保存してキュー システムを作成し、スケジュールされた cron ジョブを実行して未配信の電子メールをすべて処理する必要がありますか?

それとも、ユーザーがアクション/イベント (メンバー アカウントの作成、写真へのタグ付けなど) を完了した直後にメールを送信する必要がありますか?

4

5 に答える 5

3

いいえ。システム管理者にメール サーバーの設定を依頼してください。正しく構成されたメール サーバーは、メッセージをデータベースに保存するよりも高速です。

ネットワークの遅延を避けるために、ローカル送信を使用してください。【メール機能】 sendmail_path = /usr/sbin/sendmail in php.ini

メールサーバーがダウンしていても機能します (メッセージはキューに入れられます)。

于 2011-02-02T18:34:48.727 に答える
2

ローカル マシンでメール リレーをセットアップします。そうすれば、メールの cron やデータベース ストレージを気にする必要はありませんが、すべてのメールの即時のネットワーク トラフィックのオーバーヘッドを防ぐことができます。欠点としては、追加のデーモンを管理する必要があり、オープン リレーを作成しないようにする必要があります。

于 2011-02-02T18:32:53.573 に答える
0

あなたが言ったように、あなたはあなたのウェブリクエスト/レスポンスと同期してメールを送ることはありません-これはあなたがメールサーバーへの接続のような何かであなたのユーザーエクスペリエンスをブロックしたくないので良い考えです。ローカルメールサーバーの場合でも、非同期にして2つを分離することをお勧めします。つまり、メールはメカニズムのようなキューにプッシュされ、非同期で送信されます。

この場合、送信するメッセージをデータベース(または他のストア)に保持することの利点は、メモリキュー内ではなく、Webサーバーに障害が発生した場合の回復性が向上することです。永続化された電子メールは後でいつでも処理できますが、それらがメモリにある場合、Webサーバープロセスに障害が発生すると、キューに入れられたメールが失われることになります。

于 2011-02-03T17:53:46.707 に答える
0

LIMITはい、必要なすべての情報を保持するmysqlテーブルを作成してキューシステムを設定し、x分ごとに実行するcronジョブを設定して、キューからメールを選択して送信します( SQLクエリにを設定することを忘れないでください送信するために電子メールをフェッチします)。

于 2011-02-02T18:24:00.780 に答える
0

あなたが言及するDb-ソリューションは問題ありません

簡単な解決策は、スクリプトの最終アクションとしてメールを送信することです(htmlが送信された場合)。

または、行き詰まりの少ないSMTPを使用するようにphpを構成します 。http://email.about.com/od/emailprogrammingtips/qt/Configure_PHP_to_Use_a_Remote_SMTP_Server_for_Sending_Mail.htm

よろしく、// t

于 2011-02-02T18:27:14.240 に答える