Activar un timer cada cierto tiempo.

Iniciado por Meta, 15 Junio 2019, 11:26 AM

0 Miembros y 1 Visitante están viendo este tema.

Meta

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 (csharp) [Seleccionar]
                Timer miTimer = new Timer
                {
                    Enabled = true
                };
                miTimer.Elapsed += new ElapsedEventHandler(DisparadorEventosTimer);
                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 (csharp) [Seleccionar]
        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 (csharp) [Seleccionar]
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
            {
                ConnectPop3 oC = new ConnectPop3();

                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(@"<(.*?)>");
                        //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()
        {
            using (Pop3Client oClient = new Pop3Client())
            {
                oClient.Connect(Hostame, puerto, usarSLL);
                oClient.Authenticate(email, contraseña);

                int messageCount = oClient.GetMessageCount();
                List<OpenPop.Mime.Message> lstMessages = new List<OpenPop.Mime.Message>(messageCount);

                for (int i = messageCount; i > 0; i--)
                {
                    lstMessages.Add(oClient.GetMessage(i));
                }

                return lstMessages;
            }
        }
    }
}


¿Alguna idea?

;)
Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/

ThunderCls

No se a ti pero esto a mi me va bien

Código (csharp) [Seleccionar]
    class Program
    {
        static void Main(string[] args)
        {
            SetUpTimer();
            Console.ReadKey();
        }

        private static void SetUpTimer()
        {
            Timer miTimer = new Timer
            {
                Interval = 2000,
                Enabled = true
            };

            miTimer.Elapsed += (a, b) =>
            {
                Console.WriteLine("Ticking");
            };

            miTimer.Start(); // Activa el temporizador.
        }
    }
-[ "...I can only show you the door. You're the one that has to walk through it." – Morpheus (The Matrix) ]-
http://reversec0de.wordpress.com
https://github.com/ThunderCls/