【问题标题】:Sending emails through PHP mail is slow通过 PHP 邮件发送电子邮件很慢
【发布时间】:2011-06-17 01:27:08
【问题描述】:

我有一个拥有超过 100 万成员的大型董事会,我在向每个成员发送电子邮件之间遇到了很大的延迟。按照目前的速度,我需要 3 个月的时间才能向所有 100 万会员发送电子邮件。

我的机器(专用):

  • 双四极强
  • 32 场公羊
  • Centos 5.4
  • vBulletin

我尝试了多种方式配置它,但仍然很慢。

解决方案是在本地完成的,所以我认为这不是问题所在。有什么建议吗?


vBulletin 在发送电子邮件时显示(一次 500 封),因此我知道脚本没有超时或内存问题。完成 500 页,需要 10 分钟。我正在使用 PHP 的 mail() 函数,这是除 SMTP 之外的唯一选择。以前的服务器我没有自己配置,它一直很快。现在用sendmail(PHP的邮件功能)试试,太慢了。

【问题讨论】:

  • 您是否为这个 PHP 脚本正确分配了内存?
  • @PhpMyCoder:你在说什么?
  • 您是否连接到远程服务器以发送邮件?这可能与您的本地盒子无关,而与远程端有关。
  • 您是否查看了邮件日志中的时间戳以确定您在发送每条消息的过程中遇到延迟的时间点?
  • @zerkms 是的。我以前见过。这是你为我发布时刻之前的想法。

标签: php


【解决方案1】:

检查您的/etc/hosts 文件。

如果您有一个指向本地主机名的外部 IP 地址条目,例如:

75.23.123.21 my-server-hostname

改成:

127.0.0.1 my-server-hostname

然后尝试再次运行 PHP mail() 函数。

【讨论】:

  • 找到一个实例,并没有真正做出改进:测试 500 封电子邮件开始时间:11:27 结束时间:11:33
  • 你应该确保你的机器的非限定(短)主机名在 /etc/hosts 中指向环回,更多细节在这里:alphadevx.com/a/…
【解决方案2】:

我要说的是,如果您需要达到 100 万订阅者,那么您最好不要自己动手。相反,为什么不使用像 Mailchimp 这样的服务,它的主要重点是发送电子邮件。

想想优点:

  1. 您不必担心带宽、基础设施和维护。

  2. 您获得了有关您的电子邮件营销活动的执行情况和列表的健康状况的全面分析 - 您说您有 100 万封电子邮件,但其中有多少被退回?开了几个?每个国家/地区的开放率是多少?有多少被标记为垃圾邮件等?

  3. 根据您的业务,您可以对广告系列进行 A/B 测试并优化读取/点击/转化。

您显然会为这项服务支付额外费用,这与您当前的托管费用是分开的,但使用 Mailchimp,您需要为使用的东西付费。此外,如果你能接触到 100 万人,你可能想出了如何将其货币化(如果没有,你真的应该这样做)。因此,使用 3rd 方服务可能会收回成本。

Mailchimp 是众多服务之一(我提到它是因为我使用它并且对它非常满意)。您可能想查看SendGridCampaign MonitorAweber 并权衡利弊。

可能不是您期望的答案,但这只是我的 0.02 美元。

P.S:Mailchimp 还为您提供API,以便您可以将您的应用与他们的服务无缝集成。

【讨论】:

  • 问题是我不是想从中赚钱,我只是想与我的用户保持联系。我已经为这台服务器付出了很多,不妨充分利用它。
  • 很公平。但是,如果我是您在我的网站上有 100 万注册用户,我会花一些时间找出一种将其货币化的方法(至少足以支付服务器/基础设施成本)。只是说':)
  • 我通常不会对提出完全不同方法的答案进行投票,但在这种情况下,它确实是向 100 万个收件人发送电子邮件的正确方法。通过使用您自己的服务器,您为自己添加了大量工作(包括管理您的垃圾邮件声誉),并且您仍然很有可能永远不会收到您的电子邮件。我建议咬紧牙关,将 Mandrill 或 Sendgrid 用于触发电子邮件,并使用 Mailchimp、Emma、Sendica、Bronto 等服务用于您的时事通讯。
  • 希望投反对票的人能不厌其烦地提及他们为什么投反对票。
【解决方案3】:

来自PHP Manual

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

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

【讨论】:

    【解决方案4】:

    我远非专家,但 mail() 函数使用的 CPU 和内存比普通 Web 函数多得多,但拥有 100 万用户可能已经在您的服务器上产生了很大的负载(CPU 和 IO)。这可能会影响发送电子邮件的速度,尤其是如果您使用的是较旧的 Xeon。

    据我所知,双四核 Xeon 相对较新,发送这些电子邮件应该不会花费任何时间。

    根据我的阅读,低端单 CPU 专用服务器每分钟应该能够发送大约 500-700 封电子邮件……但这是一个专门用于发送电子邮件的系统。在像我怀疑你这样的中端服务器上,我希望它能够在几小时内发送电子邮件,而不是几个月。

    这可能是一个配置或负载问题,可能存在于许多不同的级别。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-07-01
      • 2010-11-22
      • 2010-10-09
      • 1970-01-01
      • 2017-07-05
      • 2011-05-21
      • 1970-01-01
      相关资源
      最近更新 更多