我个人看不出有什么方法可以做到这一点,但我希望可以有一个聪明的 hack 来让它工作。
我们必须定期向客户发送电子邮件,许多客户的电子邮件都过期了,导致我们无法发送邮件。为了保持数据库的准确和干净,当电子邮件发送失败时,我想从数据库中删除他们的记录。
所以目前它有点像这样:
<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>
当记录中存在错误(例如格式错误的电子邮件地址)时,我可以在捕获区域内运行查询以删除记录。但是当邮件无法投递时什么也不会发生。我的收件箱收到一条失败通知,但这些通知可能有数百条,因此很难手动检查并从数据库中删除。
有没有办法“捕获”发送失败的电子邮件,然后将它们反馈给查询以从数据库中删除?
最佳答案
有人曾经在我参加的一个事件中就此做过介绍。方法是:
- 发送邮件时,在 failto 属性中使用特殊的电子邮件地址。
- 编写一个使用 cfpop 标签的 .cfm 文件来读取发送到该地址的邮件。 (这可能是在 cfexchange 标签可用之前)
- 添加读取传递失败通知并提取电子邮件地址的代码。
- 对这些地址做点什么
演示者将此文件作为计划作业运行。
关于email - 删除未发送电子邮件的电子邮件地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35038905/