Ich verwende NLog, um Protokolle als E-Mail mit einem benutzerdefinierten Mailziel zu senden. Ich sende von meiner Office365 als Standard in meinem web.config-Konto einrichten (meiner Hauptprojekt) wie folgt:Ausnahme bei Verwendung von SMTP-Standardanmeldeinformationen für Office365 - Client wurde nicht authentifiziert, um anonyme E-Mails während MAIL-Nachrichten zu senden VON
<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>
ich die Write-Methode mit meinem Log-Ziel überschreiben (in meinem NLog Umsetzungspaket) als folgt:
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);
}
}
Wenn das System versucht, eine E-Mail von diesem Konto, die folgenden System.Net.Mail.SmtpException
geworfen zu senden:
der SMTP-Server erfordert eine sichere Verbindung oder der Client wurde nicht authentifiziert. Die Serverantwort war: 5.7.57 SMTP; Der Client wurde nicht authentifiziert, um anonyme E-Mails während des Sendens zu senden. VON
Ich habe die Anmeldeinformationen vierfach überprüft und sie sind korrekt. Weiß jemand, was sonst diese Ausnahme verursachen könnte?
UPDATE: Es stellt sich heraus, die CredentialCache.DefaultCredentials-Eigenschaft ist voll von leeren Zeichenfolgen. Wenn ich die Einstellungen manuell mit dem folgenden Code extrahiere, kann ich die Einstellungen von der web.config abrufen.
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
Ich kann dies als Workaround verwenden. Aber was gibt? Warum sollten die Standardanmeldeinformationen leer sein?
SetupMailMessage legt eine Adresse fest? –
Nein, ich möchte, dass die in der web.config eingerichtete Standardadresse verwendet wird. Obwohl ich auch versuchte, eine Absenderadresse manuell hinzuzufügen (mit 'mailMessage.From = new MailAddress (" [email protected] ");'), um zu sehen, ob das das Problem war, und die gleiche Ausnahme wurde geworfen. – Ivan
Ich habe das gleiche Problem mit ELMAH nach dem Wechsel zu Office 365. Ich legte die DefaultCredentials = False in der XML, aber es scheint, dies hat keine Auswirkungen bei der Verwendung der XML-Konfiguration. – Cody