4

我正在尝试制作可以阅读电子邮件的东西,但我无法正常工作。这段代码:

TcpClient c = new TcpClient();
c.Connect("imap.gmail.com", 993);
NetworkStream stream = c.GetStream();
stream.ReadTimeout = 1000;
stream.ReadByte();

接缝是我下载的任何代码中断的地方。最后一行抛出一个 IOException 消息:“无法从传输连接中读取数据:连接尝试失败,因为连接方在一段时间后没有正确响应,或者建立连接失败,因为连接的主机没有响应。 "

我会满足于第三方程序,它会以我可以阅读的格式自动下载电子邮件。我已经让 Thunderbird 连接到 gmail,所以问题肯定在我这边。

4

4 回答 4

0

使用 openssl 连接到 gmail。这是完成您的事情的简单方法。

于 2013-04-03T16:45:36.663 回答
0

该消息表明远程服务器没有响应。它没有说“此端口上不允许连接”。它没有说“我关闭连接”。它什么也没说。

这意味着您甚至无法在 TCP 级别上创建连接。尝试这个:

telnet imap.gmail.com 993

它会失败。所以它与你的应用程序无关。

于 2012-11-24T22:24:16.153 回答
0

Gmail IMAP 使用 SSL,因此您需要使用SslStream和调用AuthenticateAsClient方法包装您的网络流(以便它执行 SSL 握手/服务器身份验证魔术)。之后,您与它进行交互,就好像它是正常的(非 SSL)流一样:

TcpClient c = new TcpClient();
c.Connect("imap.gmail.com", 993);
SslStream sslStream = new SslStream(c.GetStream());
sslStream.ReadTimeout = 1000;
sslStream.AuthenticateAsClient("imap.gmail.com");
sslStream.ReadByte();
于 2013-04-03T18:07:44.587 回答
0

您正在 SSL 端口上进行连接。如果您没有进行正确的 SSL 握手,它将在不久之后关闭连接,而不会向您发送任何数据。

于 2012-11-24T21:54:56.817 回答