使用Mailkit进行连接时应何时使用SecureSockOptions或useSsl

时间:2019-07-19 14:28:14

标签: c# winforms smtp mailkit

我对使用MailKit设置smtp时如何使用第三个参数感到困惑。

这是我到目前为止所拥有的:

document.querySelectorAll('ul li').forEach(function(element) {
    element.addEventListener('click', function(e) {
        if (e.target.classList.contains('clicked')) return;
        //your code here...
        e.target.classList.add('clicked');
    });
});

我的困惑是在这条线上:

    // *************** SEND EMAIL *******************
    using (var client = new MailKit.Net.Smtp.SmtpClient(new ProtocolLogger("smtp.log")))
    {
      client.SslProtocols = System.Security.Authentication.SslProtocols.Tls12;

      //accept all SSL certificates
      client.ServerCertificateValidationCallback = (s, c, h, e) => true;

      // Note: since we don't have an OAuth2 token, disable
      // the XOAUTH2 authentication mechanism.
      client.AuthenticationMechanisms.Remove("XOAUTH2");

      // client.Connect(emailSettings.SmtpServer, emailSettings.SmtpPort, emailSettings.IsSslEnabled);
      client.Connect(emailSettings.SmtpServer, emailSettings.SmtpPort, emailSettings.AuthType);

      if (emailSettings.IsAuthenticationRequired)
      {
        // Note: only needed if the SMTP server requires authentication
        client.Authenticate(emailSettings.SmtpUsername, emailSettings.SmtpPassword);
      }

      if (emailSettings.TimeOut == 0) emailSettings.TimeOut = 10;
      client.Timeout = emailSettings.TimeOut * 1000;

      client.Send(message);
      client.Disconnect(true);
    }

我可以选择传递true / false或SecureSockOptions。

这是我的表格上的内容

enter image description here

我不确定我是否了解这两种不同的设置如何影响电子邮件的发送。我假设我对useSsl或SecureSockOptions使用true / false?我不确定这些如何协同工作。

SecureSockOptions的选项为:

  

没有自动SslOnConnect StartTls StartTlsWhenAvailable

这些选项是否消除了对useSsl的需求?

3 个答案:

答案 0 :(得分:0)

useSslSecureSocketOptions的简化版本。

当您将true的{​​{1}}传递给useSsl时。

当您将SecureSocketOptions.SslOnConnect的{​​{1}}传递给false时。

答案 1 :(得分:0)

查看mailkit文档的Connect方法具有5个不同的签名(不同的参数)

在将boolean传递给Connect的情况下,这意味着如果为true,则使用ssl;如果为false,则不要使用ssl。没有可以同时接受boolean和SecureSocketOptions的方法。

http://www.mimekit.net/docs/html/Overload_MailKit_Net_Smtp_SmtpClient_Connect.htm

您应该在上面的链接上阅读其文档。

这在他们的文档中也可能有用:

  

useSsl参数仅控制客户端是否进行   SSL包装的连接。换句话说,即使useSsl参数   为假,如果邮件服务器支持SSL / TLS,则仍可以使用SSL / TLS   STARTTLS扩展名。

     

要禁用所有对SSL / TLS的使用,请使用Connect(String,Int32,   SecureSocketOptions,CancellationToken)重载,值为   SecureSocketOptions。无。

答案 2 :(得分:0)

当您具有受信任的内部网络域控制器类型或受信任的框时,也应该使用它,当您保护传输(无窃听)时,默认情况下,即使您将其编码并且读为false,大多数邮件服务器也会使用它可能具有系统包装,这是由于OSI模型的级别较低,因此系统本身将其覆盖。我建议您在可能的情况下亲自使用它,以解决一些因手动应答请求而导致的较旧的传输模型丢失的情况,如果我没记错的话,它具有较高的请求超时值。