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 поможет в этом).

Вы пробовали следующее?

Log.CloseAndFlush();
Другие вопросы по тегам