Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: Meta en 15 Junio 2019, 11:26 am



Título: Activar un timer cada cierto tiempo.
Publicado por: Meta en 15 Junio 2019, 11:26 am
Hola:

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
  1.                Timer miTimer = new Timer
  2.                {
  3.                    Enabled = true
  4.                };
  5.                miTimer.Elapsed += new ElapsedEventHandler(DisparadorEventosTimer);
  6.                miTimer.Interval = 60000; // 1 minuto.
  7.                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
  1.        public static void DisparadorEventosTimer(object source, ElapsedEventArgs e)
  2.        {
  3.            Console.Out.WriteLine("Evento: ");
  4.        }


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
  1. using System;
  2. using System.Collections.Generic;
  3. using OpenPop.Pop3;
  4. using OpenPop.Mime;
  5. using System.Text.RegularExpressions;
  6.  
  7. namespace Recibir_email_Consola_03_cs
  8. {
  9.    class Program
  10.    {
  11.        static void Main(string[] args)
  12.        {
  13.            // Título de la ventana.
  14.            Console.Title = "Recibir e-mail con Consola C#";
  15.  
  16.            // Tamaño ventana consola.
  17.            Console.WindowWidth = 80; // X. Ancho.
  18.            Console.WindowHeight = 40; // Y. Alto.
  19.  
  20.            // Cursor invisible.
  21.            Console.CursorVisible = false;
  22.  
  23.            // Título del programa.
  24.            Console.WriteLine("\t\t----------------------------------------");
  25.            Console.WriteLine("\t\t\tRecibir Correo Electrónico");
  26.            Console.WriteLine("\t\t----------------------------------------");
  27.            Console.WriteLine();
  28.  
  29.            try
  30.            {
  31.                ConnectPop3 oC = new ConnectPop3();
  32.  
  33.                List<OpenPop.Mime.Message> lstMessages = oC.GetMessages();
  34.  
  35.  
  36.                if (lstMessages != null)
  37.                {
  38.  
  39.                    foreach (var oMessage in lstMessages)
  40.                    {
  41.                        Console.ForegroundColor = ConsoleColor.White;
  42.                        Console.WriteLine("EMAIL DE: ");
  43.                        Console.ForegroundColor = ConsoleColor.Gray;
  44.  
  45.                        //string email = oMessage.Headers.ReturnPath.ToString();
  46.                        string email = oMessage.Headers.From.ToString();
  47.  
  48.                        // Expresión regular detectar dirección email.
  49.                        Regex rx = new Regex(@"<(.*?)>");
  50.                        //Regex rx = new Regex(@"");
  51.                        // Guarda la dirección email en la variable "emailCompleto".
  52.                        string emailCompleto = rx.Match(email).Groups[1].Value;
  53.                        // Muestra solo la dirección del email.
  54.                        Console.WriteLine(emailCompleto);
  55.  
  56.                        // ¿Son email filtrados? Sí, ejecuta las intrucciones necesarios para leer asunto y mensajes.
  57.                        if ((emailCompleto == "metaconta@gmail.com") ||  (emailCompleto == "celltium@gmail.com"))
  58.                        {
  59.                            Console.WriteLine("{0} a pasado el filtro: ", emailCompleto);
  60.  
  61.                            Console.ForegroundColor = ConsoleColor.White;
  62.                            Console.WriteLine();
  63.                            Console.WriteLine("ASUNTO: ");
  64.                            Console.ForegroundColor = ConsoleColor.Gray;
  65.                            Console.WriteLine(oMessage.Headers.Subject + "\n"); // Asunto.
  66.                            Console.ForegroundColor = ConsoleColor.White;
  67.                            Console.WriteLine();
  68.                            Console.WriteLine("MENSAJE: ");
  69.                            Console.ForegroundColor = ConsoleColor.Gray;
  70.  
  71.                            // ¿Es texto sin formato? Sí.
  72.                            // if (oMessage.MessagePart.IsText == true)
  73.                            if (oMessage.MessagePart.IsText)
  74.                            {
  75.                                Console.WriteLine("Texto sin formato.");
  76.                                Console.WriteLine(oMessage.MessagePart.GetBodyAsText());
  77.                            }
  78.                            // No. Texto con formato.
  79.                            else
  80.                            {
  81.                                Console.WriteLine("Texto con formato.");
  82.  
  83.                                // Encuentra el primer texto sin formato.
  84.                                MessagePart plainTextPart = oMessage.FindFirstPlainTextVersion();
  85.                                if (plainTextPart != null)
  86.                                {
  87.                                    // El mensaje tenía una versión de texto sin formato.
  88.                                    Console.WriteLine(plainTextPart.GetBodyAsText());
  89.                                }
  90.                                else
  91.                                {
  92.                                    // Trate de encontrar un cuerpo para mostrar en algunas de las otras versiones de texto.
  93.                                    List<MessagePart> textVersions = oMessage.FindAllTextVersions();
  94.                                    if (textVersions.Count >= 1)
  95.                                    {
  96.                                        Console.WriteLine(textVersions[0].GetBodyAsText());
  97.                                    }
  98.                                    else
  99.                                    {
  100.                                        Console.WriteLine("<<OpenPop>> Cannot find a text version body in this message to show <<OpenPop>>");
  101.                                    }
  102.                                }
  103.                            }
  104.                        }
  105.  
  106.                        // No. Entonces,ignorará los email no filtrados.
  107.                        else
  108.                        {
  109.                            Console.WriteLine("No ha pasado el filtro y no se leerá ningún email.");
  110.                        }          
  111.                    }
  112.                }
  113.                Console.ForegroundColor = ConsoleColor.Yellow; // Letras amarillas.
  114.                Console.WriteLine();
  115.                Console.WriteLine("FIN DEL PROGRAMA.");
  116.                Console.ReadKey(); // Pulse cualquier tecla para salir.
  117.            }
  118.  
  119.            // Cualquier error mostrado en mensaje y de color rojo.
  120.            catch (Exception ex)
  121.            {
  122.                Console.ForegroundColor = ConsoleColor.Red;
  123.                Console.WriteLine();
  124.                Console.WriteLine(ex);
  125.                Console.ReadKey();
  126.            }
  127.        }
  128.    }
  129.  
  130.    public class ConnectPop3
  131.    {
  132.        public string email = "celltium@gmail.com";
  133.        public string contraseña = "g0923490xgh0945g450Xj4025g"; // Ficcicio.
  134.        public int puerto = 995;
  135.        public bool usarSLL = true;
  136.        public string Hostame = "pop.gmail.com";
  137.  
  138.        public List<OpenPop.Mime.Message> GetMessages()
  139.        {
  140.            using (Pop3Client oClient = new Pop3Client())
  141.            {
  142.                oClient.Connect(Hostame, puerto, usarSLL);
  143.                oClient.Authenticate(email, contraseña);
  144.  
  145.                int messageCount = oClient.GetMessageCount();
  146.                List<OpenPop.Mime.Message> lstMessages = new List<OpenPop.Mime.Message>(messageCount);
  147.  
  148.                for (int i = messageCount; i > 0; i--)
  149.                {
  150.                    lstMessages.Add(oClient.GetMessage(i));
  151.                }
  152.  
  153.                return lstMessages;
  154.            }
  155.        }
  156.    }
  157. }
  158.  

¿Alguna idea?

;)


Título: Re: Activar un timer cada cierto tiempo.
Publicado por: ThunderCls en 21 Junio 2019, 01:31 am
No se a ti pero esto a mi me va bien

Código
  1.    class Program
  2.    {
  3.        static void Main(string[] args)
  4.        {
  5.            SetUpTimer();
  6.            Console.ReadKey();
  7.        }
  8.  
  9.        private static void SetUpTimer()
  10.        {
  11.            Timer miTimer = new Timer
  12.            {
  13.                Interval = 2000,
  14.                Enabled = true
  15.            };
  16.  
  17.            miTimer.Elapsed += (a, b) =>
  18.            {
  19.                Console.WriteLine("Ticking");
  20.            };
  21.  
  22.            miTimer.Start(); // Activa el temporizador.
  23.        }
  24.    }