无法让TcpClient连接到gmail

时间:2012-11-24 19:12:21

标签: c# tcp gmail imap ioexception

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

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

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

我愿意接受第三方程序,该程序会以我能阅读的格式自动下载电子邮件。我已经让Thunderbird连接到gmail,所以问题就在我的最后。

4 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

该消息表明远程服务器没有响应。它没有说“这个港口没有连接”。它没有说“我关闭连接”。它没有说什么。

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

telnet imap.gmail.com 993

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

答案 2 :(得分:0)

使用openssl连接到gmail。这是让你完成任务的简单方法。

答案 3 :(得分: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();