Я пытаюсь отправить электронное письмо с SmtpClient.SendMailAsync, и он не работает, хотя работает синхронная версия (SmtpClient.Send).UserManager.SendEmailAsync не отправляет
Мой синхронный код:
MailMessage msg = new MailMessage();
msg.To.Add(new MailAddress("[email protected]", "SomeOne"));
msg.From = new MailAddress("[email protected]", "You2");
msg.Subject = "This is a Test Mail";
msg.Body = "This is a test message";
msg.IsBodyHtml = true;
SmtpClient client = new SmtpClient();
client.UseDefaultCredentials = true;
client.Port = 25;
client.Host = "mail.group.com";
client.DeliveryMethod = SmtpDeliveryMethod.Network;
client.EnableSsl = true;
client.Send(msg);
Мой асинхронный код электронной почты (я просто модифицировали EmailService: класс IIdentityMessageService):
public Task SendAsync(IdentityMessage message)
{
const string sentFrom = "[email protected]";
// Configure the client:
var client = new SmtpClient("mail.group.com")
{
Port = 25,
DeliveryMethod = SmtpDeliveryMethod.Network,
UseDefaultCredentials = true,
EnableSsl = true
};
// Create the message:
var mail = new MailMessage(sentFrom, message.Destination, message.Subject, message.Body);
// Send:
return client.SendMailAsync(mail);
}
Edit: код вызова генерируется Visual Studio, вот это это:
public async Task<ActionResult> Register(RegisterViewModel model)
{
if (ModelState.IsValid)
{
var user = new ApplicationUser { UserName = model.Email, Email = model.Email };
var result = await UserManager.CreateAsync(user, model.Password);
if (result.Succeeded)
{
await SignInManager.SignInAsync(user, isPersistent:false, rememberBrowser:false);
// Send an email with this link
string code = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id);
var callbackUrl = Url.Action("ConfirmEmail", "Account", new { userId = user.Id, code = code }, protocol: Request.Url.Scheme);
await UserManager.SendEmailAsync(user.Id, "Confirmer votre compte", "S'il vous plaît, cliquez le lien suivant : <a href=\"" + callbackUrl + "\">Activation</a>");
return RedirectToAction("Index", "Home");
}
AddErrors(result);
}
// If we got this far, something failed, redisplay form
return View(model);
}
Почему бы не пожариться и не забыть? просто измените метод на 'async void' и вызовите wait в' client.SendMailAsync (mail) ' – Lucas
Потому что это уже похоже на код, сгенерированный MVC. Хорошее имя :-) – MusicAndCode
Это, скорее всего, комбинация http://stackoverflow.com/questions/22797845/asp-net-identity-2-0-how-to-implement-iidentitymessageservice-to-do-async-smtp и http://stackoverflow.com/questions/15021304/an-async-await-example-that-causes-a-deadlock –