Beispiel #1
0
        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());
        }
Beispiel #2
0
        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);
                }
            }
        }