Я использую NLog для отправки журналов в виде электронной почты с настраиваемой почтовой целью. Я посылаю из моих Office365 настройки учетной записи по умолчанию в моем web.config(моего основного проекта) следующим образом:
<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>
Я переопределяю метод Write с моей целью для журнала (в моем пакете реализации NLog) следующим образом:
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);
}
}
Когда система пытается отправить почту из этой учетной записи, вызывается следующее System.Net.Mail.SmtpException
:
Для SMTP-сервера требуется безопасное соединение, или клиент не прошел аутентификацию. Ответ сервера: 5.7.57 SMTP; Клиент не был аутентифицирован для отправки анонимной почты во время MAIL FROM
У меня четырежды проверены учетные данные, и они верны. Кто-нибудь знает, что еще может вызвать это исключение?
UPDATE: Оказывается, свойство CredentialCache.DefaultCredentials полна пустых строк. Тем не менее, когда я извлекаю настройки вручную, используя приведенный ниже код, я могу получить настройки из 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
Я могу использовать это как обходной путь. Но что дает? Почему учетные данные по умолчанию будут пустыми?