【问题标题】:How can I detect if an email didn't reach a recipient? (Gmail SMTP, delivery failures)如何检测电子邮件是否未送达收件人? (Gmail SMTP,传送失败)
【发布时间】:2021-10-11 13:06:06
【问题描述】:
我构建了一个 Laravel 网络应用程序,它使用 Gmail 的 SMTP 向客户发送电子邮件。在引擎盖下,我相信驱动程序使用 SwiftMailer。设置正常,发送的电子邮件正在送达客户。
但是,正如您在下面的屏幕截图中看到的那样,如果客户在提供他们的电子邮件时出现拼写错误,我的应用程序会将电子邮件排队,认为一切正常,并且不会知道电子邮件实际上没有送达(在此情况下,导致收件人不存在)。
如何处理投递失败(不仅仅是“电子邮件不存在”)?
【问题讨论】:
标签:
laravel
email
smtp
gmail
swiftmailer
【解决方案1】:
Swiftmailer 将电子邮件转发到 SMTP 服务器。在您的情况下,SMTP 服务器是 Gmail。
Gmail 接受您的邮件消息,存储电子邮件,并在稍后尝试将电子邮件发送到收件人的邮件服务器。
Swiftmailer 仅报告将电子邮件传输到 SMTP 服务器的问题。传输完成后,Swiftmailer 将不知道电子邮件的最终结果是什么。
如果您向错误的收件人电子邮件地址发送电子邮件(域部分正确):
- 收件人的电子邮件服务器拒绝该电子邮件并出现错误。
- 收件人的电子邮件服务器接受电子邮件,然后回复退回邮件。
- 收件人的电子邮件服务器接受电子邮件并将其丢弃。原因是为了防止滥用者检测到服务器上的有效电子邮件帐户。
如果域部分不正确且不存在,则 Gmail 将无法连接到收件人的电子邮件服务器。 Gmail 通常会在以后继续尝试发送邮件。
注意:即使收件人的电子邮件地址正确,也有很多原因导致电子邮件无法送达。一些原因是垃圾邮件、磁盘空间不足、资源耗尽、SPF/DMARC/DKIM 等。
如何处理投递失败(不仅仅是“电子邮件不存在”)?
如果您通过 Gmail 管理自己的电子邮件,则必须手动管理电子邮件退回和递送失败。 Gmail 不提供这方面的功能。
如果您要管理邮件列表,请选择为您管理整个流程的提供商。