Enviar correo electrnico desde C# (Hotmail/outlook)
Imaginemos que estamos que estamos haciendo un proyecto en donde los reportes no slo se deban mandar a la impresora, sino que desde el mismo sistema sea posible mandarlo por correo electrnico, es una realidad que estas prcticas cada vez se vuelves mas comunes, tener sistemas verstiles que permitan hacer diferentes operaciones sin necesidad de salirse del mismo. Protocolo SMTP El Simple Mail Transfer Protocol (SMTP) (Protocolo para la transferencia simple de correo electrnico), es un protocolo de la capa de aplicacin. Protocolo de red basado en texto, utilizados para el intercambio de mensajes de correo electrnico entre computadoras u otros dispositivos (PDA, telfonos mviles, etc.). Est definido en el RFC 2821 y es un estndar oficial de Internet. Clase System.Net.Mail en C# Microsoft proporciona en su Framework las clases nativas con las cuales podemos crear y enviar un correo electrnico. Clase MailMessage. Debemos crear una instancia de la clase MailMessage y definirla con los siguientes atributos: To: Direccin de corre electrnico donde enviaremos el correo electrnico, podemos utilizar el metodo "add" para incluirlo. From: Direccin de correo electrnico desde donde se enviara el correo electrnico. Subject: Define el ttulo del correo electrnico. Body: Define el cuerpo del correo electrnico. IsBodyHtml: Indica si el cuerpo del correo electrnico esta es formato HTML. Priority: Definir la prioridad del correo electrnico (esto es ignorado por casi todos los servidores de correo electrnico). Definir instancia de SMTP Se definir una instancia de la clase SmtpClient en la cual utilizaremos los siguientes atributos: Host: El servidor anfitrin que enviara el correo electrnico. Port: El numero de puerto de salida del correo electrnico (por defecto es el puerto 25). EnableSsl: Indicador si esta habilitado el certificado SSL. UseDefaultCredentials: Indicador si se utilizaran los credenciales predeterminados. Credentials: Credenciales a utilizar para enviar el correo electrnico por medio del protocolo SMTP, este atributo recibe un objeto de la clase NetworkCredential. En la siguiente imagen se muestran algunos parmetros de configuracin para diferentes servidores.
Aurelio Lpez Ovando 2
Posteriormente se usara el metodo send(MailMessage mailMessage) para enviar el correo electrnico, este mtodo recibe como parmetro un objeto de tipo MailMessage, y luego es necesario liberar todos los recursos utilizados por el objeto MailMessage y de esta forma liberar memoria.
Enviar un correo desde C# Comenzamos creando un nuevo proyecto WPF desde C# al cual llamaremos Mail.
Creamos un formulario como se muestra:
Aurelio Lpez Ovando 3
Creamos una nueva clase a la que llamaremos Mail (Proyecto Agregar clase) y le ponemos el siguiente cdigo:
using System; using System.Net.Mail; using System.Net; using System.Windows;
namespace MailWPF { class SendMail { string emisor; public string Emisor { get { return emisor; } set { emisor = value; } }
string pwd; public string Pwd { get { return pwd; } set { pwd = value; } }
//Constructor public SendMail(string de, string pass) { emisor = de; pwd = pass; }
/// <summary> /// Se enva un correo electronico con texto simple /// </summary> /// <param name="destinatario">Quien escribe el correo</param> /// <param name="asunto">Asunto del correo</param> /// <param name="correo">Cuerpo del correo (contenido)</param> public void sendMail(string destinatario, string asunto, string correo) { MailMessage msg = new MailMessage();
//Quien escribe al correo msg.From = new MailAddress(emisor); //A quien va dirigido msg.To.Add(new MailAddress(destinatario)); //Asunto msg.Subject = asunto; //Contenido del correo msg.Body = correo;
catch (Exception ex) { MessageBox.Show("Error al enviar el correo " + ex.Message); } } } }
Aurelio Lpez Ovando 4
La clase tiene dos atributos (privados) que son el emisor y la contrasea de la cuenta que enva el correo (que son inicializadas en el constructor) y un mtodo que recibe dos parmetros que corresponden a quien recibe, el asunto y el contenido del correo. Mail
Nota: En el cdigo se ha borrado la contrasea, pero se entiende que el dato es la contrasea de la cuenta. En este ejemplo desde la cuenta ceicampeche@hotmail.com se est enviando un correo a cualquier direccin existente que se escriba en el textobox txTo del formulario.
Vemos que el correo ha llegado satisfactoriamente a la bandeja de entrada.
private void btnSend_Click(object sender, RoutedEventArgs e) { SendMail m = new SendMail("ceicampeche@hotmail.com","vigil4nt3"); m.sendMail(txTo.Text, txSubject.Text, txBody.Text); }