private string GetSmtpSettingsKey(LogEventInfo logEvent) { var sb = new StringBuilder(); sb.Append(From.Render(logEvent)); sb.Append("|"); sb.Append(To.Render(logEvent)); sb.Append("|"); if (CC != null) { sb.Append(CC.Render(logEvent)); } sb.Append("|"); if (Bcc != null) { sb.Append(Bcc.Render(logEvent)); } sb.Append("|"); sb.Append(SmtpServer.Render(logEvent)); if (SmtpPassword != null) { sb.Append(SmtpPassword.Render(logEvent)); } sb.Append("|"); if (SmtpUserName != null) { sb.Append(SmtpUserName.Render(logEvent)); } return(sb.ToString()); }
private void ProcessSingleMailMessage(List <AsyncLogEventInfo> events) { try { var firstEvent = events[0].LogEvent; var lastEvent = events[events.Count - 1].LogEvent; // unbuffered case, create a local buffer, append header, body and footer var bodyBuffer = new StringBuilder(); if (Header != null) { bodyBuffer.Append(Header.Render(firstEvent)); if (AddNewLines) { bodyBuffer.Append("\n"); } } foreach (var eventInfo in events) { bodyBuffer.Append(Layout.Render(eventInfo.LogEvent)); if (AddNewLines) { bodyBuffer.Append("\n"); } } if (Footer != null) { bodyBuffer.Append(Footer.Render(lastEvent)); if (AddNewLines) { bodyBuffer.Append("\n"); } } using (var msg = new MailMessage()) { SetupMailMessage(msg, lastEvent); msg.Body = bodyBuffer.ToString(); using (var client = CreateSmtpClient()) { client.Host = SmtpServer.Render(lastEvent); client.Port = SmtpPort; client.EnableSsl = EnableSsl; InternalLogger.Debug("Sending mail to {0} using {1}:{2} (ssl={3})", msg.To, client.Host, client.Port, client.EnableSsl); InternalLogger.Trace(" Subject: '{0}'", msg.Subject); InternalLogger.Trace(" From: '{0}'", msg.From.ToString()); if (SmtpAuthentication == SmtpAuthenticationMode.Ntlm) { InternalLogger.Trace(" Using NTLM authentication."); client.Credentials = CredentialCache.DefaultNetworkCredentials; } else if (SmtpAuthentication == SmtpAuthenticationMode.Basic) { var username = SmtpUserName.Render(lastEvent); var password = SmtpPassword.Render(lastEvent); InternalLogger.Trace(" Using basic authentication: Username='******' Password='******'", username, new string('*', password.Length)); client.Credentials = new NetworkCredential(username, password); } client.Send(msg); foreach (var ev in events) { ev.Continuation(null); } } } } catch (Exception exception) { if (exception.MustBeRethrown()) { throw; } foreach (var ev in events) { ev.Continuation(exception); } } }