当SmtpClient工作时,SmtpAppender无法通过smtp-server发送电子邮件

时间:2017-10-10 15:15:33

标签: c# smtp log4net smtpappender

我尝试在LogNet中使用SmtpAppender:

<appender name="SmtpAppender" type="log4net.Appender.SmtpAppender">
      <to value="user1@company.com,user2@company.com" />
      <from value="noreply@company.com" />
      <subject value="Error" />
      <smtpHost value="smtp.company.com" />
      <bufferSize value="512" />
      <lossy value="true" />
      <evaluator type="log4net.Core.LevelEvaluator">
        <threshold value="DEBUG"/>
      </evaluator>
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%newline%date [%thread] %-5level %logger [%property{NDC}] - %message%newline%newline%newline" />
      </layout>
    </appender>

当我在Log4net中启用调试日志记录时,收到以下错误:

  

log4net:ERROR [SmtpAppender] ErrorCode:GenericFailure。发生了错误   同时发送电子邮件通知。 System.Net.Mail.SmtpException:   邮件发送失败。 ---&GT; System.Net.WebException:无法连接   到远程服务器---&gt; System.Net.Sockets.SocketException:An   尝试以访问禁止的方式访问套接字   权限(来自SMTP-Server的IP):25 at   System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot,   SocketAddress(socketAddress)at   System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure,   插座s4,插座s6,插座&amp; socket,IPAddress&amp;地址,   ConnectSocketState状态,IAsyncResult asyncResult,Exception&amp;   例外)---内部异常堆栈跟踪结束--- at   System.Net.ServicePoint.GetConnection(PooledStream PooledStream,   对象所有者,布尔异步,IPAddress&amp;地址,插座&安培; abortSocket,   插座及放大器; System.Net.PooledStream.Activate(Object中的abortSocket6)   owningObject,Boolean async,GeneralAsyncDelegate asyncCallback)at   System.Net.PooledStream.Activate(Object owningObject,   GeneralAsyncDelegate asyncCallback)at   System.Net.ConnectionPool.GetConnection(Object owningObject,   GeneralAsyncDelegate asyncCallback,Int32 creationTimeout)at   System.Net.Mail.SmtpConnection.GetConnection(的ServicePoint   servicePoint)at   System.Net.Mail.SmtpTransport.GetConnection(ServicePoint servicePoint)   在System.Net.Mail.SmtpClient.GetConnection()处   System.Net.Mail.SmtpClient.Send(MailMessage message)---结束   内部异常堆栈跟踪--- at   System.Net.Mail.SmtpClient.Send(MailMessage消息)at   log4net.Appender.SmtpAppender.SendEmail(String messageBody)at   log4net.Appender.SmtpAppender.SendBuffer(LoggingEvent [] events)

然而。当我尝试从使用此log4net配置的程序中通过同一SMTP-Server发送邮件时:

MailMessage msg = new MailMessage(sender, recipients, subject, body);
mtpClient client = new SmtpClient("smtp.company.com", 25);
client.Send(msg);
一切正常。所以这不是一个简单的SMTP-Server / FireWall-Issue。

SMTPAppender的工作方式是否与.NET中的标准StmpClient.Send()不同,可能导致此问题?

1 个答案:

答案 0 :(得分:0)

@Bob Geiger指出我正确的方向,Log4net似乎使用完全相同的机制。

事实证明这是一个Virusscan / Spam-Protection问题。仅限定义的应用程序允许通过我们的smtp-server发送邮件。虽然我们的一个程序使用了与log4net相同的后端 - 应用程序,但它有一个不同的文件名,所以允许发送邮件,而另一个程序不是。

我们必须在virusscan配置中允许特定的.exe文件。