【发布时间】: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.Program.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