Я использую System.Net.Mail. В этой области есть несколько тем, но они ASP.NET и часто связаны с VB. Я изолирую код от кода скелета рабочего стола, я использую .NET 3.5 и C#. Таким образом, отправка работ во всех сценариях, что я пытался (EnableSsl false/true, UseDefaultCredentials false/true). Но SendAsync работает только в том случае, если UseDefaultCredentials не установлен в true (получается, что может даже иметь значение, если вы явно задали значение false, по умолчанию оно ложно), EnableSsl - true (OK, это тоже могут быть настройки сервера) и hardcode freakin мои полномочия. Я хочу иметь возможность SendAsync использовать UseDefaultCredentials. Код:Почему SmtpClient SendAsync выбрасывает исключения с комбинациями UseDefaultCredentials и EnableSsl, а Send отлично работает
void sendmail() {
MailMessage email = new MailMessage();
email.From = new MailAddress("[email protected]");
email.To.Add("[email protected]");
email.Subject = "Simple test email subject";
email.Body = "Simple test email body";
string mHost = "mail.software.com";
string mUsername = @"DOMAIN\tcs";
string mPassword = "myfreakinpassword?Really???";
SmtpClient smtpCli = new SmtpClient(mHost);
//smtpCli.UseDefaultCredentials = true;
smtpCli.Credentials = new NetworkCredential(mUsername, mPassword);
smtpCli.EnableSsl = true;
smtpCli.SendCompleted += smtpCli_SendCompleted;
try {
//smtpCli.Send(email);
smtpCli.SendAsync(email, null); // This mofo only works in this combination
}
catch (Exception ex) {
Console.WriteLine(ex);
}
}
void smtpCli_SendCompleted(object sender, AsyncCompletedEventArgs e) {
if (e.Error != null)
Console.WriteLine(e.Error);
}
Зачем? – Xharze
Исключение (во всех комбинациях): «System.Net.Mail.SmtpException: для SMTP-сервера требуется защищенное соединение или клиент не был аутентифицирован. Ответ сервера: 5.7.1 Клиент не был аутентифицирован в System.Net. Mail.SendMailAsyncResult.End (результат IAsyncResult) в System.Net.Mail.SmtpClient.SendMailCallback (результат IAsyncResult) ". Это также исключение, которое вы получаете, если просто ошибаетесь в пароле или что-то в этом роде. Но, как я уже сказал, все (значимые) сценарии работают с Send() и не работают с SendAsync(). –
Мое приложение запускается с правами моего пользователя. Может случиться так, что фоновый поток, выполняющий задачу отправки почты, запускается с другими привилегиями? Это настольное программное обеспечение. Даже UseDefaultCredentials = true не работает. В конце концов, я могу обернуть всю синхронную отправку в асинхронный слой, созданный мной, или подключить его к обмену сообщениями. Но тогда я буду кричать в подушку, SendAsync не имеет особого смысла. Я потратил столько часов на это сейчас, и это должно сработать. –