【问题标题】:System.net.mail.SmtpClient fails to send mail from server having NTLM authenticationSystem.net.mail.SmtpClient 无法从具有 NTLM 身份验证的服务器发送邮件
【发布时间】:2021-07-10 04:38:31
【问题描述】:

.Net Core 版本:3.1 服务器:Linux(Ubuntu 18.04 LTS)

问题

我们的用例是使用 SMTP 服务器向客户发送电子邮件。此 SMTP 服务器配置了 NTLM 作为身份验证机制。当我们使用 .NetCore 中默认的“System.net.mail.SmtpClient”包时,它甚至无法创建成功的连接。 因此,使用 .NetCore 构建的 Linux 服务器上的电子邮件发送失败。

代码 sn-p

我们尝试了以下代码sn-p发送邮件:

SmtpClient client = new SmtpClient();
client.Port = smtp.Port;
client.UseDefaultCredentials = false;
client.DeliveryMethod = SmtpDeliveryMethod.Network;
client.Credentials = new NetworkCredential(smtp.Login, smtp.Password);
client.Host = smtp.Server;
client.EnableSsl = smtp.EnableSSL;
mail.Body = builder.ToString();
client.Send(mail);

错误

“GSSAPI 操作失败并出现错误 - 请求了不受支持的机制。NTLM 身份验证需要 GSSAPI 插件“gss-ntlmssp”。 因此,我们在运行构建的 linux 服务器上安装了包“gss-ntlmssp”,但它仍然报错。

最新错误

System.ComponentModel.Win32Exception (0x80090020):GSSAPI 操作失败并出现错误 - 提供的名称无效(名称为空)。

有人可以建议解决此问题的正确方法或解决此问题的任何方法吗?

【问题讨论】:

    标签: .net email .net-core smtp smtpclient


    【解决方案1】:

    我发现了同样的错误并通过将“System.net.mail.SmtpClient”替换为“MailKit.Net.Smtp”来解决它。套餐链接—— https://www.nuget.org/packages/MailKit/

    你可以试试下面的代码

            var message = new MimeMessage();
            message.From.Add(MailboxAddress.Parse(emailConfiguration.EmailCredential.UserName));
            message.To.Add(MailboxAddress.Parse(appUser.Email));
            message.Subject = isReset ? emailConfiguration.EmailTemplete.ResetPasswordEmailSubject : emailConfiguration.EmailTemplete.SetPasswordEmailSubject;
            message.Body = new TextPart(TextFormat.Plain) { Text = body };
    
            SmtpClient smtp = new SmtpClient();
            smtp.Connect(emailConfiguration.EmailCredential.Host, emailConfiguration.EmailCredential.Port, SecureSocketOptions.StartTls);
            smtp.Authenticate(emailConfiguration.EmailCredential.UserName, emailConfiguration.EmailCredential.Password);
    
            try
            {
                smtp.Send(message);
            }
            catch (Exception ex)
            {
                // Console.Write(ex);
            }
            finally
            {
                smtp.Disconnect(true);
            }
    

    【讨论】:

      猜你喜欢
      • 2020-08-02
      • 1970-01-01
      • 2013-08-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-13
      • 2015-03-21
      • 1970-01-01
      • 2017-02-16
      相关资源
      最近更新 更多