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

MailKit.Net.Smtp.SmtpClient SMTP 服务器不支持身份验证

如何解决MailKit.Net.Smtp.SmtpClient SMTP 服务器不支持身份验证

我想使用 MailKit 通过我们的 Exchange 服务器发送电子邮件,使用流程的凭据。

使用域/用户名/密码构建 System.Net.Mail.SmtpClient 和 NetworkCredential 有效,但在使用 MailKit.Net.Smtp.SmtpClient 和 NetworkCredential 时不起作用。像

一样抛出异常

异常消息:SMTP 服务器不支持身份验证。 跟踪消息:在 MailKit.Net.Smtp.SmtpClient.d__73.MoveNext() --- 从上一个抛出异常的位置开始的堆栈跟踪结束 --- 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 在 MailKit.Net.Smtp.SmtpClient.Authenticate(编码编码、ICredentials 凭证、CancellationToken 取消令牌) 在 MailKit.MailService.Authenticate(ICredentials 凭证,CancellationToken 取消令牌) 在 SMTP_EmailCheck.P​​rogram.SendMail_MailKit_WithDomain() 在 D:\Work\SMTP_EmailCheck\SMTP_EmailCheck\Program.cs:line 123

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
            var mailMessage = new MimeMessage();
            mailMessage.From.Add(new MailBoxAddress(fromMailAddress));
            mailMessage.To.Add(new MailBoxAddress(toMailAddress));
             mailMessage.Subject = "SendMail_MailKit_WithDomain";
            mailMessage.Body = new TextPart(textformat.Plain)
            {
                Text = "Hello"
            };

            using (var smtpClient = new MailKit.Net.Smtp.SmtpClient())
            {
                smtpClient.Connect("MailServer",25,MailKit.Security.SecureSocketoptions.None);                   
                var creds = new NetworkCredential("UserName","Password","Domain");
                smtpClient.Authenticate(creds);                    
                smtpClient.Send(mailMessage);
                smtpClient.disconnect(true);
            }

提前致谢

解决方法

“SMTP 服务器不支持身份验证。”异常意味着您的服务器不支持身份验证。换句话说,它不接受用户名和密码。您需要匿名使用。

即使您向 System.Net.Mail.SmtpClient 提供了一些 NetworkCredentials,也不意味着 SmtpClient 使用了它们。您刚刚向 System.Net.Mail.SmtpClient 提供了您不需要的信息。

TL;DR:不要打扰client.Authenticate (creds);

将您的代码更改为:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
var mailMessage = new MimeMessage();
mailMessage.From.Add(new MailboxAddress(fromMailAddress));
mailMessage.To.Add(new MailboxAddress(toMailAddress));
mailMessage.Subject = "SendMail_MailKit_WithDomain";
mailMessage.Body = new TextPart(TextFormat.Plain)
{
    Text = "Hello"
};

using (var smtpClient = new MailKit.Net.Smtp.SmtpClient())
{
    smtpClient.Connect("MailServer",25,MailKit.Security.SecureSocketOptions.None);                   
    smtpClient.Send(mailMessage);
    smtpClient.Disconnect(true);
}

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