尝试通过gmail

时间:2019-07-26 23:03:57

标签: c# nlog mailkit

我有一个用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认为更简单。

我已经尽力进行所有研究,并且正在就可能出现的问题拔出头发……帮助!

2 个答案:

答案 0 :(得分:0)

知道了!

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

如果使用端口587,则无法启用ssl,好像...现在可以使用!

答案 1 :(得分: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"
/>