2

我正在改进mail()循环使用的 PHP 邮件列表代码,同时遍历所有订阅者。该脚本用于显示“超过 30 秒的最大执行时间”错误,我通过添加set_time_limit(0);.

现在没有错误,但发送 100 条消息大约需要 7 分钟。我有哪些选择?

在密件抄送中向所有订阅者发送一条消息会有所帮助,还是“在幕后”相同?

4

5 回答 5

1

通过在密件抄送中指定它们来发送给所有订阅者应该更快。虽然,虽然它对于某些私人环境可能是一个不错的选择,但我不建议在公共网页/系统中这样做,因为许多人可能认为此类电子邮件是垃圾邮件。

一种选择是通过 cron 作业发送电子邮件。在这种情况下,发送一封电子邮件需要多少时间并不重要,只要最终发送所有电子邮件即可。

于 2011-02-24T13:19:25.967 回答
1

以密件抄送方式发送给所有人会快很多。代码将执行得更快,并且mail()只会执行一次。

这是快速修复,但如前所述,大型密件抄送列表是通往垃圾邮件文件夹的安全途径。但是,使用mail()也是垃圾邮件的确定目的地。

如果您想真正改进它,请使用SourceForge 的 PHPMailer,并使用 cron 一次通过 SMTP(更少的垃圾邮件命中)发送 X 电子邮件。

PHP 文档状态:

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

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

于 2011-02-24T13:21:14.293 回答
0

由于您只是在询问选项,因此这里有一些:

  • 分析您的代码,看看为什么它很慢。也许你可以解决一些效率问题。
  • 依赖mail()函数通常是不可取的,特别是因为存在更好的替代品,如 swiftmail 或 Zend_mail。尽管这些对于小型邮寄要求来说可能是多余的
  • 它可能是与服务器相关的问题吗?也许与您的服务器管理员交谈。
于 2011-02-24T13:15:09.037 回答
0

Cron Job 是更好的主意。我使用了它并且它可以工作......您的代码配置文件将帮助您找出问题所在。

于 2011-02-24T13:26:12.813 回答
0

我确实建议通过密件抄送发送邮件,因为它会快很多。您的脚本只需与 SMTP 服务器建立一个连接,该服务器将为您完成其余的工作。

我也会看看例如 PHPMailer 或 PEAR::Mail。用于批量邮件的 mail() 方法的坏处在于,它将为每封发送的电子邮件打开一个到 SMTP 服务器的新套接字。一个好的邮件库将创建一次到 SMTP 服务器的套接字连接,然后将发送所有电子邮件并在最后关闭它。

为了加快速度,您还可以查看您的 SMTP 服务器配置(如果可能)并尝试增加守护进程等。您可能还需要考虑某些 SMTP 服务器具有您可以发送的最大值。

于 2011-02-24T13:58:31.607 回答