删除未发送电子邮件的电子邮件地址

时间:2016-01-27 13:38:34

标签: email coldfusion coldfusion-11

我个人看不到这样做的方法,但我希望有一个聪明的黑客可以让它发挥作用。

我们必须定期向客户发送电子邮件,许多电子邮件过期并向我们发送邮件传递失败。为了保持数据库准确和干净,我想在电子邮件无法发送给他们时从数据库中删除他们的记录。

所以目前它有点像这样:

<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>

我可以在捕获区域内运行查询,以便在记录中出现错误时删除记录(例如,格式错误的电子邮件地址)。但是当邮件无法送达时没有任何反应。我收到了收件箱的失败通知,但这些通知可能是数百个,因此很难手动浏览并从数据库中删除。

无论如何“抓住”未能发送的电子邮件,然后将它们反馈给查询以从数据库中删除?

2 个答案:

答案 0 :(得分:5)

有人曾在我参加的一个函数上做过这方面的演讲。方法是:

  • 发送邮件时,请在failto属性中使用特殊的电子邮件地址。
  • 编写一个.cfm文件,该文件使用cfpop标记来读取发送到该地址的邮件。 (这可能是在cfexchange标签可用之前)
  • 添加读取传递失败通知的代码并提取电子邮件地址。
  • 对这些地址采取行动

演示者将此文件作为预定作业运行。

答案 1 :(得分:2)

@Dan Bracuk上面的回答是你最接近的答案。原因如下:CF服务器本身并不提供邮件。它只是将邮件发送到真实的邮件服务器(即使该服务器在同一台机器上运行)以进行传送。在接受之后,CF的工作就完成了。在此阶段未送达不会反映地址的质量,而是反映您的CF服务器和邮件服务器之间的连接。

从那里,它被邮件服务器再次假脱机。有时,收件人的域将接受电子邮件并稍后提出问题。了解电子邮件传递是否失败的唯一方法是等待将未送达报告(电子邮件)发送到failto(如果使用)或从地址发送。这可以来自&#34;你的&#34;邮件服务器或收件人域的邮件服务器。根据您的邮件服务器传递重试选项和第三方延迟,这可能需要一天或更长时间。如果您想自己这样做,您必须编写POP例程并从帐户中读取电子邮件,并分析它们以确定它们是否为NDR,以及类型。未送达报告可以指示硬跳或软跳,块,延迟或网关条件。显然,其中很多都不是&#34;扔掉它&#34;因此,您必须解析SMTP代码http://www.serversmtp.com/en/smtp-error和关键字,以确定是否应删除或标记电子邮件地址。