如何确认ActionMailerNext是否成功发送邮件?
判断ActionMailerNext邮件发送状态的实用方案
我最近在用ActionMailerNext(那个已经停止维护的ActionMailer.net分支)时,碰到了个头疼的问题——没法确定邮件到底是发送成功了,还是因为报错失败了。翻遍相关站点、谷歌搜了俩小时都没找到靠谱的解决方案。就像我们在数据库操作里,可以通过await _db.SaveChangesAsync()的返回值判断更新是否生效一样,我也想在ActionMailerNext里实现类似的判断逻辑,但一开始完全摸不着头绪。
调用.Deliver()方法后,它会返回System.Collections.Generic.IList<ActionMailerNext.Interfaces.IMailResponse>,可我根本不知道怎么解析这个返回值,甚至专门搜IMailResponse都没找到有用的信息。
最终解决办法
后来我弄明白了,这个返回集合里的每个IMailResponse对象其实包含两个核心属性:
Email:字符串类型,对应收件人的邮箱地址DeliveryStatus:枚举类型,包含四种状态:DELIVERED、INVALID、QUEUED、REJECTED
因为我的需求只是发送单封邮件,所以用下面的代码实现了判断逻辑:
if(e.All(x => x.DeliveryStatus == DeliveryStatus.DELIVERED)) { // 所有邮件发送成功时执行的业务逻辑 } else { // 存在发送失败的邮件时,执行回退操作 }
关键注意事项
这里要特别说明:这个判断只能确认邮件是否成功送达出站SMTP服务器,没办法追踪邮件后续是否到达收件人邮箱、是否被标记为垃圾邮件等状态。
感谢@ADyson的提示,帮我顺利解决了这个问题。
内容的提问来源于stack exchange,提问作者René Kåbis
相关产品推荐
相关产品推荐

