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


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

$Mail->send($Transport)

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

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

РЕДАКТИРОВАТЬ: Когда я имею в виду отправлено, я имею в виду отправлено на SMTP сервер.

Author: Gary Willoughby, 2009-10-15

2 answers

Обычно 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 не возникает никаких исключений, вы можете быть уверены, что удаленный сервер, по крайней мере, принял вашу электронную почту.

 35
Author: Stefan Gehrig, 2009-10-15 13:43:29

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

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

 0
Author: Tomáš Fejfar, 2009-10-15 11:36:06