1

我有一个用 c# 编写的应用程序,我正在尝试使用 Nlog 来处理日志记录和电子邮件通知。我的日志记录没有问题,但我似乎对电子邮件处理有很大的问题。

按照他们在 wiki 中的建议,我安装了 Nlog Mailkit 并根据说明进行了配置,添加了目标和规则。这是我的配置文件现在的样子:

<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"
      autoReload="true"
      throwExceptions="false"
      internalLogLevel="Off" internalLogFile="c:\temp\nlog-internal.log">

  <extensions>
    <add assembly="NLog.MailKit"/>
</extensions>

  <variable name="myvar" value="myvalue"/>

  <targets>
    <target 
      xsi:type="Mail" 
      name="errMail" 
      subject="test" 
      to="me@domain.com" 
      from="my_acct@gmail.com" 
      smtpUserName="my_acct@gmail.com" 
      enableSsl="true" 
      smtpPassword="pwd" 
      smtpAuthentication="Basic" 
      smtpServer="smtp.gmail.com" 
      smtpPort="587" 
    />
  </targets>

  <rules>
    <!-- add your logging rules here -->
    <logger name="*" level="Error" writeTo="errMail" />
  </rules>
</nlog>

作为一个简单的测试,这是我的 C# 代码:

namespace ConsoleApp1
{
    class Program
    {
        private static readonly NLog.Logger Logger = NLog.LogManager.GetCurrentClassLogger();

        static void Main(string[] args)
        {
            try
            {
                Logger.Error("error test");
            }
            catch (Exception ex)
            {

            }
        }
    }
}

当我运行它时,似乎什么都没有发生……没有电子邮件,什么都没有。如果我用文件交换目标,我会得到一个日志文件,所以我知道它通常可以工作。

作为另一个测试,我添加了一些简单的代码来直接发送电子邮件:

var fromAddress = new MailAddress("my_acct@gmail.com", "From Name");
var toAddress = new MailAddress("me@domain.com", "To Name");
const string fromPassword = "pwd";
const string subject = "Subject";
const string body = "Body";

var smtp = new SmtpClient
{
  Host = "smtp.gmail.com",
  Port = 587,
  EnableSsl = true,
  DeliveryMethod = SmtpDeliveryMethod.Network,
  UseDefaultCredentials = false,
  Credentials = new NetworkCredential(fromAddress.Address, fromPassword)
};

using (var message = new MailMessage(fromAddress, toAddress)
{
  Subject = subject,
  Body = body
})

{
  smtp.Send(message);
}

smtp 测试工作正常,所以理论上从我的桌面访问 gmail 或通过 gmail 发送电子邮件没有问题......所以我只能假设在 nlog 或呼叫的配置中一定有我做错了。 ..但我不知道是什么。

我最初试图通过我公司的 smtp 服务器发送,但认为可能有一些访问问题阻止我这样做,所以我换成 gmail 认为它会更简单。

我已经做了所有我能做的研究,我正在努力寻找可能是什么问题......帮助!!!

4

2 回答 2

0

知道了!!

https://github.com/jstedfast/MailKit/issues/131

如果使用端口 587,您将无法启用 ssl,看起来……现在它可以工作了!

于 2019-07-30T17:41:27.963 回答
0

我想分享对我有用的配置

1- 对于发件人电子邮件,我们必须在此处启用“允许不太安全的应用程序”:https://myaccount.google.com/u/1/lesssecureapps?pli=1&pageId=none

2-在 nlog.config 中我们包含这个目标

<target xsi:type="Mail"
        name="test"
        header="Hey mouldi"
        footer="end mouldi"
        layout="${longdate}|${logger}|${uppercase:${level}}|${message} ${exception}"
        subject="Error technofix v2"
        from="...@gmail.com"
        to="...@gmail.com"
        smtpUserName="...@gmail.com"
        enableSsl="true"
        secureSocketOption="SslOnConnect"
        smtpPassword="..."
        smtpAuthentication="Basic"
        smtpServer="smtp.gmail.com"
        smtpPort="465"
/>
于 2020-04-07T16:02:18.127 回答