Как подтвердить отправку письма при использовании Zend_Mail?
-
21-09-2019 - |
Вопрос
Я использую 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() работала правильно.Это не значит, что письмо было отправлено.
Я думаю, единственный способ убедиться, что письмо было доставлено, - это вставить ссылку с кодом подтверждения в письмо и заставить пользователя нажать на нее.