2011-02-02 7 views
3

特定のイベント/ユーザーアクション(写真のタグ付けは、友人としてなどを追加)した後、私は、Webサーバー缶から電子メールを送信し、私の経験から電子メールは、オンザフライではなく、送信前にデータベースにキューイングする必要がありますか?

をユーザーに電子メール通知を送信し、サイトを開発していますが遅いです。たとえば、新しいユーザーを作成するときに、アカウントを確認/歓迎する電子メールを送信します。ただし、電子メールの送信が完了している間にページが読み込まれるのを待つことがあります。

私の恐怖は、私が今までに過負荷になっているメールサーバやメールサーバとの接続に問題がある場合は、それが最善の方法とは何か、私のアプリケーション/ページが読み込ま

は、だから私の質問がある

ボトルネックになる、ということです

一貫して電子メールを送信するWebアプリケーションから電子メールを送信しますか?

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

ユーザーがアクション/イベント(メンバーアカウントの作成、写真のタグ付けなど)を完了した後でメールを直接送信するだけでよいですか?

+0

バックグラウンドスレッドから電子メールを送信することを検討しましたか? – thkala

答えて

2

いいえsysadminにメールサーバの設定を依頼してください。メールサーバーが正しく構成されていれば、メッセージをデータベースに格納する方が速いはずです。

ローカル送信を使用してネットワークの遅延を回避します。 [メール機能] オプションsendmail_path =は/ usr/sbinに/ sendmailの php.iniの

では、メールサーバは、(メッセージがキューイングされる)ダウンしている場合でも動作します。メールサーバーへの接続のようなものの上にブロックし、ユーザー体験を望んでいないとして良いアイデアです - あなたが言ったように

+0

ありがとう@rvs。私はこれを試してみる。他の人は私の問題は私がメールを送るためにsmtpを使っていたからだと私に言いました。しかし、メールサーバ(postfixなど)をセットアップする場合は、あなたが言及したように遅延はありません。 – koeder

0

はい、キューからのメールを選択し、それらを送信するためにx分ごとに実行するcronジョブを設定し、すべての必要な情報を保持し、MySQLのテーブルを作成して、キュー・システムを設定(LIMITを設定することを忘れないでください送信する電子メールを取得するSQLクエリの場合)。あなたが言及

2

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

0

、あなたのWebリクエスト/レスポンスと同期してメールを送信されることはありません。ローカルのメールサーバーであっても、非同期にしてデカップリングすることは常に良い考えです。つまり、メールはメカニズムのような待ち行列にプッシュされ、非同期送信されます。

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

関連する問題