使用 Zend_Mail 时如何验证邮件是不是已发送?

Posted

技术标签:

【中文标题】使用 Zend_Mail 时如何验证邮件是不是已发送?【英文标题】:How to verify a mail has been sent when using Zend_Mail?使用 Zend_Mail 时如何验证邮件是否已发送? 【发布时间】:2010-12-06 23:40:49 【问题描述】:

我正在使用 Zend 框架发送邮件。一旦配置完成并且编写的代码全部归结为一次调用:

$Mail->send($Transport)

我如何检查这封邮件是否已正确发送?我在某处读到 Zend Mail 会引发异常,但其他人说有时并非如此。

在使用 Zend_Mail 时确保正确发送邮件的防弹编程方法是什么?

编辑:当我的意思是发送时,我的意思是发送到 SMTP 服务器。

【问题讨论】:

发送到 SMTP 服务器?还是发送到 MTA? 【参考方案1】:

通常Zend_Mail 会在发送过程中出现问题时抛出异常 - 但这很大程度上取决于正在使用的Zend_Mail_Transport_*

你有两个选择:

Zend_Mail_Transport_Sendmail(默认传输)依赖于mail()。如果mail() 返回falseZend_Mail_Transport_Sendmail 将抛出Zend_Mail_Transport_Exception无法发送邮件)。返回值本身不是很可靠。这是手册中关于返回值的说明:

如果邮件被成功接收,则返回 TRUE,否则返回 FALSE。

请务必注意,仅仅因为邮件被接受投递,并不意味着邮件实际上会到达预定目的地。

Zend_Mail_Transport_Smtp 使用封装在Zend_Mail_Protocol_Smtp 中的 SMTP 协议发送电子邮件。在这种情况下,只要有违反 SMTP 协议(​​例如发送邮件而不提供发件人地址)或 STMP 服务器报告错误或连接超时,您都会收到 Zend_Mail_Protocol_Exception

因此,如果在与 STMP 服务器通信时没有抛出异常,您可以确定远程服务器至少接受了您的电子邮件。

【讨论】:

抱歉,我阅读了您关于通过 STMP 服务器发送电子邮件的观点 - 您可以在我的回答中跳过第 1 点。 使用 Zend_Mail_Transport_Smtp 时出现连接超时错误。可能是什么原因???【参考方案2】:

我猜不是。如果“发送”失败,则会出现异常。但这只是检查 send() 函数是否正常工作。这并不意味着邮件已发送。

我想确保邮件已送达的唯一方法是在邮件中插入确认代码链接并让用户点击它。

【讨论】:

我的意思是发送到 SMTP 服务器而不检查它是否已经送达。 我想 Zend_Transport_SendMail() 不会抛出异常就足够了;)

以上是关于使用 Zend_Mail 时如何验证邮件是不是已发送?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Zend_Mail、sendmail 和 localhost 发送电子邮件?

使用 Zend_Mail 获取邮件源

使用 Zend_mail 时,我的电子邮件似乎被视为垃圾邮件,通过 Outlook 发送而没有?

使用 Zend_Mail 通过 Exchange Server 发送 SMTP 电子邮件 - 如何诊断这些错误

如何使用 zend_mail 和 zend_mail_storage_imap 将电子邮件移动到不同的文件夹?

在 Zend Framework 2 中使用 Zend_Mail + Zend_Mime 创建 HTML 电子邮件