Я реализовал простой EmailService для Asp.Net Identity 2.0 (через интерфейс IIdentityMessageService
.
public class EmailService : IIdentityMessageService
{
public Task SendAsync(IdentityMessage message)
{
// convert IdentityMessage to a MailMessage
var email =
new MailMessage(new MailAddress("[email protected]", "(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?