簡體   English   中英

Asp.Net Identity 2.0 - 如何使用SmtpClient實現IIdentityMessageService來執行異步SMTP?

[英]Asp.Net Identity 2.0 - How to Implement IIdentityMessageService to do Async SMTP using SmtpClient?

我實現了Asp.Net 2.0身份簡單EmailService(通過IIdentityMessageService接口。

    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>");

問題是,當我調用SendEmailAsync()時,我得到一個System.Threading.Tasks.TaskCanceledException ,並且不清楚為什么。

如果我同步發送電子郵件( 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); 

您必須在方法上放置異步。

    public async Task SendAsync(IdentityMessage message)
    {
        using (SmtpClient client = new SmtpClient())
        {
                using (var mailMessage = new MailMessage("your@email.com", message.Destination, message.Subject, message.Body))
                {
                    await client.SendMailAsync(mailMessage);
                }
            }
        }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM