protected override void SendBuffer()

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