Чтение POP3-сервера только с TcpClient и StreamWriter / StreamReader - PullRequest
2 голосов
/ 14 марта 2010

Я пытаюсь читать почту с моей учетной записи live.com по протоколу POP3.

Я обнаружил, что сервер - pop3.live.com, а порт - 995.

Я не планирую использовать готовую библиотеку, я использую NetworkStream и StreamReader / StreamWriter для работы. Мне нужно это выяснить. Итак, любой из ответов, приведенных здесь: Чтение электронной почты с использованием Pop3 в 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, порт hot3 popmail. И я ничего не получаю, и у меня нет идей.


Второй блок: очевидно, проблема заключалась в том, что я не написал команду quit.

код:

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 голосов
/ 14 марта 2010

Что произойдет, если вы просматриваете сетевой трафик с помощью Wireshark? Это вообще что-нибудь посылает?

Редактировать: я не могу подключиться через telnet к pop3.live.com через этот порт. Вам когда-нибудь удавалось успешно подключиться через почтовый клиент pop3?

...