2012-05-15 20 views
8

私はOpenPop.netを使用して、特定の受信トレイにあるすべてのメールからのリンクを解析しています。私は、このメソッドは、すべてのメッセージを取得することが判明:私は私のボタンのために、これまでにこれを持って、OpenPop.net実際のメッセージテキストを取得

public static List<OpenPop.Mime.Message> FetchAllMessages(string hostname, int port, bool useSsl, string username, string password) 
    { 
     // The client disconnects from the server when being disposed 
     using (Pop3Client client = new Pop3Client()) 
     { 
      // Connect to the server 
      client.Connect(hostname, port, useSsl); 

      // Authenticate ourselves towards the server 
      client.Authenticate(username, password); 

      // Get the number of messages in the inbox 
      int messageCount = client.GetMessageCount(); 

      // We want to download all messages 
      List<OpenPop.Mime.Message> allMessages = new List<OpenPop.Mime.Message>(messageCount); 

      // Messages are numbered in the interval: [1, messageCount] 
      // Ergo: message numbers are 1-based. 
      // Most servers give the latest message the highest number 
      for (int i = messageCount; i > 0; i--) 
      { 
       allMessages.Add(client.GetMessage(i));      
      } 

      client.Disconnect(); 

      // Now return the fetched messages 
      return allMessages; 
     } 
    } 

は今、私はそれぞれのメッセージをループにしようとしていますが、私はそれを行う方法を見つけ出すように見えることはできません。

private void button7_Click(object sender, EventArgs e) 
    { 

     List<OpenPop.Mime.Message> allaEmail = FetchAllMessages("pop3.live.com", 995, true, "[email protected]", "xxxxx"); 

     var message = string.Join(",", allaEmail); 
     MessageBox.Show(message); 
    } 

どのように私はMessageBoxに表示できるようにallaEmailの各エントリをループしますか?

答えて

25

fetchAllEmail exampleをOpenPopホームページから使用しています。同様の例のshowing how to get body textもホームページにあります。

実際に電子メールがどのように構成されているかを調べることもできます。この目的のためだけにemail introductionが存在します。

これがあると、私は以下のコードに似たようなことをします。

private void button7_Click(object sender, EventArgs e) 
{ 
    List<OpenPop.Mime.Message> allaEmail = FetchAllMessages(...); 

    StringBuilder builder = new StringBuilder(); 
    foreach(OpenPop.Mime.Message message in allaEmail) 
    { 
     OpenPop.Mime.MessagePart plainText = message.FindFirstPlainTextVersion(); 
     if(plainText != null) 
     { 
      // We found some plaintext! 
      builder.Append(plainText.GetBodyAsText()); 
     } else 
     { 
      // Might include a part holding html instead 
      OpenPop.Mime.MessagePart html = message.FindFirstHtmlVersion(); 
      if(html != null) 
      { 
       // We found some html! 
       builder.Append(html.GetBodyAsText()); 
      } 
     } 
    } 
    MessageBox.Show(builder.ToString()); 
} 

私はこれが途中であなたを助けてくれることを願っています。 OpenPopにはonline documentationもあることに注意してください。

+1

WOWありがとうございます!それはまさに私が後にしたものでした! :)チェックボックスcomming – user1213488

+0

html.GetBodyAsText()は、オブジェクト参照がインスタンスに設定されていないという例外を示します。しかし、私はFindFirstPlainTextVersion()を使用して値を取得し、次にplainText.GetBodyAsText()の理由は何ですか? – Antony

0

これは、私はそれをやった方法です:

string Body = msgList[0].MessagePart.MessageParts[0].GetBodyAsText(); 
      foreach(string d in Body.Split('\n')){ 
       Console.WriteLine(d);      
      } 

は、お役に立てば幸いです。

関連する問題