Не отправляется письмо SmtpClient (await/async/wait())
Друзья привет, есть 2 метода. Верхний отвечает за отправку сообщения, второй за формирование сообщения. В данном виде они не работают, при этом в логи не падает ошибка, а падает сообщение, что письмо ушло, на сервер смтп при этом ничего не приходило.
Нашел как заставить это работать. Надо либо в первом методе await client.SendMailAsync(message); заменить на client.SendMailAsync(message).Wait(); либо во втором методе заменить await SendMailAsync(message, login, password); на SendMailAsync(message, login, password).Wait();
public static async Task SendMailAsync(MailMessage message, string login = null, string password = null, int timeout = 10000)
{
using (var client = new SmtpClient())
{
if (login != null && password != null)
client.Credentials = new NetworkCredential(login, password);
client.Timeout = timeout;
await client.SendMailAsync(message);
}
}
Метод второй
public static async void SendMail(string from, string to, string subject, string body = "", string login = null, string password = null, bool isHtml = true)
{
if (!Parameters.MainSettings.ServiceEmail)
return;
try
{
var message = new MailMessage(from, to, subject, body) { IsBodyHtml = isHtml };
await SendMailAsync(message, login, password);
}
catch (Exception e)
{
Logger.Error(e.Message);
}
}
Т.Е вроде проблема решена, но мне хотелось бы узнать почему так происходит, вроде должны в этом коде работать одинаково await и Wait(); Вроде прочитал разницу между асинхронными операциями и тасками, но решение моего вопроса мне это не подсказало.
Ответы (1 шт):
Разобрался. Сразу после отправки консольное приложение закрывалось. Т.К мы не ждали что все письма уйдут, приложение закрывалось до того, как уходили все письма. Добавил после отправки каждого сообщения Thread.Sleep() и все сообщения доставляются. Всем спасибо