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);
}
}