仅使用TcpClient和StreamWriter / StreamReader读取POP3服务器

时间:2010-03-13 21:43:55

标签: c# pop3

我正试图通过POP3协议从我的live.com帐户阅读邮件。

我发现服务器是pop3.live.com,端口是995。

我不打算使用预制的库,我正在使用NetworkStream和StreamReader / StreamWriter来完成这项工作。我需要弄明白这一点。所以,这里给出的任何答案:Reading Email using Pop3 in C#都没用。

这是一个更大的计划的一部分,但我做了一个小测试,看它是否有效。无论如何,我没有得到任何东西。这是我正在使用的代码,我认为应该是正确的。

编辑:这段代码已经过时了,请参考解决的第二个块问题。

public Program() {
    string temp = "";
    using(TcpClient tc = new TcpClient(new IPEndPoint(IPAddress.Parse("127.0.0.1"),8000))) {
        tc.Connect("pop3.live.com",995);
        using(NetworkStream nws = tc.GetStream()) {
            using(StreamReader sr = new StreamReader(nws)) {
                using(StreamWriter sw = new StreamWriter(nws)) {
                    sw.WriteLine("USER " + user);
                    sw.Flush();
                    sw.WriteLine("PASS " + pass);
                    sw.Flush();
                    sw.WriteLine("LIST");
                    sw.Flush();
                    while(temp != ".") {
                        temp += sr.ReadLine();
                    }
                }
            }
        }
    }
    Console.WriteLine(temp);
}

Visual Studio调试器不断超过tc.Connect("pop3.live.com",995);这会抛出“尝试对无法访问的网络65.55.172.253:995进行套接字操作”错误。

所以,我从我的机器上的端口8000发送到端口995,即hotmail pop3端口。 而我什么也没得到,而且我的想法也没有了。


第二块:问题显然是我没有写退出命令。

守则:

public Program() {
    string str = string.Empty;
    string strTemp = string.Empty;
    using(TcpClient tc = new TcpClient()) {
        tc.Connect("pop3.live.com",995);
        using(SslStream sl = new SslStream(tc.GetStream())) {
            sl.AuthenticateAsClient("pop3.live.com"); 
            using(StreamReader sr = new StreamReader(sl)) {
                using(StreamWriter sw = new StreamWriter(sl)) {
                    sw.WriteLine("USER " + user);
                    sw.Flush();
                    sw.WriteLine("PASS " + pass);
                    sw.Flush();
                    sw.WriteLine("LIST");
                    sw.Flush();
                    sw.WriteLine("QUIT ");
                    sw.Flush();

                    while((strTemp = sr.ReadLine()) != null) {
                        if(strTemp == "." || strTemp.IndexOf("-ERR") != -1) {
                            break;
                        }
                        str += strTemp;
                    }
                }
            }
        }
    }
    Console.WriteLine(str);
}

1 个答案:

答案 0 :(得分:0)

如果您使用Wireshark查看网络流量会怎样?是发送任何东西吗?

编辑:我无法通过telnet连接到该端口的pop3.live.com。您是否成功通过pop3电子邮件客户端成功连接?