Someone on my team asked me how they could use a dynamic subject with 
SmtpAppender. Here's an example that uses a PatternLayout against the last 
LoggingEvent for the subhject:

    /// <summary>
    /// Formats the email subject using the supplied PatternLayout against the 
last email in the buffer.
    /// </summary>
    public class LastEventSubjectSmtpAppender : SmtpAppender
    {
        private LoggingEvent _lastEvent;

        public PatternLayout LastEventSubject { get; set; }

        protected override void SendBuffer(LoggingEvent[] events)
        {
            _lastEvent = events[events.Length - 1];
            base.SendBuffer(events);
            _lastEvent = null;
        }

        protected override void SendEmail(string messageBody)
        {
            using (var sw = new StringWriter())
            {
                LastEventSubject.Format(sw, _lastEvent);
                Subject = sw.ToString();
            }
           
            base.SendEmail(messageBody);
        }
    }

Reply via email to