C# ASP.NET Core 2.0中的NLog未登录到邮件

C# ASP.NET Core 2.0中的NLog未登录到邮件,c#,asp.net-mvc,asp.net-core,log4net,nlog,C#,Asp.net Mvc,Asp.net Core,Log4net,Nlog,在我的ASP.NET核心应用程序中,我使用的是log4net,一切正常,尽管有一些小故障。我们现在转向NLog,因为log4net开发似乎停滞不前,而且他们似乎没有适合.NET核心开发的版本。但试图让邮件目标与NLog协同工作似乎是不可能的。我能够将NLog日志记录到数据库和文件系统。但不是邮件 顺便说一下,我正在使用我们公司的smtp服务器来转发电子邮件 首先,这里是我对SmtpAppender的旧log4net配置(敏感的服务器信息当然是伪装的),它工作得非常好 <log4net

在我的ASP.NET核心应用程序中,我使用的是log4net,一切正常,尽管有一些小故障。我们现在转向NLog,因为log4net开发似乎停滞不前,而且他们似乎没有适合.NET核心开发的版本。但试图让邮件目标与NLog协同工作似乎是不可能的。我能够将NLog日志记录到数据库和文件系统。但不是邮件

顺便说一下,我正在使用我们公司的smtp服务器来转发电子邮件

首先,这里是我对SmtpAppender的旧log4net配置(敏感的服务器信息当然是伪装的),它工作得非常好

   <log4net>
<appender name="SmtpAppender" type="log4net.Appender.SmtpAppender">
    <to value="user@destination.com"/>
    <from value="service@source.com"/>
    <subject value="some text"/>
    <smtpHost value="smtp.source.com"/>
    <bufferSize value="1"/>
    <lossy value="true"/>
    <evaluator type="log4net.Core.LevelEvaluator">
        <threshold value="Error" />
    </evaluator>
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%newline%date [%thread] %-5level %logger [%property{NDC}] - %message%newline%newline%newline"/>
    </layout>
</appender>
<root>
    <appender-ref ref="SmtpAppender" />
    <!--<appender-ref ref="AdoNetAppender"/>
    <appender-ref ref="RollingFileAppender" />-->
</root>
虽然它说有一个身份验证错误,但当我在上面的log4net配置中使用log4net时,一切正常。我使用的是相同的smtp中继服务器和发件人和收件人地址。很明显,在NLog配置中我缺少了一些东西

仅供参考,我确实尝试添加可以通过smtp服务器转发邮件的用户名和密码,但它仍然给了我相同的错误


有人能告诉我我错过了什么吗?谢谢。

我能够使我的邮件目标在NLog中工作。但我不确定这是不是一个好主意;我也不知道为什么log4net在没有类似配置的情况下工作。我在NLog邮件目标中添加了以下行:

skipCertificateValidation="true"
因此,现在整个目标如下所示:

<target name="RulesEngineLogMail" xsi:type="Mail"
            smtpServer="xxxxx.xxxxxx.com"
              subject="Rules Engine Log"
              skipCertificateValidation="true"
            layout="[${longdate}] - [${machinename}] - [${level}] - [${message}] - [${exception:format=toString}]"
            from="xxx@xxx.com"
            to="aaa@aaa.com"/>


如果有人能够解释添加跳过证书验证的行的后果,那就太好了。我无法将上述配置投入生产,直到我知道它是安全的。log4net不需要任何类似的配置,这让我很感兴趣。

您的web.config中是否缺少DEFAULTPROXY?另见@RolfKristensen:谢谢你的回复。首先,我没有web.config,因为这是一个.NETCore2应用程序,所以我有appsettings.json。但我没有任何smtp信息。它们包含在NLog.config中。其次,在我的log4net.config中,相同的smtp服务器似乎工作正常。不管怎样,您能给我一个示例代码,将DEFAULTPROXY添加到我的NLog.config文件中吗?或者它只需要在web.config中吗?我刚刚快速比较了NLog和log4net SmtpClient的使用情况,它们看起来非常相似。所以我猜是机器/服务帐户的差异导致了证书问题。我不太了解SmtpClient或AspNetCore2为什么2019年我们还需要外部网络记录器???
skipCertificateValidation="true"
<target name="RulesEngineLogMail" xsi:type="Mail"
            smtpServer="xxxxx.xxxxxx.com"
              subject="Rules Engine Log"
              skipCertificateValidation="true"
            layout="[${longdate}] - [${machinename}] - [${level}] - [${message}] - [${exception:format=toString}]"
            from="xxx@xxx.com"
            to="aaa@aaa.com"/>