php:寻找支持消息队列的电子邮件库

时间:2011-02-07 11:49:28

标签: php email

我正在寻找一个电子邮件库,用于在我们公司内部建立新闻通讯系统。 它应该支持消息队列(将邮件发送到队列,在后台自动发送邮件)而不阻止Web服务器。 所以我认为后台处理应该在服务器上作为后台服务运行, 类似于aspmail但是对于php。

有什么建议吗? 感谢

5 个答案:

答案 0 :(得分:4)

我建议使用Gearman构建一个自治守护进程,等待您的Web服务器提交的作业。

有一篇很好的文章:http://kevin.vanzonneveld.net/techblog/article/create_daemons_in_php/解释了如何在纯PHP代码中创建守护进程。

在Web服务器端,您只需创建作业(gearman客户端),并将它们异步排入gearman守护程序。 然后你让你的邮件程序php守护进程等待作业(齿轮工人),并在它们在队列中可用时执行它们。

如果要发送大量邮件,您甚至可以在多个服务器上部署工作人员,这些服务器将在同一个齿轮工作队列中等待,以优化电子邮件处理。

答案 1 :(得分:2)

我已经使用PEAR的Mail_Queue一次排队200,000多封邮件。即使使用自定义内容,也可以轻松快速地填充数据库,然后一个相当简单的脚本每次发送大约250个 - 如果负载平均值不是太高。然后它循环并发送下一批。它从后台运行,并且很容易设置,以便如果队列表为空,它会在再次检查之前暂停一段时间(因为每秒检查几次对任何人都没有帮助)。

同时检查机器的负载平均值的优点是它只会在队列中处理,而不会出现自行创建的资源不足的问题。

Mail_Queue tutorial几乎可以为您提供所需的一切 - 只需绕过'send_messages.php'脚本(从命令行更好),直到数据库队列为空,然后暂停一段时间 - 然后再循环

答案 2 :(得分:1)

  

它应该支持消息队列(将邮件发送到队列,在后台自动发送邮件)而不阻止Web服务器。所以我认为后台处理应该作为服务上的后台服务运行

WTF?管理队列是电子邮件系统的工作 - 它是设计要做的事情 - 它不是应用程序与之交谈的责任。如果您的邮件服务器在每次发送邮件时都会阻止,那么非常就会出现错误。

听起来你正在尝试编写自己的MTA而不是修复当前条款的错误。

如果需要提供脱机功能,请在运行PHP的计算机上安装MTA。

答案 3 :(得分:1)

您可以使用redis作为message queue

message queue

Redis是一个非常快速且积极开发的数据结构服务器。使用redis写东西很容易就像馅饼一样。为什么我喜欢redis而非其他消息队列:

  • 积极发展。
  • Redis的:

      

    开源,先进   键值存储。它经常被提及   从那以后作为数据结构服务器   键可以包含字符串,哈希,   列表,集合和排序集。

    非常强大。

  • 非常容易安装:make
  • 几乎所有首选语言都有c-binding。
  • c客户端库hiredis非常用户友好。如果你想要非常好的表现,你可以在C中写一些东西。 This example(感谢hiredis)我只使用make创建了编译。

答案 4 :(得分:1)

由于所需要的性质,我不认为这是专门针对MTA职责的开箱即用解决方案,但我可能是错的。

我最近构建了类似的东西,包括将要发送的电子邮件发送到数据库队列,其中包含一个字段以显示是否已发送,然后运行CRON作业来处理设置批处理的发送脚本,发送这些电子邮件,并标记为已发送,冲洗并重复。

有兴趣通过电子邮件/ msn与您聊天只是为了看看您为系统计划了什么,因为我基本上做同样的事情。