Intereting Posts
Как использовать CRON в окнах xampp? Шаг за шагом для использования в разработке Как запустить и остановить сервер PHP dev с помощью exec () Как активировать mod_rewrite? Zend Framework DbTable insert () дважды вставляет записи Как перенаправить пользователя в мобильное приложение или веб-сайт при нажатии гиперссылки, отправленной по электронной почте? Должно ли это быть обработано на стороне сервера с помощью PHP? «Ошибка 404 не найдена» в Magento Admin Login Page Array-Merge на ассоциативном массиве в PHP Как отправить электронное письмо каждые три дня, пока бронирование не будет подтверждено извлекать теги (слова) из цельной строки Проверьте, выполняется ли вызов с использованием клиента TOR Какая была ваша любимая функция, которая была введена в PHP 5.3? Параметры локализации веб-приложения Является ли mysql_real_escape_string достаточным для инъекции SQL? Как написать байт по байту в сокет в PHP? PHP 5.3 автоматически ускоряет $ _GET / $ _ POST из строк формы?

Статус доставки Swift Mailer

Кто-нибудь знает, возвращает ли функция отправки 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