发生错误时发送邮件

Sending mail when error occurrs

我使用 log4net 记录错误。记录到文件有效,现在我还希望通过邮件发送错误。但我无法让它工作。这是我的配置文件:

<appender name="SmtpAppender" type="log4net.Appender.SmtpAppender">
  <to value="test@gmail.com" />
  <from value="test@gmail.com" />
  <subject value="Test - Error" />
  <smtpHost value="smtp.gmail.com" />
  <authentication value="Basic" />
  <port value="587" />
  <username value="MyUsername" />
  <password value="MyPassword" />
  <bufferSize value="1" />
  <lossy value="true" />
  <threshold value="ERROR"/>
  <layout type="log4net.Layout.PatternLayout">
  <conversionPattern value="[%date{dd MMM yyyy HH:mm:ss,fff}] %level %thread %logger - %message%newline" />
  </layout>
</appender>
<root>
    <appender-ref ref="SmtpAppender" />
</root>

我看到有人也在使用 <EnableSsl value="true" />,但是当我将它复制到 appender 标签中时,它说它是无效元素。顺便说一句,当我通过 C# 代码发送其他电子邮件时,我将 EnableSsl 设置为 true。

调试正在发生的事情的最简单方法是启用 log4net 内部日志记录:

<appSettings>
    <add key="log4net.Internal.Debug" value="true"/>
</appSettings>

这将向控制台和 System.Diagnostics.Trace 系统打印您的 appender 配置的任何潜在问题。我能看到的问题是您指定了 lossy 但没有添加求值器:

<lossy value="true" />
<evaluator type="log4net.Core.LevelEvaluator,log4net">
    <threshold value="ERROR" />
</evaluator>

基本上,您需要将当前拥有的 <threshold> 设置放入评估器部分。

您还应该添加 <EnableSsl value="true" /> 开关,因为 gmail 需要这样做。

另一件需要验证的事情是 gmail 没有阻止您尝试发送电子邮件的地址。登录您的 gmail 帐户并查看是否有一些电子邮件指示被阻止 activity.