我最初用SmtpClient编写了发送电子邮件的sub,它工作了一段时间,直到最近我发现它不再工作。一些研究表明,该协议被贬值,并使用MailKit发送电子邮件。所以我写了一小段代码,似乎是间歇性的。奇怪的是,对我来说,它要么起作用,要么不起作用,有时就不起作用。这是我经过一些研究后写的(我认为这是不对的(。
using (var smtpClient = new MailKit.Net.Smtp.SmtpClient())
{
smtpClient.AuthenticationMechanisms.Remove("XOAUTH2");
smtpClient.ServerCertificateValidationCallback = (s, c, h, e) => true;
smtpClient.SslProtocols = System.Security.Authentication.SslProtocols.Ssl3 | System.Security.Authentication.SslProtocols.Tls | System.Security.Authentication.SslProtocols.Tls11 | System.Security.Authentication.SslProtocols.Tls12 | System.Security.Authentication.SslProtocols.Ssl2;
smtpClient.CheckCertificateRevocation = false;
smtpClient.Connect("mail.myserver.com", 465, MailKit.Security.SecureSocketOptions.SslOnConnect);
smtpClient.Authenticate("username", "pwd");
smtpClient.Send(mailMessage);
smtpClient.Disconnect(true);
}
这是异常消息:
尝试建立SSL或TLS连接时出错。一种可能是您正在尝试连接到不支持SSL/TLS的端口。另一种可能性是,由于以下一个或多个原因,服务器提供的SSL证书不受系统信任:
- 服务器正在使用无法验证的自签名证书
- 本地系统缺少验证服务器证书所需的根证书或中间证书
- 服务器提供的证书已过期或无效。看见https://github.com/jstedfast/MailKit/blob/master/FAQ.md#InvalidSslCertificate寻找可能的解决方案
内部异常消息:身份验证失败,因为远程参与方已关闭传输流
发生了什么?
在这种情况下,内部异常消息是您应该注意的消息。
远程服务器关闭了连接。
为什么?谁知道呢。也许是因为你经常连接和断开连接。
许多邮件服务器将开始拒绝来自连接和断开连接过于频繁的客户端的连接。
你多久连接/断开一次?
您可以尝试保持SmtpClient会话打开几分钟以发送多条消息,而不是打开连接只发送一条消息然后断开连接。