1

新しいアップロード、新しいコメント、新しい投稿などごとにメール通知を送信したい.

今、私は関数を呼び出しています:

 notify($user_id, $submitter_id, $post_id);

notify()これらの ID と呼び出しを処理しmail()、メールは「送信者」と以前にコメントした人に送信されます。問題は、スクリプトに時間がかかりすぎて、コメントを保存するためにこのスクリプトに AJAX リクエストを送信しているため、ユーザーは完了を待つことにnotify()なります。それは連鎖プロセスのようなものです。

誰かがこれを行うためのより良い方法を提案できますか? Ajax スクリプトを待たせたくない:

  • コメントの保存
  • 同時にメールを送信します。

また、これをFBのようにインスタントにしたいので、cronを使用できません。

4

3 に答える 3

3

FBなどで。あなたが思うように作成されています:

更新が必要なときは、テーブルにメッセージnotifyを挿入しますoutbounds

insert into `outbounds` (`email`, `status`, `subject`, `message`, `created`, `sent`)
value ('some@address.net', STATUS::created, 'Some thing is happened', 'Message here', NOW(), NULL);

常に実行されているスクリプト、またはcronのように実行されるスクリプト、または送信メッセージのタイムアウト= 1を設定してこのスクリプトをカールできます

select * from `outbounds` where status = STATUS::created

送信が完了したら忘れないでください

update `outbounds` set `status` = STATUS::sent, sent = NOW() where id = $message_id
于 2012-05-21T13:01:25.387 に答える
2

一度に数百通のメールを送信する場合は、Amazon SESや個人的にお気に入りのPostmarkなどのサードパーティ サービスをお勧めします。これらのサービスに ping を実行し、コールバックを待たずに残りの機能を続行できるはずです。さらに、待ち時間が短いため、メールはほぼ瞬時に配信されます.

于 2012-05-21T13:15:50.403 に答える
1

Use a queue to store e-mails that are due to be sent, and let a script (for example a cron job) send out those mails. This way, the user only has to wait for the insertion of the mail in the queue, which may not take long.

There are various pitfalls when sending large quantities of mail though, and mail() really isn't the best solution here.

于 2012-05-21T12:56:36.800 に答える