Quiero usar un timer en modo consola C# para que lea cada cierto tiempo la bandeja de entrada de un correo.
Por ejemplo, he estado urgando con este código pero no se donde ponerlo siempre da errores.
Código
Timer miTimer = new Timer { Enabled = true }; miTimer.Interval = 60000; // 1 minuto. miTimer.Start(); // Activa el temporizador.
En el evento debo poner en algún luegar para que lea el mensaje de entrada si hay algún mensje nuevo.
Código
public static void DisparadorEventosTimer(object source, ElapsedEventArgs e) { Console.Out.WriteLine("Evento: "); }
El código del recibir corre electrónic lo ves justo debajo. Solo se actualiza al volver ejecutar la aplicación, cerrarla y vovler a ejecutar. Lo quiero automático, por cada minuto se active el timer, lea si hay mensajes nuevos sin tener que cerrar y ejecutar la aplicación.
Código
using System; using System.Collections.Generic; using OpenPop.Pop3; using OpenPop.Mime; using System.Text.RegularExpressions; namespace Recibir_email_Consola_03_cs { class Program { static void Main(string[] args) { // Título de la ventana. Console.Title = "Recibir e-mail con Consola C#"; // Tamaño ventana consola. Console.WindowWidth = 80; // X. Ancho. Console.WindowHeight = 40; // Y. Alto. // Cursor invisible. Console.CursorVisible = false; // Título del programa. Console.WriteLine("\t\t----------------------------------------"); Console.WriteLine("\t\t\tRecibir Correo Electrónico"); Console.WriteLine("\t\t----------------------------------------"); Console.WriteLine(); try { List<OpenPop.Mime.Message> lstMessages = oC.GetMessages(); if (lstMessages != null) { foreach (var oMessage in lstMessages) { Console.ForegroundColor = ConsoleColor.White; Console.WriteLine("EMAIL DE: "); Console.ForegroundColor = ConsoleColor.Gray; //string email = oMessage.Headers.ReturnPath.ToString(); string email = oMessage.Headers.From.ToString(); // Expresión regular detectar dirección email. //Regex rx = new Regex(@""); // Guarda la dirección email en la variable "emailCompleto". string emailCompleto = rx.Match(email).Groups[1].Value; // Muestra solo la dirección del email. Console.WriteLine(emailCompleto); // ¿Son email filtrados? Sí, ejecuta las intrucciones necesarios para leer asunto y mensajes. if ((emailCompleto == "metaconta@gmail.com") || (emailCompleto == "celltium@gmail.com")) { Console.WriteLine("{0} a pasado el filtro: ", emailCompleto); Console.ForegroundColor = ConsoleColor.White; Console.WriteLine(); Console.WriteLine("ASUNTO: "); Console.ForegroundColor = ConsoleColor.Gray; Console.WriteLine(oMessage.Headers.Subject + "\n"); // Asunto. Console.ForegroundColor = ConsoleColor.White; Console.WriteLine(); Console.WriteLine("MENSAJE: "); Console.ForegroundColor = ConsoleColor.Gray; // ¿Es texto sin formato? Sí. // if (oMessage.MessagePart.IsText == true) if (oMessage.MessagePart.IsText) { Console.WriteLine("Texto sin formato."); Console.WriteLine(oMessage.MessagePart.GetBodyAsText()); } // No. Texto con formato. else { Console.WriteLine("Texto con formato."); // Encuentra el primer texto sin formato. MessagePart plainTextPart = oMessage.FindFirstPlainTextVersion(); if (plainTextPart != null) { // El mensaje tenía una versión de texto sin formato. Console.WriteLine(plainTextPart.GetBodyAsText()); } else { // Trate de encontrar un cuerpo para mostrar en algunas de las otras versiones de texto. List<MessagePart> textVersions = oMessage.FindAllTextVersions(); if (textVersions.Count >= 1) { Console.WriteLine(textVersions[0].GetBodyAsText()); } else { Console.WriteLine("<<OpenPop>> Cannot find a text version body in this message to show <<OpenPop>>"); } } } } // No. Entonces,ignorará los email no filtrados. else { Console.WriteLine("No ha pasado el filtro y no se leerá ningún email."); } } } Console.ForegroundColor = ConsoleColor.Yellow; // Letras amarillas. Console.WriteLine(); Console.WriteLine("FIN DEL PROGRAMA."); Console.ReadKey(); // Pulse cualquier tecla para salir. } // Cualquier error mostrado en mensaje y de color rojo. catch (Exception ex) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine(); Console.WriteLine(ex); Console.ReadKey(); } } } public class ConnectPop3 { public string email = "celltium@gmail.com"; public string contraseña = "g0923490xgh0945g450Xj4025g"; // Ficcicio. public int puerto = 995; public bool usarSLL = true; public string Hostame = "pop.gmail.com"; public List<OpenPop.Mime.Message> GetMessages() { { oClient.Connect(Hostame, puerto, usarSLL); oClient.Authenticate(email, contraseña); int messageCount = oClient.GetMessageCount(); for (int i = messageCount; i > 0; i--) { lstMessages.Add(oClient.GetMessage(i)); } return lstMessages; } } } }
¿Alguna idea?