用于Web电子邮件的Log4Net SmtpAppender-不发送

用于Web电子邮件的Log4Net SmtpAppender-不发送,log4net,smtpappender,Log4net,Smtpappender,我正在尝试让Log4Net与网络电子邮件(雅虎或Gmail)协同工作。如果你有这个工作,我会感谢一些帮助,并提前感谢 我有一个默认的根记录器,带有一个RollingFileAppender和一个SmtpAppender。 文件附加器工作正常。SmtpAppender什么也没给我 我正在通过诊断按钮调用记录器单击 protectedvoid btnReloadContractConfig\u单击(对象发送方,事件参数e) { //诊断-测试电子邮件记录器 log4net.ILog logger=l

我正在尝试让Log4Net与网络电子邮件(雅虎或Gmail)协同工作。如果你有这个工作,我会感谢一些帮助,并提前感谢

我有一个默认的根记录器,带有一个RollingFileAppender和一个SmtpAppender。 文件附加器工作正常。SmtpAppender什么也没给我

我正在通过诊断按钮调用记录器单击

protectedvoid btnReloadContractConfig\u单击(对象发送方,事件参数e)
{
//诊断-测试电子邮件记录器
log4net.ILog logger=log4net.LogManager.GetLogger(“根”);
logger.Error(“btnReloadContractConfig_Click()-这是通过电子邮件传递错误消息的测试,由Admin.aspx.cs代码文件触发。”);
}
…而RollingFileAppender正在获取消息

LOC=20120921-12:03:16.319,UTC=20120921-11:03:16.319,DELTA=10078,THR=6,ERROR,LOG=root,[(null)]-btnReloadContractConfig_Click()-这是通过电子邮件发送错误消息的测试,从Admin.aspx.cs代码文件触发

Log4Net的web.config条目如下所示:


正在应用程序_Start()处理程序的Global.asax文件中拾取web.config

void应用程序\u启动(对象发送方,事件参数e)
{
//启动Log4Net,信号应用程序已启动
log4net.Config.XmlConfigurator.Configure();
log4net.ILog logger=log4net.LogManager.GetLogger(“根”);
logger.Info(“应用程序启动()”;
}
触发电子邮件尝试的管理员网页似乎要么无限期挂起,要么暂时挂起(半秒)并继续。
dev环境不会异常崩溃,它要么挂起,要么滑动,不会出错

  • 如何从SmtpAppender中获取附加诊断
  • 我可以独立测试端口/配置以检查传出编程电子邮件上的本地块吗
  • 是否保证发送log4net电子邮件?有损和缓冲区大小特性 看起来很敏感,如果我把lossy=false,我会无限期挂起

作为参考,我使用VS2010、ASP.Net4和大量咖啡因。再次感谢您提供的帮助。

对于gmail,您必须将EnableSsl设置为true。您需要log4net版本1.2.11.0才能做到这一点。此外,出于测试目的,您可以将bufferSize设置为1,即每个日志都将被写入

出于测试目的,您还可以尝试以编程方式配置log4net,如:

public class TestingLog4Net
{
    public void TestSmtpAppender()
    {
        ConfigureLog4NetSmtp();
        var logger = GetLogger();

        logger.Fatal(new Exception("Testing"));
    }

    private static ILog GetLogger()
    {
        var logger = LogManager.GetLogger(typeof (TestSmtpAppender));
        return logger;
    }

    private static void ConfigureLog4NetSmtp()
    {
        var smtp = GetSmtpAppender();
        BasicConfigurator.Configure(smtp);
    }

    private static SmtpAppender GetSmtpAppender()
    {
        var smtp = new SmtpAppender
                       {
                           Name = "GMail",
                           Username = "your_user_name",
                           Password = "your_password",
                           SmtpHost = "smtp.gmail.com",
                           From = "your_sender@gmail.com",
                           To = "some_target@mail.com",
                           EnableSsl = true,
                           Port = 587,
                           Authentication = SmtpAppender.SmtpAuthentication.Basic,
                           Subject = "Testing log4net SmtpAppender",
                           BufferSize = 1,
                           Lossy = true,
                           Evaluator = new LevelEvaluator(Level.Fatal),
                           Layout =
                               new PatternLayout(
                               "%newline%date [%thread] %-5level %logger [%property{NDC}] - %message%newline%newline%newline")
                       };
        return smtp;
    }
}

下载LinqPad的最新测试版。选择C#程序作为LinqPad查询,并将上述代码复制到查询中。使用你的gmail帐户并设置一些目标电子邮件地址。这应该行。

好的,我想好了,现在我收到了电子邮件。我在互联网上找不到很多解决方案,所以我必须这么做

我首先设置了一个小小的控制台电子邮件程序来验证我是否可以从我的机器发送基本的电子邮件。这要求您在web.config(本例中为app.config)中添加一个配置SMTP客户端的节

当我开始工作时,我可以从独立的应用程序发送电子邮件,我将所需的部分复制到主项目的web.config文件中,然后,HotDiggity dog,它工作了。这里,纯粹出于对我的同胞们的爱,是我在Gmail上工作的system.net部分

<configuration>

[... your config stuff]

  <system.net>
    <mailSettings>
      <smtp deliveryMethod="Network" from="chunkyLover69@gmail.com">
        <network
          host="smtp.gmail.com"
          enableSsl="true"
          port="587"
          userName="chunkyLover69@gmail.com"
          password="yesThisIsMyRealPasswordIAmAnIdiot"
          defaultCredentials="false"/>
      </smtp>
    </mailSettings>
  </system.net>

[... some more of your config stuff]

</configuration>

[…你的配置文件]
[…更多的配置信息]

这就是关键,我的.config文件中没有system.net部分,因此epic失败了。希望这对以后的其他人有所帮助。

log4net:ERROR[SmtpAppender]ErrorCode:GenericFailure。发送电子邮件通知时出错。System.Net.Mail.SmtpException:SMTP服务器需要安全连接,或者客户端未通过身份验证。服务器响应为:需要5.5.1身份验证。我猜enableSsl设置不起作用。您是在使用1.2.11的已编译二进制DLL,还是自己构建?我正在使用DLL。获得了源代码并在本地构建了1.2.11-没有乐趣。尝试使用NET_2_0进行生成。没有快乐。我觉得我错过了一些明显的东西。你能在这里发布你的SmtpAppender的log4net设置吗?我很好奇这里需要什么组合。看起来smtp附件的主机、端口、用户名和密码元素是完全冗余的。我从appender中删除了它们,它很高兴地使用system.net/mailSettings/smtp config.com。我还发现,我可以使用本地安装在服务器上的HMailServer作为SMTP中继,这很有帮助。我现在有可靠的电子邮件记录。