2012-05-15 23 views
8

Estoy usando OpenPop.net para tratar de analizar nuestros enlaces de todos los correos electrónicos que están en una bandeja de entrada determinada. He encontrado este método para obtener todo el mensaje:OpenPop.net obtener texto del mensaje real

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

Ahora estoy tratando de colocar a través de cada mensaje, pero me parece que no puede encontrar la manera de hacerlo, tengo esto hasta ahora para mi botón:

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

¿Cómo puedo recorrer cada entrada en allaEmail para poder mostrarla en un MessageBox?

Respuesta

25

Veo que utiliza el fetchAllEmail example desde la página de inicio de OpenPop. Un ejemplo similar showing how to get body text también está en la página de inicio.

Es posible que también desee ver cómo se estructuran realmente los correos electrónicos. A email introduction existe solo para este propósito.

Habiendo dicho eso, haría algo similar al código a continuación.

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

Espero que esto pueda ayudarlo en el camino. Tenga en cuenta que también hay online documentation para OpenPop.

+1

¡GUAU, gracias foens! ¡Eso era exactamente lo que buscaba! :) Checkbox comming – user1213488

+0

html.GetBodyAsText() da una excepción dice que la referencia de objeto no se establece en una instancia. pero obtengo el valor usando FindFirstPlainTextVersion() y luego plainText.GetBodyAsText() ¿alguna idea de por qué? – Antony

0

Esto es cómo lo hice:

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

espero que ayude.

Cuestiones relacionadas