我正在使用 Zend 框架发送邮件。一旦配置完成并且编写的代码全部归结为一个调用:
$Mail->send($Transport)
如何检查此邮件是否已正确发送?我在某处读到 Zend Mail 抛出异常,但其他人说有时并非如此。
使用 Zend_Mail 时确保正确发送邮件的防弹编程方法是什么?
编辑:当我的意思是发送时,我的意思是发送到 SMTP 服务器。
我正在使用 Zend 框架发送邮件。一旦配置完成并且编写的代码全部归结为一个调用:
$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() 函数是否正常工作。这并不意味着邮件已发送。
我想确保邮件已送达的唯一方法是在邮件中插入确认代码链接并让用户点击它。