2012-01-07 6 views
1

Можно создать дубликат:
Swiftmailer 4 does not retrieve bounces as $failedRecipientsSwiftMailer неудачи Gmail SMTP

Я использую SwiftMailer отправить электронную почту через мой счет GMail с помощью SMTP.

У меня есть все, что нужно, и я могу отправлять электронные письма без каких-либо проблем.

documentation говорит, что send() должен возвращать 0, если никаких сообщений не отправляются успешно и заполнить массив (я назвал его $failures), с неудавшимся адресом электронной почты.

Проблема, которую я вижу в том, что если я отправить письмо на несуществующий адрес ([email protected]), я получаю ответ от GMail:

Mail Delivery Subsystem [email protected] 
9:06 PM (6 minutes ago) 
to me 
Delivery to the following recipient failed permanently: 

    [email protected] 

Technical details of permanent failure: 
DNS Error: Domain name not found 

----- Original message ----- 

Однако SwiftMailer еще возвращает сообщение 1 (1 успешно отправлено), а массив $failures остается пустым.

Поскольку соединение зашифровано с помощью SSL, я не думаю, что могу нюхать и смотреть на пакеты с помощью wirehark.

Моя догадка заключается в том, что SMTP-сервер GMail возвращает успех, в то время как он генерирует сообщение об ошибке и отправляет его на адрес отправки.

Это правильно? Если да, есть ли способы поймать неудачи в PHP?

+0

Swiftmailer отправляет только электронное письмо. Сообщение об ошибке отправляется позже, Swiftmailer не проверяет их. – hakre

+0

Просто подсказка: вы можете проверить, существует ли запись DNS MX для этого домена, прежде чем на самом деле пытаться отправить электронное письмо: http://www.php.net/manual/en/function.checkdnsrr.php – JuCachalot

ответ

0

Swift может сообщить только, принимал ли SMTP-сервер почту для доставки или нет - не удается проверить ошибки, которые появляются позже в процессе доставки почты.

В вашем случае демон SMTP gmail принял это сообщение и не смог его обработать, но опоздать можно только оповещать об этом.

Если вы хотите запрограммировать их, вы можете написать клиент IMAP, который войдет в вашу учетную запись gmail и сканирует его для аналогичных сообщений. Хотя я не уверен, что это стоит усилий.

+1

Я не думаю это будет сложно. Установка «Return-Path» на что-то вроде «bounce + uniqueid @ mydomain.com», а затем выполнение задания cron, которое проверяет «bounce @ mydomain.com» и собирает эти уникальные идентификаторы, будет работать. Только проблема заключается в том, что gmail заменяет любые пользовательские заголовки «return-path» вашим адресом gmail, но это не главная проблема здесь :) – F21

Смежные вопросы