PHP mail()是否适合大规模邮件群发?

5
我正在创建一个系统,定期发送数千封电子邮件的列表。我知道在PHP中使用mail()函数会很耗费资源,特别是如果同时调用太多次。
大致上,我的系统工作方式是在MySQL中创建电子邮件队列,并使用mail()每次发送25个电子邮件,然后从表中删除已发送的前25个。我在每组25个之间等待2秒钟。
这对服务器来说是不是太过于劳累了?我可以推动它更远吗?比如每秒50个?或者有更好的方法在更短的时间内发送多封电子邮件而不损失服务器性能?
我有一台没有任何mail()调用限制的专用服务器。

希望你不是在为垃圾邮件发送者工作。 :) - Kaz
可能是PHP批量发送邮件(25K-100K)列表的重复问题。 - Mike B
希望您正在使用专用机器,没有共享主机会允许这种流量,并且我投票支持PHPMailer。 - user557846
这是为旅行社设计的,向订阅者发送特别优惠信息。 - multimediaxp
我想我找到了它:http://code.google.com/a/apache-extras.org/p/phpmailer/downloads/list - multimediaxp
3个回答

5
除了性能外,还有其他要考虑的因素,但简短的回答是:有更好的选择。我知道 Amazon SES 和 MailChimp 这两个选项都受到了积极的反馈。
关于性能问题,请参考 j08691 的答案,但使用 mail() 的其他问题包括:
1. 可扩展性(最终你会遇到所有 SMTP 服务器都无法处理的瓶颈,而你已经在考虑这个问题了); 2. 完整性 - 当你自己编写大规模邮件发送程序时,尤其是使用 mail 时,很容易被标记为垃圾邮件,因为它默认使用本地 sendmail。 3. 成本效益和投资回报率 - 可靠的大规模邮件发送服务可以以竞争性价格提供正确的服务。在某些时候,当你的邮件服务器崩溃、摆脱黑名单、手动编写电子邮件布局、进行一般维护等等时,你每小时支付给自己的费用可能比支付大规模邮件发送服务还要少。
总的来说,最大的问题是你必须自己完成所有工作,并且由于 PHP 忙于处理 Web 应用程序的所有其他任务,所以你很可能会被标记为 SPAM,从而不需要支付能够每秒发送数百封电子邮件而不是每分钟发送一百封电子邮件的服务费用。
个人经历(不是 SES 的认可,只是大规模邮件发送服务):我们有一个客户,每个活动都要发送 10 万多封电子邮件,每天至少有 1-3 次活动。他们开始抱怨客户收到“每日优惠”的电子邮件晚了 2 天。这不是因为 Mailer 库很慢(即使这个应用程序也避免使用纯 mail),而是因为它无法确保在电子邮件变得无关紧要之前发送每个活动的所有电子邮件。我们将他们切换到 SES(在我们端进行了一些优化,但并不多),他们可以在不到一个小时内清除一项活动。

我听说过这些,但是为了创建每封电子邮件的内容,我需要从我的数据库中提取不同表格的数据,而且我有一个定时任务自动发送电子邮件;我能使用MailChimp或Amazon SES来实现吗? - multimediaxp
亚马逊SES,绝对没问题。你基本上可以像使用邮件服务器一样使用它(或多或少)。Mailchimp有一个相当不错的API,但我记不清它是否允许您传递消息内容或仅限于用户列表(不过很容易找到答案)。SES将是一个更昂贵的选择,因此也许有一个良好的中间地带的大规模邮件发送器可以开始使用。而计划任务调度程序并不重要。脚本就是脚本,无论如何连接大规模邮件发送器,都只需要与任何资源相同的凭据。 - Anthony

4

来自PHP手册:

注意:

值得注意的是,mail()函数不适合在循环中发送大量电子邮件。该函数为每封电子邮件打开和关闭一个SMTP套接字,效率不高。

对于发送大量电子邮件,请参见»PEAR::Mail和»PEAR::Mail_Queue软件包。


1
考虑使用 Zend_Mail 吗? - Yzmir Ramirez
PEAR是一个框架,对吧?我知道我应该阅读文档,但也许你可以告诉我,为了安装它,我需要在控制台上执行命令还是只需上传文件和文件夹到我的服务器即可? - multimediaxp
从技术上讲,你可以选择任何一种方式,但是如果你使用的是托管提供商,大多数情况下他们通常已经安装了它。 - j08691

4
尝试使用PHPMailer。我每天使用它发送大约100封邮件,没有任何问题。

谢谢!有链接吗?我没有找到PHPMailer的网站。 - multimediaxp
PHPMailer是我首选的SMTP库。只需记住它仍将与其余PHP共享资源,就像邮件一样。它只是使用更少的资源来完成工作。 - Anthony

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接