【问题标题】:Is php mail() a good option for mass mailing?php mail() 是群发邮件的好选择吗?
【发布时间】:2012-03-24 14:37:11
【问题描述】:

我正在创建一个系统,将定期发送数千封电子邮件的列表,我知道 PHP 中的 mail() 函数非常繁重,特别是如果同时调用太多次。

我的系统的大致工作方式是,我在 MySQL 中创建电子邮件队列,并使用mail() 分批发送 25 封邮件,从表中删除发送的前 25 封邮件。我在每组 25 个之间等待 2 秒。

这对服务器来说是不是太费力了,还是我可以把它推得更远一点? 让我们说每秒50?或者有一种更好的方法可以在更短的时间内发送大量电子邮件而不会牺牲服务器性能。

我有一个没有任何mail() 呼叫限制的专用服务器。

【问题讨论】:

标签: php mysql email massmail


【解决方案1】:

除了性能之外,还有其他因素需要考虑,但简短的回答是:还有更好的选择。 Amazon SES 和 MailChimp 是我所知道的两个并收到了积极反馈。

查看 j08691 对性能的回答,但为此目的使用 mail() 的其他问题包括:

  1. 可扩展性(您最终会遇到任何 SMTP 服务器无法处理的问题,而您已经在考虑它了)

  2. 诚信 - 滚动您自己的群发邮件时,您更有可能被标记为垃圾邮件,尤其是使用 mail,因为它使用本地 sendmail。

  3. 成本/收益和投资回报率 - 可靠的群发邮件可以做到正确并具有竞争力的价格。在某些时候,您在邮件服务器崩溃、退出黑名单、手工编写电子邮件布局、一般维护等方面所支付的每小时费用低于为群发邮件服务支付的费用。

总体而言,最大的问题是您必须自己完成所有工作,并且您可能会被标记为垃圾邮件,因为您无需支付每秒能够发送数百封电子邮件的服务而不是当 PHP 不忙于为您的 Web 应用程序处理其他所有事情时,每分钟 100 分钟。

个人轶事(不是对 SES 的认可,只是群发邮件):我们有一个客户,每个活动发送 10 万多封电子邮件,每天最少 1 到 3 个活动。他们开始抱怨客户迟到了 2 天才收到有关“每日交易”的电子邮件。这不是因为 Mailer 库很慢(甚至这个应用程序也避免使用普通的mail),而是它无法确保每个发送所有的电子邮件/em> 电子邮件之前的活动无关紧要。我们将他们切换到 SES(我们进行了一些优化,但不多),他们可以在一小时内清除一个广告系列。

【讨论】:

  • 我听说过这些,但是为了创建每封电子邮件的内容,我需要从数据库中的不同表中提取数据,而且我有一个自动发送电子邮件的 cronjob;我可以使用 MailChimp 或 Amazon SES 做到这一点吗?
  • 亚马逊 SES,绝对是。您基本上可以像邮件服务器一样使用它(或多或少)。 Mailchimp 有一个漂亮的下降 API,但我不记得它是否允许您传递消息内容或仅传递用户列表(虽然很容易找到)。 SES 将是一个更昂贵的选择,所以也许有一个很好的中间地大众邮件开始。并且 cronjob 调度程序应该无关紧要。脚本就是脚本,而群发邮件程序,无论它如何连接,都只需要与任何资源相同的凭据。
【解决方案2】:

来自PHP manual

注意:

值得注意的是mail()函数不适合较大的 循环中的大量电子邮件。这个函数打开和关闭一个 SMTP 每封邮件的socket,效率不高。

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

【讨论】:

  • 考虑使用Zend_Mail?
  • PEAR 是一个框架吧?我知道我应该阅读文档,但也许您可以告诉我是否要安装它,我需要在控制台上执行命令,或者我可以简单地将文件和文件夹上传到我的服务器?
  • 从技术上讲,您都可以这样做,但是如果您使用的是托管服务提供商,他们中的大多数通常都会安装它。
【解决方案3】:

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

【讨论】:

  • 谢谢!任何链接?我没有找到 PHPMailer 网站。
  • PHPMailer 是我选择的 SMTP 库。请记住,它仍将与 PHP 的其余部分共享资源,就像邮件一样。它只是使用更少的资源来完成工作。
猜你喜欢
  • 2013-08-15
  • 2015-05-08
  • 2012-10-06
  • 1970-01-01
  • 2011-06-05
  • 1970-01-01
  • 1970-01-01
  • 2019-02-04
  • 2023-02-01
相关资源
最近更新 更多