gpt4 book ai didi

c# - 使用 TLS 而不是 SSL 使用 Mailkit ImapClient 连接到 gmail

转载 作者:行者123 更新时间:2023-11-30 22:58:54 31 4
gpt4 key购买 nike

我正在尝试用 C# 代码轮询一个 gmail 帐户。我正在使用 Mailkit 库 ( https://github.com/jstedfast/MailKit )。当我告诉客户端使用 SSL 时,我可以成功连接:

using (var client = new ImapClient ()) 
{
client.Connect ("imap.friends.com", 993, true);
client.Authenticate ("joey", "password");
client.Disconnect (true);
}

但我的理解(可能是错误的)SSL 是不安全的,我们不应该使用它。所以我试图强制 TLS 连接:

using (var client = new ImapClient ()) 
{
client.Connect ("imap.friends.com", 993, SecureSocketOptions.StartTls);
client.Authenticate ("joey", "password");
client.Disconnect (true);
}

但是 client.connect 行的错误:

Message: The IMAP Server has unexpectedly disconnected
Stack Trace:
at MailKit.Net.Imap.ImapStream.<ReadAheadAsync>d__54.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at MailKit.Net.Imap.ImapStream.<ReadTokenAsync>d__69.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at MailKit.Net.Imap.ImapEngine.<ConnectAsync>d__140.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task)
at MailKit.Net.Imap.ImapClient.<ConnectAsync>d__81.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at MailKit.Net.Imap.ImapClient.Connect(String host, Int32 port, SecureSocketOptions options, CancellationToken cancellationToken)

我正在使用协议(protocol)记录器运行,但这并没有告诉我太多,它只包含 1 行:

Connected to imap://imap.gmail.com:993/?starttls=always

所以我想我的问题是:

1) 我应该担心使用不安全的 SSL 3.0 访问 gmail 吗?我很难相信他们会强制我使用已弃用的安全协议(protocol)。

2) 如果是这样,我如何强制建立 TLS 连接,以便为我的应用程序服务器上的客户端关闭 SSL3.0?

最佳答案

MailKit 有两种不同的 SSL/TLS 方式:

  1. 连接到远程服务器后立即使用 SSL/TLS
  2. 连接并读取问候语以检查服务器是否支持后,使用 STARTTLS 命令切换到 SSL/TLS 模式

您正在尝试使用第二种模式,但您正在连接到需要第一种模式的端口 (993)。

SSL 和 TLS 的哪个版本与这些模式中的任何一个一起使用完全取决于服务器支持什么(实际上,从技术上讲,MailKit 默认不支持任何版本的 SSL,它支持 TLSv1.0、TLSv1.1 和 TLSv1.2 - 几年前我默认删除了 SSLv3)。

您可以通过设置 client.SslProtocols 来更改您希望限制 MailKit 的受支持 SSL 和/或 TLS 版本的方式。属性(property)。

关于c# - 使用 TLS 而不是 SSL 使用 Mailkit ImapClient 连接到 gmail,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52642607/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com