2008-09-04 112 views

Respuesta

71

He utilizado con éxito OpenPop.NET para acceder a los correos electrónicos a través de POP3.

+1

enlace a Nuget: https://www.nuget.org/packages/OpenPop.NET/ – razon

15

descargar el correo electrónico a través del protocolo POP3 es la parte fácil de la tarea. El protocolo es bastante simple y la única parte difícil podrían ser los métodos avanzados de autenticación si no desea enviar una contraseña de texto claro a través de la red (y no puede usar el canal de comunicación encriptado SSL). Vea RFC 1939: Post Office Protocol - Version 3 y RFC 1734: POP3 AUTHentication command para más detalles.

La parte más difícil viene cuando tienes que analizar el correo electrónico recibido, lo que significa analizar el formato MIME en la mayoría de los casos. Puede escribir rápidamente & analizador MIME sucio en unas pocas horas o días y manejará el 95 +% de todos los mensajes entrantes. La mejora de la analizador de manera que puede analizar casi cualquier medio de correo electrónico:

  • obtener muestras de correo electrónico enviados desde los clientes de correo más populares y mejorar el programa de análisis con el fin de corregir los errores y malas interpretaciones RFC generados por ellos.
  • Asegurarse de que los mensajes que violen RFC para las cabeceras del mensaje y el contenido no se colgará el analizador y que usted será capaz de leer todos los valores legible o adivinar desde el correo electrónico destrozado
  • correcto manejo de las cuestiones de internacionalización (por ejemplo, las lenguas escritas de Rig a la izquierda, la codificación correcta para el idioma específico, etc.)
  • UNICODE
  • Adjuntos y el árbol jerárquico elemento de mensaje como se ve en "Mime torture email sample"
  • S/MIME (firmado y correos electrónicos cifrados).
  • y así sucesivamente

Depuración de un robusto programa de análisis MIME lleva meses de trabajo. Lo sé, porque estaba viendo a mi amigo escribir uno de esos analizadores para el componente mencionado a continuación y estaba escribiendo unas pruebas unitarias para él también ;-)

Volver a la pregunta original.

Siguiendo code taken from our POP3 Tutorial page y enlaces le ayudaría:

// 
// create client, connect and log in 
Pop3 client = new Pop3(); 
client.Connect("pop3.example.org"); 
client.Login("username", "password"); 

// get message list 
Pop3MessageCollection list = client.GetMessageList(); 

if (list.Count == 0) 
{ 
    Console.WriteLine("There are no messages in the mailbox."); 
} 
else 
{ 
    // download the first message 
    MailMessage message = client.GetMailMessage(list[0].SequenceNumber); 
    ... 
} 

client.Disconnect(); 
+7

Básicamente estás diciendo "comprar mi componente", ¿verdad? No hay nada de malo en eso, suena como un buen componente. – MarkJ

+3

Puede probar cualquier componente de terceros (gratuito o comercial). Mi post estaba tratando de señalar que la escritura de dicho componente es difícil y consume mucho tiempo debido a la necesidad de realizar pruebas exhaustivas, algo que difícilmente se puede hacer sin un gran número de informes de errores con datos de un gran número de usuarios reales. Sería bueno si elige el componente Rebex, pero si elige otro, no tengo ningún problema con él. Escribir mi propio analizador MIME o usar algún código de prueba de concepto encontrado en la web es en mi humilde opinión, en este caso no es la mejor manera de hacerlo. Pero puedo estar prejuiciado ;-), dibuja tu propia conclusión y prueba el código primero. –

+0

¿Puedo usar Rebex componente para obtener mensajes de la bandeja de entrada de Exchange 2003? – Kiquenet

2

me llaman la moda antigua, pero ¿por qué utilizar una biblioteca tercera parte para un protocolo simple. Implementé lectores POP3 en aplicaciones ASP.NET basadas en web con System.Net.Sockets.TCPClient y System.Net.Security.SslStream para el cifrado y la autenticación. En cuanto a los protocolos, una vez que se abre la comunicación con el servidor POP3, solo hay un puñado de comandos con los que debe lidiar. Es un protocolo muy fácil de trabajar.

8

Mi aplicación de código abierto BugTracker.NET incluye un cliente POP3 que puede analizar MIME. Tanto el código POP3 como el código MIME pertenecen a otros autores, pero puede ver cómo encaja todo en mi aplicación.

Para el análisis MIME, uso http://anmar.eu.org/projects/sharpmimetools/.

Ver las POP3Main.cs de archivos, POP3Client.cs y insert_bug.aspx

5

También puede intentar Mail.dll mail component, que tiene soporte SSL, Unicode, y el apoyo multinacional de correo electrónico:

using(Pop3 pop3 = new Pop3()) 
{ 
    pop3.Connect("mail.host.com");   // Connect to server and login 
    pop3.Login("user", "password"); 

    foreach(string uid in pop3.GetAll()) 
    { 
     IMail email = new MailBuilder() 
      .CreateFromEml(pop3.GetMessageByUID(uid)); 
      Console.WriteLine(email.Subject); 
    } 
    pop3.Close(false);  
} 

Puede descargarlo aquí en https://www.limilabs.com/mail

Tenga en cuenta que este es un producto comercial que he creado.

+1

¿Puedo usarlo para acceder a la bandeja de entrada de Exchange 2003? – Kiquenet

+0

Sí, puedes. Solo tiene que habilitar los protocolos IMAP o POP3. –

3

No recomendaría OpenPOP. Acabo de pasar unas horas depurando un problema: POPClient.GetMessage() de OpenPOP estaba misteriosamente devolviendo nulo. Depuré esto y descubrí que era un error de índice de cadena: vea el parche que envié aquí: http://sourceforge.net/tracker/?func=detail&aid=2833334&group_id=92166&atid=599778. Fue difícil encontrar la causa, ya que hay bloques catch {} vacíos que tragan excepciones.

Además, el proyecto es en su mayoría en estado latente ... el último lanzamiento fue en 2004.

Por ahora todavía estamos utilizando OpenPOP, pero voy a echar un vistazo a algunos de los otros proyectos de personas han recomendado aquí.

+0

¿qué te recomiendo? thx – Kiquenet

+16

Hola. Sobrepasé el proyecto OpenPop.NET y lo puse en un estado más funcional. Estas capturas de prueba se han eliminado y la biblioteca ahora es mucho más estable. No creo que esta entrada sea válida nunca más. – foens

3

HigLabo.Mail es fácil de usar. Aquí es un ejemplos de uso:

using (Pop3Client cl = new Pop3Client()) 
{ 
    cl.UserName = "MyUserName"; 
    cl.Password = "MyPassword"; 
    cl.ServerName = "MyServer"; 
    cl.AuthenticateMode = Pop3AuthenticateMode.Pop; 
    cl.Ssl = false; 
    cl.Authenticate(); 
    ///Get first mail of my mailbox 
    Pop3Message mg = cl.GetMessage(1); 
    String MyText = mg.BodyText; 
    ///If the message have one attachment 
    Pop3Content ct = mg.Contents[0];   
    ///you can save it to local disk 
    ct.DecodeData("your file path"); 
} 

se puede obtener de https://github.com/higty/higlabo o Nuget [HigLabo]

2

Sólo traté SMTPop y funcionó.

  1. He descargado this.
  2. Añadido smtpop.dll referencia a mi proyecto C# .NET

escribió el siguiente código:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text;  
using SmtPop; 

namespace SMT_POP3 { 

    class Program { 
     static void Main(string[] args) { 
      SmtPop.POP3Client pop = new SmtPop.POP3Client(); 
      pop.Open("<hostURL>", 110, "<username>", "<password>"); 

      // Get message list from POP server 
      SmtPop.POPMessageId[] messages = pop.GetMailList(); 
      if (messages != null) { 

       // Walk attachment list 
       foreach(SmtPop.POPMessageId id in messages) { 
        SmtPop.POPReader reader= pop.GetMailReader(id); 
        SmtPop.MimeMessage msg = new SmtPop.MimeMessage(); 

        // Read message 
        msg.Read(reader); 
        if (msg.AddressFrom != null) { 
         String from= msg.AddressFrom[0].Name; 
         Console.WriteLine("from: " + from); 
        } 
        if (msg.Subject != null) { 
         String subject = msg.Subject; 
         Console.WriteLine("subject: "+ subject); 
        } 
        if (msg.Body != null) { 
         String body = msg.Body; 
         Console.WriteLine("body: " + body); 
        } 
        if (msg.Attachments != null && false) { 
         // Do something with first attachment 
         SmtPop.MimeAttachment attach = msg.Attachments[0]; 

         if (attach.Filename == "data") { 
          // Read data from attachment 
          Byte[] b = Convert.FromBase64String(attach.Body); 
          System.IO.MemoryStream mem = new System.IO.MemoryStream(b, false); 

          //BinaryFormatter f = new BinaryFormatter(); 
          // DataClass data= (DataClass)f.Deserialize(mem); 
          mem.Close(); 
         }      

         // Delete message 
         // pop.Dele(id.Id); 
        } 
       } 
      }  
      pop.Quit(); 
     } 
    } 
} 
+0

He intentado con el código de tipeo pero no hay un cuerpo de correo electrónico. ¿Todos los detalles vienen normalmente excepto el cuerpo? alguna idea ????? – AbuQauod

Cuestiones relacionadas