使用 Mailkit 连接时,我应该何时使用 SecureSockOptions 或 useSsl
When should I use SecureSockOptions or useSsl when connecting using Mailkit
在使用 MailKit 设置 smtp 时,我对如何使用第三个参数感到困惑。
这是我目前的情况:
// *************** 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);
}
我的困惑在这一行:
client.Connect(emailSettings.SmtpServer, emailSettings.SmtpPort , true);
我可以选择传入 true/false 或 SecureSockOptions。
这是我表格上的内容:
我不确定我是否理解这两种不同的设置如何影响电子邮件的发送。我假设我将 true/false 用于 useSsl 或 SecureSockOptions?我不确定这些是如何协同工作的。
SecureSockOptions 的选项是:
None Auto SslOnConnect StartTls StartTlsWhenAvailable
这些选项是否不需要使用 useSsl?
useSsl
是 SecureSocketOptions
.
的 dumbed-down 版本
当您为 useSsl
传递 true
时,它映射到 SecureSocketOptions.SslOnConnect
。
当您为 useSsl
传递 false
时,它映射到 SecureSocketOptions.StartTlsWhenAvailable
。
查看 mailkit 文档连接方法有 5 个不同的签名(不同的参数)
在将布尔值传递给 Connect 的情况下,这意味着如果为真则使用 ssl,如果为假则不使用 ssl。没有接受布尔值和 SecureSocketOptions 的方法。
http://www.mimekit.net/docs/html/Overload_MailKit_Net_Smtp_SmtpClient_Connect.htm
您应该阅读他们关于上面 link 的文档。
此外,这可能对他们的文档有用:
The useSsl argument only controls whether or not the client makes an
SSL-wrapped connection. In other words, even if the useSsl parameter
is false, SSL/TLS may still be used if the mail server supports the
STARTTLS extension.
To disable all use of SSL/TLS, use the Connect(String, Int32,
SecureSocketOptions, CancellationToken) overload with a value of
SecureSocketOptions.None instead.
当你有一个受信任的内部网络域控制器类型或受信任的盒子时,你应该使用它,当你保护传输(无窃听)时,默认情况下大多数邮件服务器使用它,即使你将它编码并读取false 你可能有一个系统包装,这是当系统本身由于 OSI 模型较低级别而覆盖它时。如果我没记错的话,我会建议你个人使用它,它可以解决几个较旧的传输模型在 syn ack 手动请求时丢失的问题,并且具有更高的请求超时值。
在使用 MailKit 设置 smtp 时,我对如何使用第三个参数感到困惑。
这是我目前的情况:
// *************** 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);
}
我的困惑在这一行:
client.Connect(emailSettings.SmtpServer, emailSettings.SmtpPort , true);
我可以选择传入 true/false 或 SecureSockOptions。
这是我表格上的内容:
我不确定我是否理解这两种不同的设置如何影响电子邮件的发送。我假设我将 true/false 用于 useSsl 或 SecureSockOptions?我不确定这些是如何协同工作的。
SecureSockOptions 的选项是:
None Auto SslOnConnect StartTls StartTlsWhenAvailable
这些选项是否不需要使用 useSsl?
useSsl
是 SecureSocketOptions
.
当您为 useSsl
传递 true
时,它映射到 SecureSocketOptions.SslOnConnect
。
当您为 useSsl
传递 false
时,它映射到 SecureSocketOptions.StartTlsWhenAvailable
。
查看 mailkit 文档连接方法有 5 个不同的签名(不同的参数)
在将布尔值传递给 Connect 的情况下,这意味着如果为真则使用 ssl,如果为假则不使用 ssl。没有接受布尔值和 SecureSocketOptions 的方法。
http://www.mimekit.net/docs/html/Overload_MailKit_Net_Smtp_SmtpClient_Connect.htm
您应该阅读他们关于上面 link 的文档。
此外,这可能对他们的文档有用:
The useSsl argument only controls whether or not the client makes an SSL-wrapped connection. In other words, even if the useSsl parameter is false, SSL/TLS may still be used if the mail server supports the STARTTLS extension.
To disable all use of SSL/TLS, use the Connect(String, Int32, SecureSocketOptions, CancellationToken) overload with a value of SecureSocketOptions.None instead.
当你有一个受信任的内部网络域控制器类型或受信任的盒子时,你应该使用它,当你保护传输(无窃听)时,默认情况下大多数邮件服务器使用它,即使你将它编码并读取false 你可能有一个系统包装,这是当系统本身由于 OSI 模型较低级别而覆盖它时。如果我没记错的话,我会建议你个人使用它,它可以解决几个较旧的传输模型在 syn ack 手动请求时丢失的问题,并且具有更高的请求超时值。