【问题标题】:ActionMailer.net/ActionMailerNext - how to confirm if an eMail has even been sent?ActionMailer.net/ActionMailerNext - 如何确认电子邮件是否已发送?
【发布时间】:2018-05-15 04:46:34
【问题描述】:

使用ActionMailerNext,它是现已死去的 ActionMailer.net 的一个分支,我终其一生都无法弄清楚如何确定电子邮件是否已发送,或者如果发生错误导致无法发送电子邮件。

这两个网站都没有提供有关如何执行此操作的任何想法。两个小时的谷歌搜索也同样有效(不是!)。

通常,通过数据库更新之类的操作,我可以做一个

if((await _db.SaveChangesAsync()) > 0){ ... }

并且能够在 yes-it-updated 和 no-it-failed 部分之间分叉代码。我需要能够使用 ActionMailerNext 执行此操作,但我不知道如何。

实际的.Deliver() 返回一个

System.Collections.Generic.IList<ActionMailerNext.Interfaces.IMailResponse>

但我不知道如何打开它,因为我不知道里面是什么。任何尝试用谷歌搜索IMailResponse 都不会给我带来任何有用的信息。


编辑:

对于那些想知道的人,返回的集合包含两个变量:一个字符串 Email 和一个名为 DeliveryStatus 的枚举,它为每个发送的电子邮件提供四种响应之一:已发送、无效、排队和拒绝。通过执行以下操作,即使只发送了一封电子邮件(因为我的需求很简单):

if(e.All(x => x.DeliveryStatus == DeliveryStatus.DELIVERED)) {
  // Do if ALL eMails were sent
} else {
  // Fallback if ANY eMail was not sent
}

我能够确保在一封或多封电子邮件未能发送时存在备用方案。

但请记住:这仅适用于发送到外发 SMTP 服务器的电子邮件;系统不知道除此之外会发生什么。

感谢下面的@ADyson 让我睡眠不足的大脑正常运作所需的戳。

【问题讨论】:

  • 智能感知对您没有帮助吗?或者您应该能够在 Visual Studio 中右键单击 IMailResponse 并单击 Go To Definition,这至少应该为您提供一个属性列表。
  • 天色已晚,累得筋疲力尽,追着自己的尾巴。不是很好的组合。我将.Deliver() 分配给一个变量,但只做一个通用的var up。当我将var 替换为List&lt;IMailResponse&gt; 时,我能够深入挖掘并打开该项目以找到我需要的东西。感谢您朝正确的方向戳。

标签: asp.net asp.net-mvc asp.net-mvc-5 actionmailer actionmailer.net


【解决方案1】:

对于那些想知道的人,返回的集合包含两个变量:一个字符串Email 和一个名为 DeliveryStatus 的枚举,它为每个发送的电子邮件提供四种响应之一:已发送、无效、排队和拒绝。通过执行以下操作,即使只发送了一封电子邮件(因为我的需求很简单):

if(e.All(x => x.DeliveryStatus == DeliveryStatus.DELIVERED)) {
  // Do if ALL eMails were sent
} else {
  // Fallback if ANY eMail was not sent
}

我能够确保在一封或多封电子邮件未能发送时存在备用方案。

但请记住:这仅适用于发送到外发 SMTP 服务器的电子邮件;系统不知道除此之外会发生什么。

感谢@ADyson 让我睡眠不足的大脑正常运作所需的戳。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-29
    • 1970-01-01
    • 1970-01-01
    • 2011-10-29
    • 2016-01-23
    • 1970-01-01
    • 2018-09-13
    相关资源
    最近更新 更多