(https://i.postimg.cc/SxCR2tFr/Hacker-Green.jpg) (https://postimages.org/)
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.
https://myaccount.google.com/lesssecureapps (https://myaccount.google.com/lesssecureapps)
Código C#:
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.
// https://myaccount.google.com/lesssecureapps
// Descargar onePOP, compilar su dll y añadirlo en referencias.
// https://github.com/foens/hpop
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;
}
}
}
}