1

我开发了一个自定义类,它使用 MailKit 和 MimeKit 与 IMAP4 邮件服务器进行交互。它就像一种魅力,但我最近注意到一些让我感到有点不舒服的事情:

看起来如果你具体一个存在但没有邮件服务器的主机,它会尝试连接大约 30 秒,最后抛出一个异常,这里引用了。感觉就像它正在尝试搜索邮件服务器,但由于没有人回复它,它有点“丢失”。

我将Timeout属性设置为,5000ms但看起来它只是在连接后才应用。

问题是......有没有办法通过.NET本身在一个高级“层”中控制它,或者这应该被视为MailKit错误吗?

呼叫连接:

imap.ServerCertificateValidationCallback = (s, c, h, e) => true;
imap.Connect(hostname, puerto, SecureSocketOptions.SslOnConnect);
imap.Authenticate(username, password);

异常堆栈跟踪:

   en System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress)
   en System.Net.Sockets.Socket.Connect(EndPoint remoteEP)
   en System.Net.Sockets.Socket.Connect(IPAddress address, Int32 port)
   en MailKit.Net.Imap.ImapClient.Connect(String host, Int32 port, SecureSocketOptions options, CancellationToken cancellationToken)
   en Utilities.Imap4.Imap.Connect(String hostname, String username, String password, ConnectionType secure, Int32 port) en xxxx\Imap4\Imap4\Imap4.cs:línea 121
4

1 回答 1

1

Timeout 属性不影响 Connect 方法,事实证明 Socket 上的 Timeout 属性具有相同的限制。关于如何在超时后中止 Socket.Connect() 有一个 StackOverflow 答案,但它有点难看。您可以实现该答案,然后调用 ImapClient.Connect() 并将其传递给 Socket。

于 2017-08-01T10:19:40.260 回答