Używam języka NLog do wysyłania dzienników jako wiadomości e-mail z niestandardowym celem poczty. Przesyłam moje Office 365 od skonfigurowane konto jako domyślne w moim web.config (z moim głównym projektu) w sposób następujący:Wyjątek przy użyciu domyślnych danych uwierzytelniających SMTP w Office 365 - Klient nie został uwierzytelniony, aby wysyłać anonimowe wiadomości podczas wysyłania wiadomości z adresu
<system.net>
<mailSettings>
<smtp deliveryMethod="Network" from="[email protected]">
<network defaultCredentials="false" host="smtp.office365.com" port="587" userName="[email protected]" password="mypassword" enableSsl="true" />
</smtp>
</mailSettings>
</system.net>
zastąpić metodę Write z moim docelowym dziennika (w moim pakietu wdrożeniowego nlog) jako następująco:
protected override void Write(LogEventInfo logEvent)
{
try
{
using (var mail = new MailMessage())
{
this.SetupMailMessage(mail, logEvent, this.Layout.Render(logEvent));
using (SmtpClient smtpClient = new SmtpClient())
{
smtpClient.UseDefaultCredentials = true;
smtpClient.Send(mail);
}
}
}
catch (Exception exception)
{
throw new NLogRuntimeException("An error occurred when sending a log mail message.", exception);
}
}
Gdy system próbuje wysłać mail z tego konta, następujące System.Net.Mail.SmtpException
jest wyrzucany:
serwer SMTP wymaga bezpiecznego połączenia lub klient nie został uwierzytelniony. Odpowiedź serwera: 5.7.57 SMTP; Klient nie został uwierzytelniony, aby wysyłać anonimowe wiadomości podczas wysyłania wiadomości e-mail z adresu
Mam czterokrotne sprawdzenie poświadczeń i są one poprawne. Czy ktoś wie, co jeszcze może być przyczyną tego wyjątku?
AKTUALIZACJA: Okazuje się, że właściwość CredentialCache.DefaultCredentials jest pełna pustych ciągów. Jednak po ręcznym wyodrębnieniu ustawień za pomocą poniższego kodu mogę uzyskać ustawienia z pliku web.config.
SmtpSection settings = (SmtpSection)ConfigurationManager.GetSection("system.net/mailSettings/smtp");
smtpClient.Credentials = new NetworkCredential(settings.Network.UserName, settings.Network.Password);
smtpClient.Host = settings.Network.Host;
smtpClient.Port = settings.Network.Port;
smtpClient.EnableSsl = settings.Network.EnableSsl;
var creds = CredentialCache.DefaultCredentials; // Is empty
Mogę użyć tego jako obejścia. Ale co daje? Dlaczego domyślne dane logowania są puste?
SetupMailMessage ustawia adres? –
Nie, chcę, aby używał domyślnego adresu From skonfigurowanego w pliku web.config. Chociaż próbowałem również ręcznie dodać adres From (z 'mailMessage.From = new MailAddress (" [email protected] ");') aby sprawdzić, czy to był problem, i ten sam wyjątek został zgłoszony. – Ivan
Mam ten sam problem przy użyciu ELMAH po przejściu do Office 365. Ustawię defaultCredentials = false w XML, ale wydaje się, że nie ma to wpływu na konfigurację XML. – Cody