2011-02-07 50 views
0

我正在寻找一个电子邮件库来建立我们公司内部的通讯系统。 它应该支持消息队列(向队列发送邮件,在后台自动发送邮件)而不会阻塞网络服务器。 所以我认为后台处理应该作为服务器上的后台服务运行, 类似于aspmail,但为PHP。php:寻找支持邮件排队的电子邮件库

有什么建议吗? 谢谢

回答

2

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

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

Mail_Queue tutorial为您提供了几乎所有您需要的东西 - 只需循环“send_messages.php”脚本(从命令行更好),直到数据库队列为空,然后暂停一会儿 - 再循环。

4

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

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

在Web服务器端,你只需创造就业机会(Gearman的客户端),以及异步排队他们到的Gearman守护进程。 然后你有你的邮件程序php守护进程等待作业(gearman worker),并在队列中可用时执行它们。

如果你有一个庞大的邮件量发送,你甚至可以在多台服务器,将等待在同一Gearman的作业队列,以优化电子邮件处理部署的工人。

+0

+1对于Gearman建议 – 2011-02-07 12:05:53

1

它应该支持消息队列(向队列发送邮件,在后台自动发送邮件)而不会阻塞网络服务器。所以我认为后台处理应该作为服务的后台服务运行

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

这听起来像你正在尝试写自己的MTA,而不是固定有什么不对您当前的规定。

如果您需要提供离线功能,然后安装在PHP运行的机器上的MTA。

+0

不是PHP中的sendmail呼叫阻塞(相对较慢)。你会注意到它,如果你在你的webrequest内?)。特别是当你需要做很多的时候? – Alfred 2011-02-07 13:19:54

+0

实际上它是一个执行调用 - 但它应该**永远不会**块超过几分之一秒 - 否则有一些非常错误(如错误配置的smartHost) – symcbean 2011-02-07 13:54:37

1

你可以使用redis为您message queue

message queue

Redis的速度非常快,并积极开发的数据结构的服务器。用redis写一些东西很容易。为什么我喜欢Redis其他消息队列:

  • 积极开发。
  • 的Redis:

    一个开源的,先进的 key-value存储。因为 键可以包含字符串,散列, 列表,集合和有序集合,所以它通常被称为 作为数据结构服务器。

    这是非常强大的。

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

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

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

有兴趣通过电子邮件/ MSN与你聊天,看看你已经为系统计划了什么,因为我基本上都在做同样的事情。