我正在尝试使用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)
我正在使用协议记录器,但这并不能告诉我太多,它仅包含1行:
Connected to imap://imap.gmail.com:993/?starttls=always
所以我想我的问题是:
1)我应该担心使用不安全的SSL 3.0访问gmail吗?我发现很难相信它们会迫使我使用已弃用的安全协议。
2)如果是,如何强制TLS连接,以便可以为我的应用程序服务器上的客户端关闭SSL3.0?
答案 0 :(得分:2)
MailKit有两种不同的SSL / TLS方式:
您正在尝试使用第二种模式,但是您正在连接到需要第一种模式的端口(993)。
这两种模式中使用哪种版本的SSL vs TLS完全取决于服务器支持的内容(实际上,从技术上讲,MailKit默认不支持任何版本的SSL,仅 支持TLSv1.0,TLSv1.1和TLSv1.2-我几年前默认删除了SSLv3)。
可以通过设置client.SslProtocols
属性来更改想要限制MailKit的受支持SSL和/或TLS版本的方式。