MailKit.Net.Smtp.SmtpClient SMTP 服务器不支持身份验证
MailKit.Net.Smtp.SmtpClient SMTP server does not support authentication
我想使用 MailKit 通过我们的 Exchange 服务器发送电子邮件,使用进程的凭据。
使用 domain/username/password 构建 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(Encoding 编码,ICredentials 凭据,CancellationToken cancellationToken)
在 MailKit.MailService.Authenticate(ICredentials 凭据,CancellationToken cancellationToken)
在 SMTP_EmailCheck.Program.SendMail_MailKit_WithDomain() 中 D:\Work\SMTP_EmailCheck\SMTP_EmailCheck\Program.cs:第 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);
}
我想使用 MailKit 通过我们的 Exchange 服务器发送电子邮件,使用进程的凭据。
使用 domain/username/password 构建 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(Encoding 编码,ICredentials 凭据,CancellationToken cancellationToken) 在 MailKit.MailService.Authenticate(ICredentials 凭据,CancellationToken cancellationToken) 在 SMTP_EmailCheck.Program.SendMail_MailKit_WithDomain() 中 D:\Work\SMTP_EmailCheck\SMTP_EmailCheck\Program.cs:第 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);
}