【问题标题】:How do I know if the SmtpClient actually sent the email?我如何知道 SmtpClient 是否真的发送了电子邮件?
【发布时间】:2016-06-24 07:08:18
【问题描述】:

我正在使用 .NET 4.5 并尝试使用 SmtpClient() SendMailAsync 方法。当然有很多例子,但很多只是他人代码的转贴。

基本上我正在尝试将电子邮件服务用于 Identity 2.x,因此该方法具有此签名

public async Task SendAsync(IdentityMessage message) { ... }

最终会有类似下一条语句来异步发送邮件:

smtp.SendMailAsync(msg);

问题是,我的配置文件中有多个电子邮件服务器,我的想法是,如果其中一个失败,系统应该尝试下一个,直到它能够发送邮件(我知道不能保证邮件有到达任何地方)。像这样的:

foreach (var oneSmtpServerInfo in FallbackSmtpServers)
{
     :
     smtp.SendMailAsync(msg);          // <--- successful? [A]
     :
}

但正如你猜想的那样,如果“A”语句成功处理邮件消息,我不想继续使用列表中的其他服务器。

【问题讨论】:

  • 如果执行引发异常,您唯一可以检查的内容。在添加 await 语句的位置会抛出异常。

标签: asynchronous smtp async-await smtpclient asp.net-identity-2


【解决方案1】:

只需await 这样的异步任务:

foreach (var oneSmtpServerInfo in FallbackSmtpServers)
{
     :
     await smtp.SendMailAsync(msg);
     :
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-19
    • 2013-06-03
    • 2015-02-26
    • 1970-01-01
    • 1970-01-01
    • 2017-03-26
    • 1970-01-01
    相关资源
    最近更新 更多