我正在使用SwiftMailer发送批量电子邮件。目前,我用代码来做
$transport = Swift_SmtpTransport::newInstance('*****', 25);
$transport->setUsername('***');
$transport->setPassword('***');
$mailer = Swift_Mailer::newInstance($transport);
$message = Swift_Message::newInstance();
$message->setSubject($derBetreff);
$bbc= array('1@web.de','2@web.de','3@web.de',...,'1000@web.de');
$message->setFrom(array('my@email.de' => 'My Name'));
$message->setTo('my@email.de');
$message->setBcc($bcc);
$message->setBody('Hi this is my email');
$message->attach(Swift_Attachment::fromPath('myFile.pdf'));
// Send the message
$result = $mailer->send($message);
echo $result;
我只向自己发送一封电子邮件,并在密件抄送中添加约 1000 人。
执行代码并发送一封电子邮件大约需要 9 分钟,它会返回“成功”消息。但是,我的 php.ini 文件中的max_execution_time仅设置为 30 秒。
我的第一个问题是:为什么 max_execution_time 不会停止我的 SwiftMailer 脚本?
其次,我找到了Swiftmailer 的 AntiFlood 插件,它有助于发送大量电子邮件。下面的脚本通过先发送 100 封电子邮件,然后暂停 30 秒并继续发送接下来的 100 封电子邮件,向每个成员发送一封电子邮件,依此类推。我读过这是避免被标记为垃圾邮件的好习惯。
我的第二个问题是:AntiFlood 插件是否需要非常长的执行时间才能工作?例如,如果我使用下面给出的脚本发送 1000 封电子邮件并且只考虑暂停,那么脚本已经运行了至少 4.5 分钟,对吗?
// Create the Mailer using any Transport
$mailer = Swift_Mailer::newInstance(
Swift_SmtpTransport::newInstance('smtp.example.org', 25)
);
// Use AntiFlood to re-connect after 100 emails
$mailer->registerPlugin(new Swift_Plugins_AntiFloodPlugin(100));
// And specify a time in seconds to pause for (30 secs)
$mailer->registerPlugin(new Swift_Plugins_AntiFloodPlugin(100, 30));
// Continue sending as normal
for ($lotsOfRecipients as $recipient) {
...
$mailer->send( ... );
}