2

POP3プロトコルを介してlive.comアカウントからメールを読み込もうとしています。

サーバーはpop3.live.comで、ポートは995の場合です。

事前に作成されたライブラリを使用する予定はありません。ジョブにNetworkStreamとStreamReader/StreamWriterを使用しています。私はこれを理解する必要があります。したがって、ここで与えられた答えのいずれか:C#でPop3を使用して電子メールを読むことは役に立ちません。

これはより大きなプログラムの一部ですが、それが機能するかどうかを確認するために小さなテストを行いました。とにかく、私は何も得ていません。これが私が使用しているコードです。これは正しいはずです。

編集:このコードは古いです。解決された2番目のブロックの問題を参照してください。

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ポート)に送信しています。そして、私は何も得ていません、そして私は考えがありません。


2番目のブロック:問題は明らかに、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);
}
4

1 に答える 1

0

Wiresharkを使用してネットワークトラフィックを表示するとどうなりますか?何か送っていますか?

編集:そのポートでもtelnet経由でpop3.live.comに接続できません。pop3電子メールクライアントを介して正常に接続できたことはありますか?

于 2010-03-13T21:47:59.027 に答える