【问题标题】:MailKit.Net.Smtp.SmtpClient SMTP server does not support authenticationMailKit.Net.Smtp.SmtpClient SMTP 服务器不支持身份验证
【发布时间】:2021-06-16 15:11:47
【问题描述】:

我想使用 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(任务任务) 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务) 在 MailKit.Net.Smtp.SmtpClient.Authenticate(编码编码,ICredentials 凭据,CancellationToken cancelToken) 在 MailKit.MailService.Authenticate(ICredentials 凭据,CancellationToken cancelToken) 在 D:\Work\SMTP_EmailCheck\SMTP_EmailCheck\Program.cs:line 123 中的 SMTP_EmailCheck.P​​rogram.SendMail_MailKit_WithDomain() 处

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);
            }

提前致谢

【问题讨论】:

  • 检查服务器的设置。您需要使用 TLS 吗?端口 25 通常用于未加密的连接。它可能被禁用。但不确定是否会导致此异常。
  • 从这里对我来说很难说。如果我在你的鞋子里,我会检查服务器中的每一个设置。毕竟,服务器有什么好处,它不允许使用服务......这没有意义。我的第一个怀疑是 TLS 正在被强制执行。既然您确定不是这种情况,那么……服务器设置、防火墙、MailKit 中的一些标志……真的不知道(或者实际上:想法太多)。对不起。
  • 并非所有 SMTP 服务器都需要在允许您发送邮件之前进行身份验证。事实上,SMTP 身份验证是 SMTP 的事后扩展,是多年后才出现的。

标签: c# .net smtpclient mailkit mime-message


【解决方案1】:

“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);
}

【讨论】:

  • 不要打扰调用客户端的部分。身份验证不正确。使用您的所有设置它都不起作用,因为我选择了身份验证和 SecureSocketOptions.StartTls。谢谢
  • 那么你遇到的问题与原始海报不同。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-11
  • 2014-11-25
  • 2017-04-09
  • 2016-10-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-16
相关资源
最近更新 更多