in src/log4net/Appender/SmtpPickupDirAppender.cs [121:171]
protected override void SendBuffer(LoggingEvent[] events)
{
events.EnsureNotNull();
// Note: this code already owns the monitor for this
// appender. This frees us from needing to synchronize again.
try
{
StreamWriter writer;
// Impersonate to open the file
string filePath = Path.Combine(PickupDir.EnsureNotNull(), Guid.NewGuid().ToString("N") + _fileExtension);
using (SecurityContext?.Impersonate(this))
{
writer = File.CreateText(filePath);
}
using (writer)
{
writer.WriteLine("To: " + To);
writer.WriteLine("From: " + From);
writer.WriteLine("Subject: " + Subject);
writer.WriteLine("Date: " + DateTime.UtcNow.ToString("r"));
writer.WriteLine();
string? t = Layout?.Header;
if (t is not null)
{
writer.Write(t);
}
for (int i = 0; i < events.Length; i++)
{
// Render the event and append the text to the buffer
RenderLoggingEvent(writer, events[i]);
}
t = Layout?.Footer;
if (t is not null)
{
writer.Write(t);
}
writer.WriteLine();
writer.WriteLine(".");
}
}
catch (Exception e) when (!e.IsFatal())
{
ErrorHandler.Error("Error occurred while sending e-mail notification.", e);
}
}