【问题标题】:How many emails can PHP send at one time?PHP 一次可以发送多少封电子邮件?
【发布时间】:2011-11-30 13:26:58
【问题描述】:

我有超过 4,000 名用户通过电子邮件订阅每周更新。要发送电子邮件,我只需使用:

mail($to,$subject,$message,$headers);

效果很好。我的问题是:您一次可以发送多少封电子邮件?我可以通过遍历循环内的电子邮件数组来一次发送所有 4,000 封邮件吗?或者这会导致超时情况,仅列表中的一部分接收电子邮件?

【问题讨论】:

  • 正确的解决方案是使用邮件列表管理器。它会处理诸如退回队列、合并同一域中的所有收件人等事情。使用 100 笔交易到 gmail 可能已经让您与他们一起被列入黑名单。 (仅以gmail为例;我不知道他们的具体政策。)

标签: php email


【解决方案1】:

通常,您的限制是 PHP 的内存分配和脚本超时,这两者都可以增加。更大的限制因素是垃圾邮件防火墙,它通常会限制可以来自服务器和另一个域的电子邮件数量。批量电子邮件服务使用间隔来限制在给定时间段内发送到任何给定域的邮件数量。

【讨论】:

  • 感谢您指出这一点!我完全忘记了垃圾邮件过滤系统。
【解决方案2】:

PHP 没有限制,你说什么就做什么,在一个紧密的循环中运行。

在 linux 上它是 sendmail,或 sendmail 克隆。如果它开始超载,它应该开始排队你的邮件,并在可能的时候交付它们。对于 Windows,您有一个套接字连接,我想如果邮件服务器过载,它可能会开始拒绝连接。

除非您急于将它们全部发送出去,否则请考虑在每次调用 mail() 之间进行 sleep(2)。如果一切顺利,那么下次尝试 sleep(1)。然后下一次 usleep(500000) 等等。(更新:按照马特的建议,将 set_time_limit(10) 放入循环中以避免耗尽 CPU 时间。)

如果您希望他们更快地发送出去,您可以使用多个本地中继进行循环。 (在 Windows 上,您可以通过设置 SMTP php.ini 设置来处理此问题;在 Linux 上,您可以使用通过套接字发送电子邮件的库。)或者考虑使用专业的邮件广播服务,他们会处理所有这些问题给你。

编辑刚刚看到您关于从 Mac 运行它的评论。我假设了一个服务器情况,一个具有全球 IP 的真实邮件服务器。如果您的 Mac 位于防火墙后面,您很可能会将所有电子邮件转发到您的 ISP 邮件服务器。您的 ISP 很可能会因为在短时间内收到您的 4000 封电子邮件而感到不安。 (例如,他们可能会认为您的机器已被病毒入侵并关闭您。) 此外,在共享主机上,同意不发送大量电子邮件通常是合同的一部分。所以在那儿也要小心。

【讨论】:

    【解决方案3】:

    它不依赖于 php,但它取决于您的 sendmail 服务器功能和您的托管服务提供商对您在一段时间内可以发送的电子邮件限制的支持..! PHP 只会将您的电子邮件放入 sendmail 队列...!

    【讨论】:

    • 如何检查我的 sendmail 服务器功能?我从我的 Mac 上运行它,所以我可以更好地控制我可以用它做什么。
    • 它是互联网上具有专有域或 IP 地址的系统,还是您的 Mac 个人计算机?
    • 这是一台个人电脑。我在 GoDaddy 上托管我的服务。但是,监控、发送自动电子邮件和操作数据库是在我家的这台 Mac 上完成的。
    • 您需要向 GoDaddy 支持人员查询发送电子邮件的限制。否则,您的服务可能会与该 GoDaddy IP 一起被列在垃圾邮件下。所以 GoDaddy 可能对此有限制。一旦他们说出了限制,您就可以通过 cron 作业发送一批电子邮件。
    • 如果我从家里的计算机而不是他们的服务器发送电子邮件,为什么我需要通知他们?
    【解决方案4】:

    考虑到该循环将是连续的,您可以通过循环一次将它们全部发送。它更依赖于邮件服务器,而不是 PHP。

    虽然如果你使用 WAMP,那可能会导致问题,因为 windows 下 mail() 的行为是不同的。它尝试使用套接字来传递邮件,而不是与 MTA 通信。

    【讨论】:

      【解决方案5】:

      无法提供准确的数字。这取决于您的邮件服务器和最长执行时间。 发送大量电子邮件的最佳做法是“cron job

      【讨论】:

        猜你喜欢
        • 2011-04-04
        • 1970-01-01
        • 2018-10-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多