【问题标题】:Problems sending emails via MailKit通过 MailKit 发送电子邮件的问题
【发布时间】:2020-11-05 18:41:15
【问题描述】:

我最初编写了 sub 用于使用 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 证书不被系统信任,原因如下:

  1. 服务器正在使用无法验证的自签名证书。
  2. 本地系统缺少验证服务器证书所需的根证书或中间证书。
  3. 服务器提供的证书已过期或无效。 请参阅https://github.com/jstedfast/MailKit/blob/master/FAQ.md#InvalidSslCertificate 了解可能的解决方案。
    内部异常消息: 身份验证失败,因为远程方已关闭传输流。

发生了什么事?

【问题讨论】:

    标签: asp.net ssl mailkit


    【解决方案1】:

    内部异常消息是这种情况下应该注意的消息。

    远程服务器关闭了连接。

    为什么?谁知道。可能是因为您连接和断开连接的频率太高了。

    许多邮件服务器将开始拒绝来自频繁连接和断开连接的客户端的连接。

    您连接/断开连接的频率如何?

    您可以尝试将 SmtpClient 会话保持打开几分钟以发送多条消息,而不是打开一个连接以仅发送一条消息然后断开连接。

    【讨论】:

    • 我希望这是真的,通过保持连接打开使邮件可以发送两次,但在第三次尝试时抛出相同的异常。
    • 那么您没有正确地保持连接处于活动状态。服务器将在 10 分钟左右不活动后断开连接。您需要调用 NoOp() 方法以使其保持活动状态。
    猜你喜欢
    • 2023-03-18
    • 1970-01-01
    • 2014-04-25
    • 2013-11-13
    • 2016-10-17
    • 1970-01-01
    • 1970-01-01
    • 2011-04-09
    • 1970-01-01
    相关资源
    最近更新 更多