【问题标题】:Weird Issue in dotnet core website using MailKit to send emaildotnet 核心网站中使用 MailKit 发送电子邮件的奇怪问题
【发布时间】:2018-03-26 06:37:35
【问题描述】:

我刚刚从供应商那里继承了一个网站,并查看了该网站的错误和源代码。

该应用程序基于 dotnet core 1.1 构建,并使用 Mailkit 通过我们的公司代理通过 SMTP 发送电子邮件。

问题在于邮件发送功能在发送电子邮件时表现不正常。大多数时候我调试发送方法它出错了。我们使用Authentication Required Flag 并将 userId 和 Password 传递给 MailKit Authenticate 方法

堆栈跟踪消息

AuthenticationInvalidCredentials: 5.7.3 身份验证不成功

在 MailKit.Net.Smtp.SmtpClient.Authenticate(Encoding encoding, ICredentials 凭证、CancellationToken 取消令牌)在 MailKit.MailService.Authenticate(字符串用户名,字符串密码, CancellationToken 取消令牌)在 Rules.Emailer.SendNotification.Send(字符串到,字符串来自,字符串 主题,字符串主体)在 C:\Workspace\G\Rules\Emailer\SendNotification.cs:line 94 在 G.Rules.Emailer.UserNotifications.ResetPassword(字符串

代码sn-p

using (var client = new SmtpClient())
{
    client.Connect(EmailConfiguration.SmtpServer, EmailConfiguration.SmtpPort, EmailConfiguration.UseSsl);

    if (EmailConfiguration.RequiresAuthentication)
    {
        client.Authenticate(EmailConfiguration.Username, EmailConfiguration.Password);
    }

    //TODO: Only Send if PROD
    client.Send(message);
    client.Disconnect(true);
}

return true;
}

【问题讨论】:

  • 添加了使用 MailKit 将电子邮件发送到 SMTP 的代码
  • 我建议获取协议日志以找出身份验证失败的原因。请参阅 MailKit 的常见问题解答以了解如何做到这一点。
  • 添加协议日志
  • 我使用企业 SMTP 和 System.Net.Mail 就好了,下面是一个示例 SmtpClient client = new SmtpClient { Host = mailSettings.Smtp.Network.Host, Port = mailSettings.Smtp.Network。端口, UseDefaultCredentials = false, Credentials = new NetworkCredential(mailSettings.Smtp.Network.UserName, mailSettings.Smtp.Network.Password), DeliveryMethod = SmtpDeliveryMethod.Network, //EnableSsl = true };
  • 协议日志在哪里?

标签: smtp .net-core mailkit .net-core-1.1


【解决方案1】:

到NTLM连接,你可以试试:

await client.ConnectAsync(SmtpServer.SenderServer, SmtpServer.Port).ConfigureAwait(false);

if (client.AuthenticationMechanisms.Contains("NTLM"))
{
    var ntlm = new SaslMechanismNtlm(SmtpServer.UserName, SmtpServer.Password);
    await client.AuthenticateAsync(ntlm).ConfigureAwait(false);
}
else
{
    await client.AuthenticateAsync(SmtpServer.UserName, SmtpServer.Password).ConfigureAwait(false);
}

【讨论】:

    【解决方案2】:
    Connected to smtp://<IP>:25/?starttls=when-available
    S: 220 <Server_REDACTED>.<DOMAIN_REDACTED>.COM Microsoft ESMTP MAIL Service ready at Tue, 27 Mar 2018 03:22:42 -0400
    C: EHLO [10.207.8.74]
    S: 250-<Server_REDACTED>.<DOMAIN_REDACTED>.COM Hello [10.207.8.74]
    S: 250-SIZE
    S: 250-PIPELINING
    S: 250-DSN
    S: 250-ENHANCEDSTATUSCODES
    S: 250-STARTTLS
    S: 250-X-ANONYMOUSTLS
    S: 250-AUTH NTLM
    S: 250-X-EXPS GSSAPI NTLM
    S: 250-8BITMIME
    S: 250-BINARYMIME
    S: 250-CHUNKING
    S: 250-XEXCH50
    S: 250-XRDST
    S: 250 XSHADOW
    C: STARTTLS
    S: 220 2.0.0 SMTP server ready
    C: EHLO [10.207.8.74]
    S: 250-<Server_REDACTED>.<DOMAIN_REDACTED>.COM Hello [10.207.8.74]
    S: 250-SIZE
    S: 250-PIPELINING
    S: 250-DSN
    S: 250-ENHANCEDSTATUSCODES
    S: 250-AUTH NTLM LOGIN
    S: 250-X-EXPS GSSAPI NTLM
    S: 250-8BITMIME
    S: 250-BINARYMIME
    S: 250-CHUNKING
    S: 250-XEXCH50
    S: 250-XRDST
    S: 250 XSHADOW
    C: AUTH LOGIN
    S: 334 VXNlcm5hbWU6
    C: <EMAIL_REDACTED>  
    S: 334 UGFzc3dvcmQ6
    C: <PSWD_REDACTED> 
    S: 535 5.7.3 Authentication unsuccessful
    

    【讨论】:

      猜你喜欢
      • 2020-11-05
      • 2022-07-29
      • 2017-03-19
      • 2023-03-18
      • 2017-02-17
      • 1970-01-01
      • 1970-01-01
      • 2011-09-09
      • 1970-01-01
      相关资源
      最近更新 更多