2011-12-29 8 views
1

php5ウェブアプリケーションで、ユーザから電子メールアドレスを取得してデータベースに保存しますが、電子メールが完了するのを待たずにメールを送信します。 Gmailを使用して、時々数秒かかる。php5で、別のプロセスで電子メールを送信したい場合は

fopen("http://self.com/mailer.php", "r")と考えており、実際の郵送はmailer.phpとなります。これは動作しますか?

+0

電子メールの送信は、ミリ秒単位で行う必要があります。このため実際のパフォーマンス上の問題はありますか? –

+0

ユーザーが待たずにあなたの平均は何ですか? –

+0

Gmailを使用してメールを送信すると、数秒かかることがあります。電子メールが送信されるのを待つことなく、次のページをユーザーに表示したい。 –

答えて

1

過去に私にとってうまくいった2つのアプローチがあります。

データベースメールキュー

は、データベースまたはあなたが永続ストレージに使用している任意の他に「email_queue」テーブルを作成します。各エントリには、メールを送信するために必要なもの(件名、受信者、送信者、本文など)と「送信済み」フラグフィールドがすべて含まれています。電子メールを送信するには、ヘルパークラスを使用してこのテーブルにエントリを追加します。

次に、送信済みフラグが0に設定されているエントリのフィルタリングをキューテーブルから読み込み、電子メールを送信し、最後に送信済みフラグを1に設定するcliスクリプトを作成します。このスクリプトは、cronジョブしかし、おそらく1分よりも頻繁に実行したいので、Frequent-cronのようなものを使うことができます。スケジュールされたタスクは、複数のWebサーバーがある場合(および永続的なストレージが共有されていると仮定して)、1つのWebサーバーでのみ実行する必要があります。

ローカルのメールキュー

私はまた、外部のSMTPサービスを使用してメールを配信するために、各Webサーバー上のローカルのPostfixサーバを設定するいくつかの成功を収めてきました。ここでの目標は、ローカルであるため、可能な限り速やかに電子メールを受け取り、別のプロセスで外部SMTPサーバー経由で配信するようにpostfixを設定することです。 Postfixは中間キューとして動作します。

私個人的には、第一の溶液のような、それは統計的分析記録保存などのための電子メール配信に関する詳細な情報をあなたのアプリを与えるので...

希望に役立ちます。

+0

cronの代わりに、メールキューをチェックしてから60秒後に眠るデーモンについてどう思いますか?これはdb再接続を保存します –

+1

これもうまくいくでしょうが、PHP以外のカスタムでビルドする必要があります。 PHPは怒っている人のようにメモリを漏らしているので、常に実行しておくことは持続可能ではないでしょう。しかし、Dbの再接続は通常大きな問題ではありません。 – SuitedSloth

+0

お役立ち情報クライアントからのajaxを使用してサーバーに戻って電子メールを送信すると考えます。それは信頼できない(クライアントが新しいページに行く)ことができるので、cronを使って同じページをカールさせて落とした電子メールを受け取るからです。 –

関連する問題