PHP怎样才能异步发送邮件

2013-05-10 19:38:08 +08:00
 maizihuakai
最近在写一个小型社区练手(新手。。),其中有一项是用smtp给被回复的会员发送邮件通知。
然后问题就来了,如果一条回复中有多个被回复者,那么评论提交后页面必须要等待足够长的时间让邮件发送完毕。
于是就想改为异步的方式。
网上搜了一下,发现基本都是那一两篇文章到处转载,讲的也比较笼统。。想找一种比较简单的方式来实现,这样小型的网站使用队列感觉有点得不偿失的感觉。。大家有什么推荐的吗。。

网站的地址:http://szd.me/
感觉只能是个练手的东西,真正拿来运营似乎没什么亮点。。
7465 次点击
所在节点    PHP
14 条回复
alex8224
2013-05-10 20:12:19 +08:00
gearman 之
shiny
2013-05-10 20:22:19 +08:00
小网站的话, apache可以用ignore_user_abort,php-fpm可以用fastcgi_finish_request,在请求结束后将进程置入后台,然后可以用数据库来模拟队列。
AlloVince
2013-05-10 20:33:26 +08:00
ljbha007
2013-05-10 20:43:07 +08:00
直接把邮件插入数据库 然后用cronjob来运行脚本发邮件
darasion
2013-05-10 21:09:27 +08:00
参考各种论坛的定时任务。
julyclyde
2013-05-10 22:14:12 +08:00
用队列没啥问题,异步多少都会有队列
只是不一定用message queue服务软件实现罢了。数据库也可以,注意给记录加锁
XDash
2013-05-11 10:44:54 +08:00
cron
raincious
2013-05-11 11:07:32 +08:00
楼主要发送的邮件数量多么?不多的话不一定要异步的吧?

你也可以选择给客户端发送Connection: Close来断开客户端flush一下,然后ignore_user_abort让PHP继续给你发送邮件。这样的效果其实也是客户端瞬间打开的。

这样的好处是,程序修改量不大,而且可以在大部分主机上运行,不需要cron。但是邮件数量太多的话,这个可能太占用资源了。

http://cn2.php.net/manual/en/function.ignore-user-abort.php
jasontse
2013-05-11 11:29:55 +08:00
简单的消息队列可以使用msg_*函数实现
http://php.net/manual/en/function.msg-get-queue.php
lenye
2013-05-11 22:32:04 +08:00
推荐gearman
iammecn
2013-05-13 12:13:02 +08:00
@ljbha007 我也是一般这么干的。
gaocheng
2013-05-13 12:28:48 +08:00
crontab和消息队列都是不错的方式,也是使用较多的方式
qiqiboy
2013-05-17 17:50:01 +08:00
你可以去学习下wordpress的定时任务如何实现的,就很容易做出自己的定时任务和异步任务机制了
buru
2013-05-23 23:56:38 +08:00
数据库存储的task queue + crontab
看这个http://raivoratsep.com/161/simple-php-task-queue/

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/68423

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX