And*_*rew 16 php email mailing-list zend-framework smtp
我正在尝试为我的应用程序实现邮件列表系统.我目前正在使用Zend_Mail_Transport_Smtp('localhost')我的传输,循环访问我的订阅者列表,Zend_Mail并向每个订阅者发送一个新的.但是,我注意到脚本完成所需的时间随着订阅者数量的增加而增加.
我确信必须有更专业的方法来做这件事,包括排队电子邮件.我认为理想的方法是让用户填写表单,点击发送,然后立即得到回复,说明正在发送电子邮件,而不是等待数百封电子邮件完成发送.
据我所知,Zend_Mail没有任何排序邮件排队.任何有这方面经验的人都可以概述一下如何做到这一点吗?我对cron/crontab/cronjobs一无所知,所以如果涉及到这个问题,请解释一下这个过程.
小智 19
为了使用PHP可靠地发送大量电子邮件,您必须使用排队机制.正如其他人所建议的那样,使用队列的过程如下所示:
您可以使用一些库来执行此操作,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时,您将希望遵循"最小"列表,以防止在您开始达到更大的列表大小时出现重大痛苦.我建议尽快实现它.
我之前说过,发送电子邮件有两个方面:
我建议不要编写自己的批量发件人.我确信PHP可以做得很好,但你应该把时间花在其他地方.我过去使用过的两款产品都是Strongmail和PowerMTA.请注意 - 它们的价格很高,但我几乎可以保证从长远来看你会花更多钱建立自己的解决方案.
在PHP中编写自己的一个区域就是限制/ tar tar.邮件服务器将在您发送一些消息以减慢您的速度并阻止您发送垃圾邮件之后开始在睡眠中添加(30).
通常,这些商业批量发件人运行SMTP协议进行排队.您将继续使用Zend_Mail,但硬编码以连接到您的服务器.它会以尽可能快的速度对邮件进行排队,然后使用它自己的引擎将邮件发送到目的地.
在100K列表中,您将必须使用电子邮件最佳实践.至少,您需要:
最后,如果您真的非常认真地发送电子邮件,那么您将需要一些其他工具,如Return Path.