我个人看不到这样做的方法,但我希望有一个聪明的黑客可以让它发挥作用。
我们必须定期向客户发送电子邮件,许多电子邮件过期并向我们发送邮件传递失败。为了保持数据库准确和干净,我想在电子邮件无法发送给他们时从数据库中删除他们的记录。
所以目前它有点像这样:
<cfloop query="rsCustomers">
<cftry>
<cfmail to="rsCustomers.Email" from="us@ourcompany.com" failto="fails@ourcompany.com" subject="Whatever">
[email text here]
</cfmail>
<cfcatch type="any">
<!--- just to skip this record when it fails to send --->
</cfcatch>
</cftry>
</cfloop>
我可以在捕获区域内运行查询,以便在记录中出现错误时删除记录(例如,格式错误的电子邮件地址)。但是当邮件无法送达时没有任何反应。我收到了收件箱的失败通知,但这些通知可能是数百个,因此很难手动浏览并从数据库中删除。
无论如何“抓住”未能发送的电子邮件,然后将它们反馈给查询以从数据库中删除?
答案 0 :(得分:5)
有人曾在我参加的一个函数上做过这方面的演讲。方法是:
演示者将此文件作为预定作业运行。
答案 1 :(得分:2)
从那里,它被邮件服务器再次假脱机。有时,收件人的域将接受电子邮件并稍后提出问题。了解电子邮件传递是否失败的唯一方法是等待将未送达报告(电子邮件)发送到failto(如果使用)或从地址发送。这可以来自&#34;你的&#34;邮件服务器或收件人域的邮件服务器。根据您的邮件服务器传递重试选项和第三方延迟,这可能需要一天或更长时间。如果您想自己这样做,您必须编写POP例程并从帐户中读取电子邮件,并分析它们以确定它们是否为NDR,以及类型。未送达报告可以指示硬跳或软跳,块,延迟或网关条件。显然,其中很多都不是&#34;扔掉它&#34;因此,您必须解析SMTP代码http://www.serversmtp.com/en/smtp-error和关键字,以确定是否应删除或标记电子邮件地址。