我最初写了一个子程序,用于通过SmtpClient发送电子邮件,该邮件已经工作了一段时间,直到最近我发现它不再起作用。一些研究说,该协议已过时,可以使用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。
内部异常消息: 验证失败,因为远程方已关闭传输流。
这是怎么回事?
答案 0 :(得分:0)
内部异常消息是在这种情况下应注意的消息。
远程服务器关闭了连接。
为什么?谁知道。也许是因为您经常连接和断开连接。
许多邮件服务器将开始拒绝来自过于频繁连接和断开连接的客户端的连接。
您多久进行一次连接/断开连接?
您可以尝试将SmtpClient会话保持打开状态几分钟,以便发送多条消息,而不是打开连接以仅发送一条消息然后断开连接。