【发布时间】:2009-08-17 17:33:35
【问题描述】:
我最近实现了Swiftmailer 库,但是我第一次使用它时,我得到了一个 php 超时错误,即使它只需要向大约 300 人发送邮件..(我应该提到使用 @由于服务器的限制,987654324@ 解决方法不是一个选项)
我的使用方式是这样的:
$transport = Swift_SmtpTransport::newInstance('smtp.mydomain.com',25);
$mailer = Swift_Mailer::newInstance($transport);
$message = Swift_Message::newInstance();
$message->setSubject($_POST['subj']);
$message->setFrom(array('email' => 'Mysite'));
$message->setTo($recipients);
$message->setBody(strip_tags($messagebody));
$message->addPart($messagebody, 'text/html');
$numSent = $mailer->batchSend($message);
printf("Sent %d messages\n", $numSent);
$recipients 是一个逗号分隔的电子邮件数组(使用来自 mySQL 查询的 explode() 构建)..
我不知道上面代码的哪一部分生成了脚本超时,并且由于我将它用于新闻通讯功能,因此我很难对其进行测试或调试,因此我会非常感谢任何人想出一个(近乎)防弹的解决方案来解决这个问题:)
提前致谢!
拉尔斯
【问题讨论】:
-
好的,但是你为什么不测量一下哪个语句需要这么长时间呢?例如,您可以在每个语句之后将一些内容写入调试文件。
-
您确定您的 SMTP 服务器没有限制您吗?当服务器看到大量电子邮件来自您的服务器时,您的邮件可能会受到限制。
-
我的猜测是它不是 SMTP,但当然,我不能确定..
-
我们在谈论多少 $recipients?也许你应该看看swiftmailer.org/docs/antiflood-plugin
-
小于 300 .. :) 我确实看过 swiftmailer.org/docs/antiflood-plugin 但因为我没有将其视为 SMTP 问题(而是作为 PHP 问题)我不认为这将是解决方案.. 毕竟,它可能只会增加原始脚本的执行时间,不是吗?我的意思是,antiflood 插件添加到执行中的暂停只是一个暂停,这会增加整体执行时间..
标签: php timeout swiftmailer