微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

System.net.mail.SmtpClient 无法从具有 NTLM 身份验证的服务器发送邮件

如何解决System.net.mail.SmtpClient 无法从具有 NTLM 身份验证的服务器发送邮件

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

问题

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

代码片段

我们尝试了以下代码片段来发送邮件

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 操作失败,错误 - 提供了无效名称名称为空)。

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

解决方法

我发现了同样的错误,并通过用“MailKit.Net.Smtp”替换“System.net.mail.SmtpClient”来解决它。套餐链接- 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);
        }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。