Я использую SwiftMailer для отправки массовых писем. На данный момент, я делаю это с кодомМассовая электронная почта с Swiftmailer
$transport = Swift_SmtpTransport::newInstance('*****', 25);
$transport->setUsername('***');
$transport->setPassword('***');
$mailer = Swift_Mailer::newInstance($transport);
$message = Swift_Message::newInstance();
$message->setSubject($derBetreff);
$bbc= array('[email protected]','[email protected]','[email protected]',...,'[email protected]');
$message->setFrom(array('[email protected]' => 'My Name'));
$message->setTo('[email protected]');
$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 минут для выполнения кода и отправки одного электронного письма, и оно возвращает сообщение об успешном завершении. Тем не менее, мой max_execution_time в моем файле php.ini установлен только на 30 секунд.
Мой первый вопрос: почему max_execution_time не останавливает мой скрипт SwiftMailer?
Вторичный, я нашел AntiFlood Plugin for Swiftmailer, который помогает отправлять массовые электронные письма. Скрипт ниже отправляет каждому члену одно электронное письмо, сначала отправляя 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(...);
}
Привет, мне нужно заполнить эту точную вещь, как вы это сделали? –
@LeeWiggins вы можете безопасно использовать плагин Anti-Flood или даже лучше почтовый запрос. Я добавил здесь ответ: https://stackoverflow.com/a/47922195/2311074 – Adam