Кто-нибудь знает, возвращает ли функция отправки SwiftMailer статус доставки? Я хотел бы знать, что письмо было доставлено или не доставлено. Возможно ли это?
благодаря
Существует не менее трех уровней проверок, поддерживаемых 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 => receiver@bad-domain.org, 1 => other-receiver@bad-domain.org ) */
3) В некоторых ситуациях вам может понадобиться включить также возвратные квитанции , которые подтверждают, что читатель электронной почты отображал это сообщение. Они часто отключены или игнорируются пользователями или их приложениями электронной почты, но если вы получаете квитанцию, она является очень подтверждением. Также обратите внимание, что это может произойти через несколько дней после отправки, поэтому это не синхронный тест в режиме реального времени, как два выше.
$message->setReadReceiptTo('your@address.tld');
Однако, поскольку в передаче SMTP так много переменных и уровней систем, как правило, невозможно быть абсолютно уверенным, что сообщения были доставлены. Лучшее, что вы можете сделать, это убедиться, что вы используете первые две проверки выше. Если вы используете свой собственный сервер для службы SMTP, вам также нужно следить за своими журналами и очередями, как упоминал Марк Б.
Еще один пример, который подчеркивает необходимость познакомиться с любой базовой системой электронной почты, которую вы используете. Я только начал использовать Swift_AWSTransport от Джона Хоббса для SES Amazon Web Services. SES имеет возможность возвращать ответ XML с диагностической информацией для каждого отправленного через него сообщения. Хотя SwiftMailer по сути не понимает, как использовать этот ответ XML, я нашел его неоценимым для устранения неполадок доставки. Я упоминаю об этом, потому что обнаружил, что в некоторых случаях проверки # 1 и # 2 выше будут успешными для SwiftMailer, но SES не понравилось что-то в моем форматировании сообщений. Поэтому я рассматриваю анализ XML как дополнительную проверку.
Swiftmailer не имеет ничего общего с фактической доставкой почты. Он просто передает все на любой SMTP-сервер, который вы указали, и именно этот сервер заботится о доставке. Вам нужно проверить журналы сервера SMTP, чтобы узнать, что произошло с почтой. Он может застрять в исходящей очереди, потому что сервер загружен. Он может застрять в очереди, потому что принимающая сторона недоступна или использует серо-листинг и т. Д. Работа Swiftmailer заканчивается после получения подтверждения с сервера SMTP, что почта была поставлена в очередь.
Скорее старый пост, но с Swiftmailer 4+ и помимо получения статуса result
от вызова метода send
. Если вы хотите отладить свою почтовую программу и посмотреть, что происходит во время транспортировки, вы можете использовать плагины Logger или даже создать свой собственный плагин. http://swiftmailer.org/docs/plugins.html#logger-plugin
$mailer = \Swift_Mailer::newInstance( \Swift_SmtpTransport::newInstance('tls://smtp.gmail.com', 465) ); $logger = new \Swift_Plugins_Loggers_ArrayLogger; //$logger = new \Swift_Plugins_Loggers_EchoLogger; //echo messages in real-time $mailer->registerPlugin(new \Swift_Plugins_LoggerPlugin($logger)); for ($lotsOfRecipients as $recipient) { //... $mailer->send(/*...*/); } echo $logger->dump(); //not needed if using EchoLogger plugin
Который выведет транспортное сообщение для каждого вызова, который выглядит так:
++ Starting Swift_SmtpTransport << 220 smtp.gmail.com ESMTP x12sm4143221vkc.19 - gsmtp >> EHLO server.example.com << 250-smtp.gmail.com at your service, [192.168.1.1] 250-SIZE 35882577 250-8BITMIME 250-AUTH LOGIN PLAIN XOAUTH2 PLAIN-CLIENTTOKEN OAUTHBEARER XOAUTH 250-ENHANCEDSTATUSCODES 250-PIPELINING 250-CHUNKING 250 SMTPUTF8 >> AUTH LOGIN << 334 AbcDefGhIjKlMnop >> AbcDefGhIjKlMnop== << 334 AbcDefGhIjKlMnop >> AbcDefGhIjKlMnop== << 235 2.7.0 Accepted ++ Swift_SmtpTransport started >> MAIL FROM: << 250 2.1.0 OK x12sm4143221vkc.19 - gsmtp >> RCPT TO:<recipient@example.com> << 250 2.1.5 OK x12sm4143221vkc.19 - gsmtp >> DATA << 354 Go ahead x12sm4143221vkc.19 - gsmtp >> . << 250 2.0.0 OK 1468948643 x12sm4143221vkc.19 - gsmtp