Как подтвердить отправку письма при использовании Zend_Mail?

StackOverflow https://stackoverflow.com/questions/1571459

Вопрос

Я использую Zend framework для отправки почты.Как только настройка завершена и код написан, все это сводится к одному вызову:

$Mail->send($Transport)

Как я могу проверить, что это письмо было отправлено правильно?Я где-то читал, что Zend Mail выдает исключение, но другие люди говорили, что иногда это не так.

Какой пуленепробиваемый программный способ гарантировать правильную отправку почты при использовании Zend_Mail?

Редактировать:Когда я имею в виду отправлено, я имею в виду отправлено на SMTP-сервер.

Это было полезно?

Решение

В целом Zend_Mail выдаст исключение, если в процессе отправки происходит что-то неправильное - но это сильно зависит от Zend_Mail_Transport_* используется.

Здесь у вас есть два варианта:

  • Zend_Mail_Transport_Sendmail (транспорт по умолчанию) зависит от mail().Если mail() ВОЗВРАТ false, Zend_Mail_Transport_Sendmail бросает Zend_Mail_Transport_Exception (Не удается отправить почту).Возвращаемое значение само по себе не очень надежно.Это то, что говорится в руководстве о возвращаемом значении:

    Возвращает значение TRUE, если письмо было успешно принято к доставке, и значение FALSE в противном случае.

    Важно отметить, что только потому, что письмо было принято к доставке, это НЕ означает, что оно действительно достигнет предполагаемого адресата.

  • Zend_Mail_Transport_Smtp отправляет электронное письмо с использованием протокола SMTP, который инкапсулирован в Zend_Mail_Protocol_Smtp.В этом случае вы получите Zend_Mail_Protocol_Exception всякий раз, когда что-то либо нарушает протокол SMTP (например, отправка почты без указания адреса отправителя), либо сервер STMP сообщает об ошибке или истекло время ожидания соединения.

    Таким образом, если при общении с сервером STMP не возникает исключения, вы можете быть уверены, что удаленный сервер, по крайней мере, принял ваше электронное письмо.

Другие советы

Я думаю, это не так.Если "отправка" завершилась неудачей, вы получите исключение.Но это всего лишь проверка того, что функция send() работала правильно.Это не значит, что письмо было отправлено.

Я думаю, единственный способ убедиться, что письмо было доставлено, - это вставить ссылку с кодом подтверждения в письмо и заставить пользователя нажать на нее.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top