我们的客户有时无法收到我们发送的电子邮件.这是一个巨大的损失.我如何确保他们收到电子邮件,以便如果在另一端没有收到,该程序可以重新发送或做一些事情.
以上建议均不会100%有效.许多电子邮件客户端(正确地说)会拒绝加载外来图像,否定"网络错误"的用处.他们也将拒绝(或无法)返回Outlook风格的"收据".许多邮件服务器故意(遏制垃圾邮件)或错误(由于配置错误)都不会返回退回邮件.或者可能是一个过于激进的垃圾邮件过滤器吃了你的邮件,所以它到了,但最终用户从未见过.此外,还有一些小问题需要花费数小时或数天的时间才能到达最终用户或反弹,以及如何将这些延迟通知或退回与4天前发送的邮件相关联?
所以基本上,无论你做什么,你都能抓到一些但不是全部.我要说任何依赖于能够确定最终用户是否收到邮件的设计都存在致命缺陷.
您可以做的一件事是设置一个回弹地址,接收任何无法送达的邮件.使用回送地址作为发件人地址 - 您可能需要另一个回复地址,以便回复得到正确的定向.
每天检查一次退回邮箱,并与客户联系,以获取失败的邮箱地址.如果故障只是间歇性的,您可以在诉诸手动联系之前自动重试失败的地址.
这将需要您的应用程序之外的一些代码扫描邮箱并保留有关联系人数量等的状态信息,并尝试重新发送.
根据您生成邮件的方式,您可以更轻松地完成此过程:为您发送的每封电子邮件生成唯一的退回地址.例如,您可以使用bounces +1234@example.com.
许多SMTP服务器允许您使用+之后的部分作为外部脚本的参数等.
问题是许多(损坏的)SMTP服务器没有返回足够的信息以反弹以识别原始邮件 - 有时,当涉及转发时,您甚至没有收回原始收件人...
通过上述技巧,您可以可靠地将传出消息与传入的反弹相关联.