En esta entrada tratare el tema de realizar una conexión por el protocolo Pop3 para poder leer nuestro correo electrónico, en este caso utilizare una cuenta de Gmail y obtendré los correos de la bandeja de entrada de la misma.
Para poder conectarnos haremos uso de una librería llamada OpenPop.Net que ya realiza la conexión de una manera rápida. La podemos descargar desde su página, o directamente de Nuget en visual studio buscándola por su nombre.
Es importante que realicemos en nuestra cuenta de Gmail los siguientes cambios, ya que Gmail cuenta con restricciones a clientes externos para leer los mails.
Primero(con sesión creada en gmail para hacer estos cambios claro) debemos activar la opción de permitir conexiones de aplicaciones externas en la siguiente liga:
Seleccionamos Activar y Guardar.
La segunda configuración es opcional y es para que Gmail nos permita descargar varias veces los mensajes aunque sea ya leído o ya descargado, basta con que vallamos a la configuración de Gmail y seleccionemos la siguiente opción y demos guardar.
Una vez tengamos la librería y la configuración en Gmail podemos hacer uso de la siguiente clase que he escrito y comentado pasó por paso:
using OpenPop.Mime; using OpenPop.Pop3; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Runtime.Remoting.Messaging; using System.Text; namespace Sincronizador_SMTP.Business.Connect { /// <summary> /// clase que se conecta por smtp /// </summary> class ConnectPop3 { //usuario/mail de gmail private string username = "[email protected]"; //password private string password = "tupassword"; //el puerto para pop de gmail es el 995 private int port = 995; //el host de pop de gmail es pop.gmail.com private string hostname = "pop.gmail.com"; //esta opción debe ir en true private bool useSsl = true; public List<Message> getMensajes() { try { // El cliente se desconecta al terminar el using using (Pop3Client client = new Pop3Client()) { // conectamos al servidor client.Connect(hostname, port, useSsl); // Autentificación client.Authenticate(username, password); // Obtenemos los Uids mensajes List<string> uids = client.GetMessageUids(); // creamos instancia de mensajes List<Message> lstMessages = new List<Message>(); // Recorremos para comparar for (int i = 0; i < uids.Count; i++) { //obtenemos el uid actual, es él id del mensaje string currentUidOnServer = uids[i]; //por medio del uid obtenemos el mensaje con el siguiente metodo Message oMessage = client.GetMessage(i + 1); //agregamos el mensaje a la lista que regresa el metodo lstMessages.Add(oMessage); } // regresamos la lista return lstMessages; } } catch(Exception ex){ //si ocurre una excepción regresamos null, es importante que cachen las excepciones, yo //lo hice general por modo de ejemplo return null; } } }
Y de esta manera utilizamos la clase y recorremos los mensajes, y a su vez mostramos el asunto para probar que si corresponde a lo que tenemos en nuestra cuenta de Gmail.
//creamos el objeto ConnectPop3 oCP3 = new ConnectPop3(); //invocamos el metodo para obtener mensajes List<OpenPop.Mime.Message> lstMensajes = oCP3.getMensajes(); //recorremos y mostramos el asunto foreach(OpenPop.Mime.Message oMensaje in lstMensajes){ Console.WriteLine(oMensaje.Headers.Subject); }
Nota: Pop3 al igual que IMAP es un protocolo para leer mails, si deseamos enviar mails debemos conectarnos con el protocolo SMTP.