2011-08-17 32 views
1

私はJosephとBen AlbahariのCuts 4.0 in a Nutshellを読んでいて、POP3を使ってメールを読むNetworkingの章でこのコードを見つけました。 POP3には、わかっているように定義されたコミュニケーションがあります。この章でコードを使用すると、それはうまくいくはずですが、そうではないことが明らかです。これはコードですGmailを使ってメールを読む

private static string ReadLine(Stream stream) 
     { 
      List<byte> list = new List<byte>(); 
      while (true) 
      { 
       int b = stream.ReadByte(); 
       if (b == 10 || b < 0) break; 

       if (b != 13) list.Add((byte)b); 
      } 
      return Encoding.UTF8.GetString(list.ToArray()); 
     } 

     private static void SendCommand(Stream stream, string line) 
     { 
      byte[] byteArr = Encoding.UTF8.GetBytes(line + "\r\n"); 
      stream.Write(byteArr, 0, byteArr.Length); 
      string response = ReadLine(stream); 
      if (!response.StartsWith("+OK")) 
       throw new Exception("Pop exception: " + response); 
     } 

     static void Main(string[] args) 
     { 

      using (TcpClient client = new TcpClient("pop.gmail.com", 995)) 
      { 

       using (NetworkStream stream = client.GetStream()) 
       { 
        ReadLine(stream); 
       } 
      } 

コードはメールをダウンロードしないという意味では不完全です。私はちょうど私たちがGmailから得た1回目の応答を見てみようとしていました。しかし残念ながら、プログラムはちょうどReadByteReadLineメソッドに固執しています。

+OK Hello there. 

私のプログラムはちょうどハングアップします。このページごとの通り:

http://mail.google.com/support/bin/answer.py?answer=13287

あなたは私が行っている、まさにあるpop.gmail.comに接続する必要があります。誰も私に不足していることを教えてもらえますか?

注:この種の処理を行うサードパーティのプロジェクトは私には送信しないでください。私はそれを使うのがとても簡単だと分かっています。しかし、私はちょうどフードの下で何が起こるかを見ようとしています。私のプログラム自体にバグがあるのを見つけたら、私の方がいいでしょう。

ありがとうございました。

+0

を必要とは、あなたがGmailの設定でPOP3をeanbledがありますか? – Zenwalker

+0

@zenwalker:はい私は有効にしましたが、これまでに書いたプログラムとは何の関係もありません。ちょっと待ってください。 Gmailからのメッセージ。このステップの後、ユーザ名とパスワードを入力するステップが来ます。しかし、私の最初のステップ自体は機能していません。 – TCM

+0

ストリームが開かれているかどうかを確認してください。プログラムをデバッグし、ストリームがポート995から読み取れるものを確認してください – Zenwalker

答えて

2

代わりNetworkStreamの使用SslStream GmailはSSL

TcpClient objTcpClient = new TcpClient(); 
//Connecting to the pop3 server at the specified port 
objTcpClient.Connect(pop3Server, pop3PortNumber); 

//ValidateCertificate is a delegate 
SslStream netStream = new SslStream(objTcpClient.GetStream(), false, ValidateCertificate); //Authenticates the client on the server 
netStream.AuthenticateAsClient(pop3Server); 
//Stream Reader to read response stream 
StreamReader netStreamReader = new StreamReader(netStream, Encoding.UTF8, true); 
+0

Vamsiありがとうございます。 – TCM

+0

あなたは歓迎です – Vamsi

+0

validatCertificateの議論とは何ですか? –

1

Gmailでは、SSLを使用する必要があります。

995ポートはSSLでPOP3です。SslStreamを使用することを検討してください。

関連する問題