Para enviar un email desde .Net, lo podemos hacer muy fácil, ya que .Net ya nos proporciona lo necesario para realizarlo rápidamente.
A continuación plasmo el código de una clase improvisada que sirve para enviar el mail y a su vez tiene comentarios que van explicando parte por parte:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Mail;
using System.Text;
using System.Threading.Tasks;
namespace EnviaMail
{
class Mail
{
string From = ""; //de quien procede, puede ser un alias
string To; //a quien vamos a enviar el mail
string Message; //mensaje
string Subject; //asunto
List<string> Archivo = new List<string>(); //lista de archivos a enviar
string DE = "[email protected]"; //nuestro usuario de smtp
string PASS = "tupass"; //nuestro password de smtp
System.Net.Mail.MailMessage Email;
public string error = "";
/// <summary>
/// constructor
/// </summary>
/// <param name="FROM">Procedencia</param>
/// <param name="Para">Mail al cual se enviara</param>
/// <param name="Mensaje">Mensaje del mail</param>
/// <param name="Asunto">Asunto del mail</param>
/// <param name="ArchivoPedido_">Archivo a adjuntar, no es obligatorio</param>
public Mail(string FROM, string Para, string Mensaje, string Asunto, List<string> ArchivoPedido_ = null)
{
From = FROM;
To = Para;
Message = Mensaje;
Subject = Asunto;
Archivo = ArchivoPedido_;
}
/// <summary>
/// metodo que envia el mail
/// </summary>
/// <returns></returns>
public bool enviaMail()
{
//una validación básica
if (To.Trim().Equals("") || Message.Trim().Equals("") || Subject.Trim().Equals(""))
{
error = "El mail, el asunto y el mensaje son obligatorios";
return false;
}
//aqui comenzamos el proceso
//comienza-------------------------------------------------------------------------
try
{
//creamos un objeto tipo MailMessage
//este objeto recibe el sujeto o persona que envia el mail,
//la direccion de procedencia, el asunto y el mensaje
Email = new System.Net.Mail.MailMessage(From, To, Subject, Message);
//si viene archivo a adjuntar
//realizamos un recorrido por todos los adjuntos enviados en la lista
//la lista se llena con direcciones fisicas, por ejemplo: c:/pato.txt
if (Archivo != null)
{
//agregado de archivo
foreach (string archivo in Archivo)
{
//comprobamos si existe el archivo y lo agregamos a los adjuntos
if (System.IO.File.Exists(@archivo))
Email.Attachments.Add(new Attachment(@archivo));
}
}
Email.IsBodyHtml = true; //definimos si el contenido sera html
Email.From = new MailAddress(From); //definimos la direccion de procedencia
//aqui creamos un objeto tipo SmtpClient el cual recibe el servidor que utilizaremos como smtp
//en este caso me colgare de gmail
System.Net.Mail.SmtpClient smtpMail = new System.Net.Mail.SmtpClient("smtp.gmail.com");
smtpMail.EnableSsl = false;//le definimos si es conexión ssl
smtpMail.UseDefaultCredentials = false; //le decimos que no utilice la credencial por defecto
smtpMail.Host = "smtp.gmail.com"; //agregamos el servidor smtp
smtpMail.Port = 465; //le asignamos el puerto, en este caso gmail utiliza el 465
smtpMail.Credentials = new System.Net.NetworkCredential(DE, PASS); //agregamos nuestro usuario y pass de gmail
//enviamos el mail
smtpMail.Send(Email);
//eliminamos el objeto
smtpMail.Dispose();
//regresamos true
return true;
}
catch (Exception ex)
{
//si ocurre un error regresamos false y el error
error = "Ocurrio un error: " + ex.Message;
return false;
}
return false;
}
}
}
Para utilizar la clase anterior lo podemos hacer de la siguiente manera:
//creamos nuestra lista de archivos a enviar
List<string> lstArchivos = new List<string>();
lstArchivos.Add("c:/archivo1.txt");
lstArchivos.Add("c:/archivo2.txt");
//creamos nuestro objeto de la clase que hicimos
Mail oMail = new Mail("[email protected]", "[email protected]",
"hola", "un mensaje bien chevere",lstArchivos);
//y enviamos
if (oMail.enviaMail())
{
Console.Write("se envio el mail");
}
else
{
Console.Write("no se envio el mail: "+oMail.error);
}
Nota: si utilizan una cuenta Gmail, a veces va a tardar en conectarse, esto es porque Gmail tiene muchas restricciones de conexiones anónimas, en cambio sí utilizan una conexión smtp propia, no debe darles problema.