这是一个很长的问题,所以请光着我。
我想发送关于每个新上传,新评论,新帖子等的电子邮件通知......
现在我正在调用一个函数:
notify($user_id, $submitter_id, $post_id);
并notify()
处理这些ID并调用mail()
,邮件将发送给“提交者”和之前评论过的人。问题是,脚本耗时太长,因为我向此脚本发送了一个AJAX请求以保存注释,所以用户最终等待notify()
完成。这就像一个链接过程。
有人能建议我更好的方法吗? 我不希望Ajax脚本等待:
而且我也不能使用cron,因为我希望这是瞬间的,有点像FB。
感谢。
答案 0 :(得分: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
答案 1 :(得分:2)
如果您一次发送100封电子邮件,我会推荐第三方服务,例如Amazon SES或我个人最喜欢的Postmark。您应该能够ping这些服务并继续执行其余功能,而无需等待回调。此外,它们的延迟很低,因此您的邮件几乎可以即时发送。
答案 2 :(得分:1)
使用队列存储将要发送的电子邮件,并让脚本(例如cron
作业)发送这些邮件。这样,用户只需等待在队列中插入邮件,这可能不会花费很长时间。
虽然发送大量邮件时存在各种陷阱,mail()
确实不是最好的解决方案。