Anlehnend an Mailbox E-Mail-Validierung fehlerhaft? ist mir gestern beim E-Mail-Versand ein Problem aufgefallen. Ich bin mir nicht sicher, ob dies ein Bug im WSC ist oder ein Fehler vom Mailserver (Hoster: all-inkl).
Ausgangssituation: In einem Script habe ich 100 E-Mails versendet. Versendet wurden diese in einer Schleife und direkt synchron über
foreach ($email->getJobs() as $job) {
BackgroundQueueHandler::getInstance()->performJob($job);
}
abgeschickt.
Problem war dann, dass die 5. E-Mail-Adresse in der Schleife fehlerhaft war (siehe Mailbox E-Mail-Validierung fehlerhaft?). Dadurch gab es nicht nur bei dieser E-Mail Probleme, sondern auch bei allen 95 darauffolgenden. Die Probleme haben sich so widergespiegelt, dass jede Email ca. 1 Minute für den Versand benötigt hat (das Script lief also ca. 60 Minuten) und diese dann auch nicht direkt versendet wurde, sondern temporär erst ein TransientFailure für jede der 95 E-Mails entstand. Nach 15 Minuten wurden diese dann durch den BackgroundQueueHandler doch noch versandt.
Um das Ganze nun nachzubilden, habe ich folgenden Script gebaut:
$mails = [
'works@example.com',
'bug@example.com
',
'shouldwork1@example.com',
'shouldwork2@example.com'
];
$errors = [];
$success = [];
$emailTransport = new SmtpEmailTransport('xxx', 25, 'xxx', 'xxx', 'may');
foreach ($mails as $mail) {
$recipient = new Mailbox($mail);
// build mail
$email = new Email();
$email->addRecipient($recipient);
$email->setSubject('foo');
$email->setBody(new MimePartFacade([
new HtmlTextMimePart('foo'),
]));
// similar to EmailDeliveryBackgroundJob::perform
try {
try {
$success[$mail] = [
$emailTransport->deliver($email, new Mailbox('sender@example.com'), $recipient),
date('D, d M Y H:i:s', \time())
];
} catch (\Throwable $e) {
$errors[$mail] = [
date('D, d M Y H:i:s', \time()),
$e->getMessage()
];
}
} catch (PermanentFailure $e) {
$errors[$mail] = [
date('D, d M Y H:i:s', \time()),
$e->getMessage()
];
}
}
wcfDebug($errors, $success);
Display More
Die Ausgabe ist folgende:
Argument 0 (array)
Array
(
[bug@example.com
] => Array
(
[0] => Wed, 17 Aug 2022 06:34:43
[1] => Remote SMTP server reported permanent error code: 501 (5.1.3 Bad recipient address syntax.) in reply to 'RCPT TO:'
)
[shouldwork1@example.com] => Array
(
[0] => Wed, 17 Aug 2022 06:34:43
[1] => Remote SMTP server reported permanent error code: 502 (5.5.2 Error: command not recognized.) in reply to 'RSET'
)
[shouldwork2@example.com] => Array
(
[0] => Wed, 17 Aug 2022 06:34:59
[1] => Remote SMTP server reported not expected code: 250 (2.1.5 Ok.) in reply to 'DATA'
)
)
Argument 1 (array)
Array
(
[works@example.com] => Array
(
[0] => 2.0.0 Ok: queued as D0F4D5C020F
[1] => Wed, 17 Aug 2022 06:34:42
)
)
wcfDebug() called in /var/www/seo/lib/page/TestPage.class.php on line 2062
Display More
shouldwork1@example.com und shouldwork2@example.com erhalten also auch Fehler vom Mailserver, wieso weiß ich nicht. Wird hier die Mailserver-Antwort von bug@example.com vom WSC falsch verarbeitet und dadurch entstehen Folgefehler oder ist das ganze ein Bug im Mailserver?
Beste Grüße