1

我想在每次新上传、新评论、新帖子等时发送电子邮件通知。

现在我正在调用一个函数:

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

notify()处理这些 id 和 call mail(),将邮件发送给“提交者”和之前评论过的人。问题是,脚本花费的时间太长,并且由于我正在向该脚本发送 AJAX 请求以保存评论,因此用户最终等待notify()完成。这就像一个链接过程。

谁能建议我一个更好的方法来做到这一点?我不希望 Ajax 脚本等待:

  • 保存评论
  • 并同时发送电子邮件。

而且我不能使用 cron,因为我希望它是即时的,有点像 FB。

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);

以及始终运行的脚本,或者像 by 一样执行cron,或者,您可以使用设置 timeout=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

如果您一次发送 100 封电子邮件,我建议您使用第三方服务,例如Amazon SES或我个人最喜欢的Postmark。您应该能够 ping 这些服务并继续执行其余功能,而无需等待回调。此外,它们的延迟很低,因此您的邮件几乎可以立即送达。

于 2012-05-21T13:15:50.403 回答
1

使用队列存储要发送的电子邮件,并让脚本(例如cron作业)发送这些邮件。这样,用户只需要等待邮件插入队列,可能不会花费很长时间。

但是,在发送大量邮件时存在各种陷阱,并且mail()确实不是最好的解决方案。

于 2012-05-21T12:56:36.800 回答