我正在寻找一个电子邮件库,用于在我们公司内部建立新闻通讯系统。 它应该支持消息队列(将邮件发送到队列,在后台自动发送邮件)而不阻止Web服务器。 所以我认为后台处理应该在服务器上作为后台服务运行, 类似于aspmail但是对于php。
有什么建议吗? 感谢
答案 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:
Redis是一个非常快速且积极开发的数据结构服务器。使用redis写东西很容易就像馅饼一样。为什么我喜欢redis而非其他消息队列:
Redis的:
开源,先进 键值存储。它经常被提及 从那以后作为数据结构服务器 键可以包含字符串,哈希, 列表,集合和排序集。
非常强大。
make
。make
创建了编译。答案 4 :(得分:1)
由于所需要的性质,我不认为这是专门针对MTA职责的开箱即用解决方案,但我可能是错的。
我最近构建了类似的东西,包括将要发送的电子邮件发送到数据库队列,其中包含一个字段以显示是否已发送,然后运行CRON作业来处理设置批处理的发送脚本,发送这些电子邮件,并标记为已发送,冲洗并重复。
有兴趣通过电子邮件/ msn与您聊天只是为了看看您为系统计划了什么,因为我基本上做同样的事情。