Leer correo electrónico usando Pop3 en C # [cerrado]


Estoy buscando un método para leer correos electrónicos usando Pop3 en C# 2.0. Actualmente, estoy usando código encontrado en CodeProject . Sin embargo, esta solución es menos que ideal. El mayor problema es que no admite correos electrónicos escritos en unicode.

Author: Eldila, 2008-09-04

8 answers

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

 71
Author: VanOrman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-08-01 18:57:07

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ía ser métodos de autenticación avanzados 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). Ver RFC 1939: Protocolo de Oficina de Correos-Versión 3 y RFC 1734: Comando de autenticación POP3 para más detalles.

La parte 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. Usted puede escribir quick & dirty MIME parser en unas pocas horas o días y se encargará de 95+% de todos los mensajes entrantes. Mejorar el analizador para que pueda analizar casi cualquier correo electrónico significa:

  • obtener muestras de correo electrónico enviadas desde los clientes de correo más populares y mejorar el analizador para corregir errores e interpretaciones erróneas de RFC generadas por ellos.
  • Asegurándose de que los mensajes que violen RFC para encabezados y contenido de mensajes no bloquearán su parser y que usted será capaz de leer cada valor legible o adivinable desde el correo electrónico mutilado
  • manejo correcto de los problemas de internacionalización (por ejemplo, idiomas escritos de derecha a izquierda, codificación correcta para un idioma específico, etc.)
  • UNICODE
  • Archivos adjuntos y árbol jerárquico de elementos de mensaje como se ve en "Mime torture email sample"
  • S/MIME (correos electrónicos firmados y cifrados).
  • y así sucesivamente

Depurar un analizador MIME robusto 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 algunas pruebas unitarias para él también; -)

Volver a la pregunta original.

Siguiendo el código tomado de nuestra página de tutoriales POP3 y los enlaces te ayudarían:

// 
// 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();
 15
Author: Martin Vobr,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-10-08 18:17:13

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 son de otros autores, pero puedes ver cómo todo encaja en mi aplicación.

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

Vea el archivo POP3Main.cs, POP3Client.cs, e insert_bug.aspx

 8
Author: Corey Trager,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-23 07:45:40

También puedes probar Mail.dll mail component , tiene soporte SSL, unicode y soporte de correo electrónico multinacional:

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.

 5
Author: Pawel Lesnikowski,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-09-09 17:47:33

No recomendaría OpenPOP. Acabo de pasar unas horas depurando un problema-POPClient de OpenPOP.getMessage () estaba devolviendo misteriosamente null. Depuré esto y encontré 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 está mayormente inactivo... el último lanzamiento fue en 2004.

Por ahora todavía estamos usando OpenPOP, pero echaré un vistazo a algunos de los otros proyectos que la gente ha recomendado aquí.

 3
Author: Richard Beier,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-08-06 19:52:27

HigLabo.El correo es fácil de usar. He aquí un ejemplo 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"); 
} 

Puedes obtenerlo de https://github.com/higty/higlabo o Nuget [HigLabo]

 3
Author: Higty,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-09-09 18:25:44

Llámame old fashion, pero ¿por qué usar una biblioteca de terceros para un protocolo simple? He implementado lectores POP3 en la web ASP.NET aplicación con System. Net. Sockets. TcpClient y System. Net. Security. SslStream para el cifrado y autenticación. En cuanto a los protocolos, una vez que abra 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.

 2
Author: stephenbayer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-19 14:23:17

Acabo de probar SMTPop y funcionó.

  1. He descargado esto.
  2. Añadida 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();
        }
    }
}
 2
Author: Ragunath Jawahar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-10-30 18:45:15