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.