using System;
using System.IO;
using System.Net;
using System.Net.Mail;
using System.Text;
namespace Enviar_email_Consola_08
{
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 y versión del .Net usando.
Console.Title = "Gestor correo electrónico Hotmail. "
+ typeof(string).Assembly.ImageRuntimeVersion;
// Tamaño de la ventana, x, y, o ancho y alto.
const byte ANCHO_X = 70, ALTO_Y = 25;
Console.SetWindowSize(ANCHO_X, ALTO_Y);
// 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(); // Sin codificar.
#region Enviar más de 255 caracteres.
// #########################################################################
Stream entradaDeDatos = Console.OpenStandardInput();
byte[] buffer
= new byte[MAXIMA_LONGITUD
]; int numerosBytesLeidos = entradaDeDatos.Read(buffer, 0, MAXIMA_LONGITUD);
char[] chars = Console.InputEncoding.GetChars(buffer, 0, numerosBytesLeidos);
mensaje
= new string(chars
).Trim(); // El .Trim() para quitar \r\n. // #########################################################################
#endregion
Console.WriteLine();
Console.ForegroundColor = ConsoleColor.DarkCyan;
Console.Write("\t\tCantidad de caracteres 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.office365.com") // Antes era "smtp.live.com". {
Port = 587 // 25 ó 465.
};
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\t¡Correo 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();
}
}
#region Asterisco para contraseñas.
// 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();
}
#endregion
}
}