9

如标题中所述,我在找到一个声明它支持 TLS 加密标准的附加程序时遇到了一些问题。

我一直在尝试使用 SmtpAppender 但无法使其工作,并怀疑它与需要 TLS 加密的 smtp 服务器有关,而 SmtpAppender 可能不支持这一点。

从 Office365 手册设置

手册

使用的配置:

<appender name="SmtpAppender" type="log4net.Appender.SmtpAppender">
  <to value="my email" />
  <from value="The senders email" />
  <Username value="JohnDoe"></Username>
  <password value="NoWay" ></password>
  <authentication value="Basic"></authentication>
  <subject value="Test message" />
  <smtpHost value="pod51011.outlook.com" />
  <port value="587" />
  <bufferSize value="512" />
  <lossy value="true" />
  <EnableSsl value="true"/>
  <evaluator type="log4net.Core.LevelEvaluator">
      <threshold value="INFO"/>
  </evaluator>
  <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%newline%date [%thread] %-5level %logger [%property{NDC}] - %message%newline%newline%newline" />
  </layout>
</appender>
4

2 回答 2

6

在使用最新的 Log4Net 版本 1.2.11 进行一些额外的研究和实际测试后,答案是:是的。

这个问题在这里得到了一定的回答C# ASP.NET Send Email via TLS并查看 Log4Net 的问题跟踪允许 smtp 进行 ssl 身份验证和证书。据记载,Log4Net 有一个开关 EnableSsl,顾名思义,它启用 SSL 支持,它通过第一个链接属于 TLS。

于 2012-12-06T15:16:20.817 回答
2

对于那些还没有准备好升级到 1.2.11 的人来说,另一个选择是添加一个自定义 appender:

/// <summary>
/// This is a custom appender so that we can enable SSL properly (and support TLS)
/// </summary>
public class SmtpCustomAppender : SmtpAppender
{
  public bool EnableSsl { get; set; }

  public SmtpCustomAppender()
  {
      Authentication = SmtpAuthentication.None;
      Port = 25; //0x19;
      //Port = 587; // 0x24b;
      Priority = MailPriority.Normal;
      EnableSsl = false;
  }

  /// <summary>
  /// Send the email message - this overrides the email sender so that we can add enabling SSL
  /// </summary>
  /// <param name="messageBody">the body text to include in the mail</param>
  protected override void SendEmail(string messageBody)
  {
      SmtpClient client = new SmtpClient();
      if (!string.IsNullOrEmpty(SmtpHost))
      {
          client.Host = SmtpHost;
      }
      client.Port = Port;
      client.EnableSsl = EnableSsl;
      client.DeliveryMethod = SmtpDeliveryMethod.Network;
      switch (Authentication)
      {
          case SmtpAuthentication.Basic:
              client.Credentials = new NetworkCredential(Username, Password);
              break;
          case SmtpAuthentication.Ntlm:
              client.Credentials = CredentialCache.DefaultNetworkCredentials;
              break;
      }

      MailMessage message = new MailMessage
          {
              Body = messageBody,
              From = new MailAddress(From)
          };
      message.To.Add(To);
      message.Subject = Subject;
      message.Priority = Priority;
      client.Send(message);
  }
}

然后在您的配置文件中,您只需将以前的 SmtpAppender 设置为自定义附加程序的完全限定名称空间。

<appender name="ErrorSmtpAppender" 
          type="SomeProject.Infrastructure.Logging.Log4netAppenders.SmtpCustomAppender">

然后您可以添加<enablessl value="true" />到您的日志附加程序。

我创建了一个要点来向您展示这是什么样的。

于 2013-04-05T16:13:29.807 回答