Ответ 1
Существует не менее трех уровней проверок, поддерживаемых SwiftMailer, которые сообщают о нескольких типах сбоев доставки.
1) Всегда проверяйте код возврата из команд SwiftMailer send() или batchSend() для ненулевого результата. Из документации:
//Send the message
$numSent = $mailer->send($message);
printf("Sent %d messages\n", $numSent);
/* Note that often that only the boolean equivalent of the
return value is of concern (zero indicates FALSE)
if ($mailer->send($message))
{
echo "Sent\n";
}
else
{
echo "Failed\n";
}
2) Используйте функцию отказов по ссылке, чтобы узнать, были ли отклонены или не были удалены определенные адреса:
//Pass a variable name to the send() method
if (!$mailer->send($message, $failures))
{
echo "Failures:";
print_r($failures);
}
/*
Failures:
Array (
0 => [email protected],
1 => [email protected]
)
*/
3) В некоторых ситуациях вы можете захотеть включить возвратные квитанции, которые подтверждают, что сообщение электронной почты отображало сообщение. Они часто отключены или игнорируются пользователями или их приложениями электронной почты, но если вы получаете квитанцию, она является очень подтверждением. Также обратите внимание, что это может произойти через несколько дней после отправки, поэтому это не синхронный тест в режиме реального времени, как два выше.
$message->setReadReceiptTo('[email protected]');
Однако, поскольку в SMTP-доставке так много переменных и уровней систем, как правило, не может быть абсолютно уверены, что сообщения были доставлены. Лучшее, что вы можете сделать, это убедиться, что вы используете первые две проверки выше. Если вы используете свой собственный сервер для службы SMTP, вам также нужно следить за вашими журналами и очередями, о которых говорил Marc B.
Еще один пример, который подчеркивает необходимость познакомиться с любой базовой системой электронной почты, которую вы используете. Я только начал использовать Swift_AWSTransport от Джона Хоббса для SES Amazon Web Services. SES имеет возможность возвращать ответ XML с диагностической информацией для каждого отправленного через него сообщения. Хотя SwiftMailer по сути не понимает, как использовать этот ответ XML, я нашел его неоценимым для устранения неполадок доставки. Я упоминаю об этом, потому что обнаружил, что в некоторых случаях проверки # 1 и # 2 выше будут успешными для SwiftMailer, но SES не понравилось что-то в моем форматировании сообщений. Поэтому я рассматриваю анализ XML как дополнительную проверку.