PDA

Ver la versión completa : Filtrado y recibos de entradas de correo



Meta
09-01-2022, 17:30
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

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. ;)