Serilog Email Sink для отправки электронной почты через Office 365
Я пытаюсь использовать приемник электронной почты Serilog как часть простого консольного приложения. Это приложение имеет очень короткий срок службы: оно проверяет БД и обновляет подписчиков новыми данными. Я хочу отправить электронное письмо, если произойдет ошибка.
Проблема в том, что если я не добавлю Thread.Sleep в конец приложения, электронные письма не отправляются.
Есть ли способ очистить очередь электронной почты и принудительно отправить ее как можно скорее?
Мой код:
Log.Logger = new LoggerConfiguration()
.WriteTo.ColoredConsole()
.WriteTo.EventLog("LOGSOURCE", restrictedToMinimumLevel: LogEventLevel.Warning)
.WriteTo.Email(connectionInfo: new EmailConnectionInfo()
{
EmailSubject = "App error",
ToEmail = "support@company.com",
MailServer = "smtp.office365.com",
NetworkCredentials = new NetworkCredential("sender@company.com", "Password"),
Port = 587,
FromEmail = "sender@company.com",
EnableSsl = false
},
batchPostingLimit: 1,
restrictedToMinimumLevel: LogEventLevel.Error)
.CreateLogger();
Log.Error("Error message");
Любая помощь приветствуется
3 ответа
Вы можете попробовать отладить Serilog с Serilog.Debugging.SelfLog.Out = Console.Out
Я думаю, что вы должны использовать EnableSsl = true с o365 и оставить batchPostingLimit по умолчанию = 100
В зависимости от приемника (я не уверен насчет электронной почты) возможно, что утилизация логгера будет иметь правильный эффект:
((IDisposable)Log.Logger).Dispose();
В противном случае может потребоваться дополнительная работа в приемнике электронной почты, чтобы гарантировать, что все сбрасывается должным образом (поднятие билета на трекере Serilog поможет в этом).