情况如下:我已经安装了一个带有PHP 5.2和标准sendmail的Redhat Linux服务器,我们正在使用这个服务器将电子邮件发送到一个包含10,000个电子邮件地址的列表。 我们有一个相当简单的脚本,它使用PHPMailer并通过SMTP连接到监听的sendmail守护进程。
每当这个脚本运行的时候,它将最终到达开始运行速度慢的地步 – 它会快速启动,但是放慢速度,每隔几分钟只发送一封电子邮件。 当我重新启动脚本时,它又快速运行了一下。
在sendmail服务器上,我已经在脚本中添加了一些设置来尝试修复限制问题:
define(`confMAX_QUEUE_RUN_SIZE',`0')dnl define(`confBAD_RCPT_THROTTLE', `0')dnl define(`confCONNECTION_RATE_THROTTLE', `0')dnl
到目前为止,我不确定解决问题的最佳方法 – 甚至是排除故障。 / var / log / maillog文件中没有任何有用的信息。
我们已经将这个sendmail实例放在了防火墙后面,所以我们不需要担心安全问题,只需打开它并让邮件stream通即可!
您不应该通过脚本连接到远程SMTP,而是使用sendmail(或更好的,后缀)传递到本地主机。 Sendmail应该负责传递这些消息。 如果您需要确保所有消息都通过特定的网关机器,请使用正确的smarthostconfigurationsendmail。
你想这么做的原因是发送邮件比你想象的要复杂得多,sendmail(或者更好的postfix)是为了处理队列pipe理等所有的细节而devise的。
至于邮件服务器本身发生了什么,你是否检查过该服务器上的负载和其他因素? 发送这么多的消息之后它可能会被重载,并且由于它而合法地慢。 检查'顶部','netstat -n'等东西…
你可能想尝试增加sendmail的日志冗长度。 这可能会给你更多的线索。
您可能需要尝试确定延迟来自PHP端还是来自sendmail端。
当速度变慢时,运行一个netstat并查看哪些端口是打开的。
仔细检查DNS。 确保您的服务器可以快速parsing域名。 发送大量电子邮件时,经常在本地运行cachingDNS服务器。
我没有以这种方式使用PHPMailer,但是我可以通过一个php脚本来调用/ usr / sbin / sendmail,在适中的硬件上可以看到600+信息/分钟。