c# - Asp.Net Identity 2.0 - 如何实现 IIdentityMessageService 以使用 SmtpClient 执行异步 SMTP?

标签 c# asp.net-identity smtpclient

我已经为 Asp.Net Identity 2.0 实现了一个简单的 EmailService(通过 IIdentityMessageService 接口(interface)。

    public class EmailService : IIdentityMessageService
{
    public Task SendAsync(IdentityMessage message)
    {
        // convert IdentityMessage to a MailMessage
        var email = 
           new MailMessage(new MailAddress("noreply@mydomain.com", "(do not reply)"), 
           new MailAddress(message.Destination))
        {
            Subject = message.Subject,
            Body = message.Body,
            IsBodyHtml = true
        };

        using (var client = new SmtpClient()) // SmtpClient configuration comes from config file
        {
            return client.SendMailAsync(email);
        }
    }
}

要发送电子邮件,我会通过 UserManager:

await _userManager.SendEmailAsync(user.Id, "Confirm your account","Please confirm your account by clicking this link: <a href=\"" + callbackUrl + "\">link</a>");

问题是我得到一个 System.Threading.Tasks.TaskCanceledException当我调用 SendEmailAsync()目前还不清楚为什么。

如果我同步发送电子邮件 ( client.Send(email) ),一切正常。

所以我的问题是:

  • 如何防止抛出 TaskCanceledException? 并且(假设我可以克服这个错误),

  • 在将电子邮件发送回客户端期间,我应该如何传达错误(即,来自 SmtpClient 的“此处没有这样的用户”类型的响应?

最佳答案

您的问题是 SmtpClient 在发送电子邮件之前被处理掉。

两种方式:

  • 等待 SendMailAsync 结果

    using (var client = new SmtpClient())
    {
        await client.SendMailAsync(email);
    }
    
  • 注册SendCompleted事件,仅在消息发送后处理SmtpClient

    var client = new SmtpClient();
    client.SendCompleted += (s, e) => {
        client.Dispose();
    };
    return client.SendMailAsync(message);
    

关于c# - Asp.Net Identity 2.0 - 如何实现 IIdentityMessageService 以使用 SmtpClient 执行异步 SMTP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22797845/

相关文章:

c# - ASP.NET MVC : Controller or ControllerBase? 中 Controller 的内置基类

c# - 在 VS 2017 中插入 Intellisense 的简化 Using 语句

asp.net - MVC5 ApplicationUser 自定义属性

登录时 ASP.net Identity 2.0 未创建有效身份验证

c# - 使用 C# 发送电子邮件 - 不起作用,但没有抛出错误

c# - 如何在 .NET 3.5 中配置 SmtpClient?

c# - 根据分辨率,在 Unity 游戏中拖动速度不相等

c# - Web 服务中的数据库访问

authentication - AspNet Core身份-未在生产环境中设置Cookie

C# SMTP 无法在 Outlook.com、端口 587 上进行身份验证。 "The server response was: 5.7.1 Client was not authenticated"