2012-05-15 6 views
8

Ich benutze OpenPop.net, um zu versuchen und analysieren unsere Links von allen E-Mails, die in einem bestimmten Posteingang sind. Ich fand diese Methode, um all die Meldung:OpenPop.net erhalten tatsächlichen Nachrichtentext

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; 
     } 
    } 

Jetzt habe ich durch jede Nachricht Schleife versuchen aber ich kann nicht scheinen, um herauszufinden, wie es zu tun, ich habe dies bisher für meine Button:

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); 
    } 

Wie würde ich jeden Eintrag in allaEmail durchlaufen, so dass ich es in einer MessageBox anzeigen kann?

Antwort

25

Ich kann sehen, dass Sie die fetchAllEmail example von der OpenPop-Homepage verwenden. Ein ähnliches Beispiel showing how to get body text ist auch auf der Homepage.

Sie können auch sehen, wie E-Mails tatsächlich strukturiert sind. Ein email introduction existiert nur für diesen Zweck.

Nachdem das gesagt wurde, würde ich etwas ähnliches wie der Code unten tun.

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()); 
} 

Ich hoffe, das kann Ihnen auf dem Weg helfen. Beachten Sie, dass es auch online documentation für OpenPop gibt. Diese

+1

WOW danke Foens! Das war genau das, was ich suchte! :) Checkbox comming – user1213488

+0

html.GetBodyAsText() gibt eine Exception sagt die Objektreferenz nicht auf eine Instanz gesetzt. aber ich bekomme den Wert mit FindFirstPlainTextVersion() und dann plainText.GetBodyAsText() irgendeine Idee warum? – Antony

0

ist, wie ich es tat:

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

Hoffe, es hilft.