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;
私は自分自身に 1 つの電子メールを送信するだけで、BCC に最大 1000 人を追加します。
コードを実行して 1 つの電子メールを送信するのに約 9 分かかり、「成功」メッセージが返されます。ただし、 php.ini ファイルのmax_execution_timeは 30 秒にしか設定されていません。
私の最初の質問は、なぜ max_execution_time が SwiftMailer スクリプトを停止しないのですか?
次に、 Swiftmailer 用の AntiFlood Pluginを見つけました。これは大量のメールを送信するのに役立ちます。以下のスクリプトは、最初に 100 通のメールを送信してから 30 秒間一時停止し、次の 100 通のメールの送信を続けることで、各メンバーに 1 つのメールを送信します。これは、スパムとしてマークされるのを回避するための優れた方法であると読みました。
2 つ目の質問は、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( ... );
}