E-mail y filtrado

Iniciado por Meta, Enero 09, 2022, 01:29:03 PM

Tema anterior - Siguiente tema

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

Enero 09, 2022, 01:29:03 PM Ultima modificación: Enero 09, 2022, 04:31:04 PM por AXCESS
No tienes permitido ver enlaces. Registrate o Entra a tu cuenta

Buenas:

En modo consola puedo enviar correo electrónico, cuyo código fuente lo dejo abajo para que lo vean. Solo puede enviar mensajes o e-mail, funciona muy bien.

Ahora quiero hacer otro programa, que solo lee email también en modo consola y  los e-mail que tanga filtrado, si tengo tres e-mail filtrados, pues solo acepta esos e-mail en pantalla. Todo esto, lee un mensaje por cada 5 minutos. Mensaje, Asunto y la dirección del e-mail.

¿Cómo se hace?

Aquí abajo dejo el codigo de enviar e-mail por consola que funciona al 100 %, con tildes, ñ y otros símbolos correctamente a parte de enviar más de 255 caracteres.

Para que funcione y se usa gmail.

// Activar / desactivar Acceso de aplicaciones poco seguras en Google.
No tienes permitido ver enlaces. Registrate o Entra a tu cuenta

Código C#:
Código: text
using System;
using System.IO;
using System.Net;
using System.Net.Mail;
using System.Text;

namespace Enviar_email_Consola_07
{
    internal class Program
    {
        static void Main(string[] args)
        {
           

            // Variables.
            string usuario, contraseña, destinatario, asunto, mensaje;
            const int MAXIMA_LONGITUD = 40000;

            #region Configuración ventana.
            // Título de la ventana.
            Console.Title = "Gestor correo electrónico";

            // Tamaño de la ventana, x, y, o ancho y alto.
            const byte ancho = 80;
            const byte alto = 25;
            Console.SetWindowSize(ancho, alto);

            // Color de fondo.
            Console.BackgroundColor = ConsoleColor.Black;

            // Color de las letras.
            Console.ForegroundColor = ConsoleColor.Gray;

            // Limpiar pantalla y dejarlo todo en color de fondo.
            Console.Clear();

            // Visible el cursor.
            Console.CursorVisible = true;
            #endregion

            // Título del programa.
            Console.WriteLine("\t\t----------------------------------------");
            Console.WriteLine("\t\t\tEnviar Correo Electrónico");
            Console.WriteLine("\t\t----------------------------------------");

            try
            {
               
                Console.WriteLine("\n");
                Console.ForegroundColor = ConsoleColor.Cyan;
                Console.Write("\t\tTu correo electrónico: ");
                Console.ForegroundColor = ConsoleColor.Gray;
                usuario = Console.ReadLine();
                Console.WriteLine();
                Console.ForegroundColor = ConsoleColor.Cyan;
                Console.Write("\t\tIntroducir contraseña: ");
                Console.ForegroundColor = ConsoleColor.Gray;
                contraseña = LeerPassword();
                Console.WriteLine();
                Console.ForegroundColor = ConsoleColor.Cyan;
                Console.Write("\t\tDestinatario: ");
                Console.ForegroundColor = ConsoleColor.Gray;
                destinatario = Console.ReadLine();
                Console.WriteLine();
                Console.ForegroundColor = ConsoleColor.Cyan;
                Console.Write("\t\tAsunto: ");
                Console.ForegroundColor = ConsoleColor.Gray;
                asunto = Console.ReadLine();
                Console.WriteLine();
                Console.ForegroundColor = ConsoleColor.Cyan;
                Console.Write("\t\tMensaje: ");
                Console.ForegroundColor = ConsoleColor.Gray;
                //mensaje = Console.ReadLine();

                #region Enviar más de 255 caracteres.
                // #########################################################################
                Stream inputStream = Console.OpenStandardInput();
                byte[] buffer = new byte[MAXIMA_LONGITUD];
                int numerosBytesLeidos = inputStream.Read(buffer, 0, MAXIMA_LONGITUD);
                char[] chars = Console.InputEncoding.GetChars(buffer, 0, numerosBytesLeidos);
                mensaje = new string(chars);
                // #########################################################################
                #endregion

                Console.WriteLine();
                Console.ForegroundColor = ConsoleColor.DarkCyan;
                Console.Write("\t\tCantidad de texto introducido: ");
                Console.ForegroundColor = ConsoleColor.Gray;
                Console.WriteLine(mensaje.Length);

                MailMessage correo = new MailMessage(usuario, destinatario, asunto, mensaje)
                {
                    // Enviar textos con tildes.
                    BodyEncoding = Encoding.UTF8
                };

                SmtpClient servidor = new SmtpClient("smtp.gmail.com")
                {
                    Port = 587
                };
                NetworkCredential credenciales = new NetworkCredential(usuario, contraseña);
                servidor.Credentials = credenciales;
                servidor.EnableSsl = true;

                Console.WriteLine();
                Console.ForegroundColor = ConsoleColor.Yellow;
                Console.WriteLine("\t\tEnviando correo...");
                servidor.Send(correo);
                Console.WriteLine();
                Console.ForegroundColor = ConsoleColor.Green;
                Console.WriteLine("\t\tCorreo enviado satisfactoriamente.");
                correo.Dispose();
                Console.CursorVisible = false;
                Console.ReadKey();
            }
            catch (Exception ex)
            {
                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine("ERROR: \n");
                Console.WriteLine("\t\t" + ex.Message);
                Console.WriteLine();
                Console.ForegroundColor = ConsoleColor.Yellow;
                Console.WriteLine("\t\tNo se ha enviado el correo.");
                Console.ReadKey();
            }

        }

        // A la hora de introducir la contraseña, se sustituye por asterístos (*) en pantalla.
        public static string LeerPassword()
        {
            ConsoleKeyInfo cki;
            StringBuilder sb = new StringBuilder();
            int contador = 0;

            do
            {
                cki = Console.ReadKey(true);
                if (cki.Key != ConsoleKey.Enter)
                {

                    sb.Append(cki.KeyChar);
                    if (contador < 1)
                    {
                        Console.Write("*");
                    }
                    contador++;
                }

                else
                {
                    break;
                }

            } while (true);
            Console.WriteLine();
            return sb.ToString();
        }
    }
}


Feliz año 2.022. ;)

si tenes algun codigo para subirlo a una web en php o html pasamelo y lo pruebo para compartirlo en caso de que funsione, de esos codigos no tengo idea como se le hace, saludos
(•_•)

El código que tengo por ahora es este de aquí abajo pero funciona raro.

Antes que nada, usar gmail y activarlo.
// Activar / desactivar Acceso de aplicaciones poco seguras en Google.
// No tienes permitido ver enlaces. Registrate o Entra a tu cuenta

// Descargar onePOP, compilar su dll y añadirlo en referencias.
// No tienes permitido ver enlaces. Registrate o Entra a tu cuenta

Código: text


using System;
using System.Collections.Generic;
using OpenPop.Pop3;
using OpenPop.Mime;
using System.Text.RegularExpressions;
using System.Timers;

namespace Recibir_email_Consola_05
{
    class Program
    {

        // Disparador de eventos del timer. Dispara cada cierto tiempo por el timer.
        public static void DisparadorEventosTimer(object source, ElapsedEventArgs e)
        {
            Console.SetCursorPosition(0, 5);
            Console.Out.WriteLine("Evento: ");

            ConnectPop3 oC = new ConnectPop3();

            List<OpenPop.Mime.Message> lstMessages = oC.GetMessages();


            if (lstMessages != null)
            {

                foreach (var oMessage in lstMessages)
                {
                    Console.SetCursorPosition(0, 6);
                    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 == "[email protected]") || (emailCompleto == "[email protected]"))
                    {
                        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>> No se puede encontrar un cuerpo de versión de texto en este mensaje para mostrar <<OpenPop>>");
                                }
                            }
                        }
                    }

                    // No. Entonces,ignorará los email no filtrados.
                    else
                    {
                        Console.WriteLine("No ha pasado el filtro y no se leerá ningún email.");
                    }
                }
            }

            // Letras amarillas.
            //Console.ForegroundColor = ConsoleColor.Yellow;
            //Console.WriteLine();
            //Console.WriteLine("FIN DEL PROGRAMA.");
        }

        static void Main(string[] args)
        {
            // Título de la ventana.
            Console.Title = "Recibir e-mail con Consola C#";

            // Tamaño de la ventana, x, y, o ancho y alto.
            const byte ancho = 80;
            const byte alto = 40;
            Console.SetWindowSize(ancho, 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
            {
                Timer miTimer = new Timer
                {
                    Enabled = true
                };
                miTimer.Elapsed += new ElapsedEventHandler(DisparadorEventosTimer);
                miTimer.Interval = 10000; // 10 segundos.

                // Pulse cualquier tecla para salir.
                Console.ReadKey();
            }

            // Cualquier error mostrado en mensaje y de color rojo.
            catch (Exception ex)
            {
                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine();
                Console.WriteLine(ex);

                // Pulse cualquier tecla para salir.
                Console.ReadKey();
            }
        }
    }

    public class ConnectPop3
    {
        public string email = "[email protected]";
        public string contraseña = "g0923490xgh0945g450Xj4025g";
        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;
            }
        }
    }
}