maizihuakai
V2EX  ›  PHP

PHP怎样才能异步发送邮件

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

    网站的地址:http://szd.me/
    感觉只能是个练手的东西,真正拿来运营似乎没什么亮点。。
    14 replies    1970-01-01 08:00:00 +08:00
    alex8224
        1
    alex8224  
       May 10, 2013
    gearman 之
    shiny
        2
    shiny  
    PRO
       May 10, 2013   ❤️ 1
    小网站的话, apache可以用ignore_user_abort,php-fpm可以用fastcgi_finish_request,在请求结束后将进程置入后台,然后可以用数据库来模拟队列。
    ljbha007
        4
    ljbha007  
       May 10, 2013   ❤️ 1
    直接把邮件插入数据库 然后用cronjob来运行脚本发邮件
    darasion
        5
    darasion  
       May 10, 2013
    参考各种论坛的定时任务。
    julyclyde
        6
    julyclyde  
       May 10, 2013
    用队列没啥问题,异步多少都会有队列
    只是不一定用message queue服务软件实现罢了。数据库也可以,注意给记录加锁
    XDash
        7
    XDash  
       May 11, 2013
    cron
    raincious
        8
    raincious  
       May 11, 2013
    楼主要发送的邮件数量多么?不多的话不一定要异步的吧?

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

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

    http://cn2.php.net/manual/en/function.ignore-user-abort.php
    jasontse
        9
    jasontse  
       May 11, 2013 via iPad   ❤️ 1
    简单的消息队列可以使用msg_*函数实现
    http://php.net/manual/en/function.msg-get-queue.php
    lenye
        10
    lenye  
       May 11, 2013
    推荐gearman
    8n1AfdFQWA5CWTNQ
        11
    8n1AfdFQWA5CWTNQ  
       May 13, 2013
    @ljbha007 我也是一般这么干的。
    gaocheng
        12
    gaocheng  
       May 13, 2013
    crontab和消息队列都是不错的方式,也是使用较多的方式
    qiqiboy
        13
    qiqiboy  
       May 17, 2013
    你可以去学习下wordpress的定时任务如何实现的,就很容易做出自己的定时任务和异步任务机制了
    buru
        14
    buru  
       May 23, 2013
    数据库存储的task queue + crontab
    看这个http://raivoratsep.com/161/simple-php-task-queue/
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   4154 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 167ms · UTC 05:23 · PVG 13:23 · LAX 22:23 · JFK 01:23
    ♥ Do have faith in what you're doing.