从Zend Framework应用程序向数百个收件人发送电子邮件的最佳方法是什么?

And*_*rew 16 php email mailing-list zend-framework smtp

我正在尝试为我的应用程序实现邮件列表系统.我目前正在使用Zend_Mail_Transport_Smtp('localhost')我的传输,循环访问我的订阅者列表,Zend_Mail并向每个订阅者发送一个新的.但是,我注意到脚本完成所需的时间随着订阅者数量的增加而增加.

我确信必须有更专业的方法来做这件事,包括排队电子邮件.我认为理想的方法是让用户填写表单,点击发送,然后立即得到回复,说明正在发送电子邮件,而不是等待数百封电子邮件完成发送.

据我所知,Zend_Mail没有任何排序邮件排队.任何有这方面经验的人都可以概述一下如何做到这一点吗?我对cron/crontab/cronjobs一无所知,所以如果涉及到这个问题,请解释一下这个过程.

小智 19

为了使用PHP可靠地发送大量电子邮件,您必须使用排队机制.正如其他人所建议的那样,使用队列的过程如下所示:

  • 循环遍历您的用户组,为每个用户创建一封电子邮件,并可能自定义内容
  • 将每个邮件对象传递到队列,这将延迟发送电子邮件直到稍后
  • 在某种cron脚本中,一次发送几百个队列的内容.注意:您需要通过查看实际发送过程中返回的错误日志来调整您发送的电子邮件数量.如果你尝试发送太多,我注意到它到达了邮件传输将不再接受连接的点(我正在使用qmail)

您可以使用一些库来执行此操作,PEAR邮件队列(使用Mail_Mime)和SwiftMailer都允许您创建和排队电子邮件.到目前为止,Zend Mail仅提供电子邮件的创建,而不是排队(稍后将详细介绍).

我主要使用PEAR邮件队列,并且有一些问题.如果您尝试排队大量电子邮件(例如,循环超过20,000个用户并尝试在合理的时间内将它们放入队列中),则使用Mail Mime的quoted-printable编码实现非常慢.您可以通过切换到base64编码来加快速度.

至于Zend Mail,您可以编写一个Zend Mail Transport对象,将Zend Mail对象放入PEAR邮件队列.我已经取得了一些成功,但需要一些时间才能做到正确.为此,请扩展Zend Mail Transport Abstract,实现_sendMail方法(将Zend Mail对象放入Mail Queue的位置)并将传输对象的实例传递给Zend Mail对象的send()方法或作者:Zend Mail :: setDefaultTransport().

最重要的是,有很多方法可以做到这一点,但它将代表您进行一些研究和学习.然而,这是一个非常可解决的问题.


Gar*_*son 18

注意:当我第一次阅读你的问题时,我认为它一次就说了几十万封电子邮件.当我仔细检查时,我注意到它实际上说成百上千.我现在懒得改变我的帖子,所以这里有一些警告:从我的经验来看,你可以在没有商业工具的情况下运行到40K左右.在大约10K时,您将希望遵循"最小"列表,以防止在您开始达到更大的列表大小时出现重大痛苦.我建议尽快实现它.

我之前说过,发送电子邮件有两个方面:

  1. 技术方面 - 基本上所有RFC都围绕着smtp协议,电子邮件格式,DNS记录等.这有点复杂但可以解决.
  2. 神奇的一面 - 电子邮件传递管理是伏都教.你会感到沮丧,事情会因为没有明显的原因而中断,你会考虑去另一份不涉及电子邮件的工作.

我建议不要编写自己的批量发件人.我确信PHP可以做得很好,但你应该把时间花在其他地方.我过去使用过的两款产品都是Strongmail和PowerMTA.请注意 - 它们的价格很高,但我几乎可以保证从长远来看你会花更多钱建立自己的解决方案.

在PHP中编写自己的一个区域就是限制/ tar tar.邮件服务器将在您发送一些消息以减慢您的速度并阻止您发送垃圾邮件之后开始在睡眠中添加(30).

通常,这些商业批量发件人运行SMTP协议进行排队.您将继续使用Zend_Mail,但硬编码以连接到您的服务器.它会以尽可能快的速度对邮件进行排队,然后使用它自己的引擎将邮件发送到目的地.

在100K列表中,您将必须使用电子邮件最佳实践.至少,您需要:

  • SPF记录,也可能是DKIM
  • 多个IP用于对流量进行分段 - 具有3个IP,一个用于您信任的质量地址,一个用于中等风险IP地址,一个用于高风险IP地址.此设计有助于最大程度地降低向最佳客户发送邮件的风险.
  • 适当的反向DNS用于发送IP地址
  • 使用AOL,hotmail,yahoo和其他人的反馈循环来处理垃圾邮件投诉
  • 取消订阅和退回管理 - 确保您正在修剪这些地址
  • 打开/点击跟踪也很重要 - 如果您在A列表中的客户没有打开您的电子邮件,您需要将它们降级到B列表等等.这很重要,因为ISP会将非活动帐户变为蜜罐.Hotmail以此闻名.

最后,如果您真的非常认真地发送电子邮件,那么您将需要一些其他工具,如Return Path.