Datos personales

Mi foto
Colonia Caroya, Córdoba, Argentina
Ingeniero en Sistemas de Información

07 mayo 2008

Enviando un Email desde ASP.Net

Una de las cosas que abruma a los desarrolladores al ingresar al mundo de .net es la gran cantidad de espacios de nombres y clases que posee el framework. Toda esa estructura ordena y esconde muchas funcionalidades, con el propósito de hacer más productivo al programador, al no tener que codificar cosas que no hacen a la esencia del negocio ni tener que recurrir a librerías de terceros o propias, ni a San Google.

Una de esas tareas algo rutinarias es la de enviar un email, algo que antes era muy tedioso, en vb6 implicaba muchas líneas de código, usar el control winsock que no siempre estaba instalado en la pc de desarrollo o en la del cliente, hacer conversiones en base 64, manejar varios detalles del proceso de comunicación con el servidor de correo, y un largo etc. que aunque servia para aprender muchas cosas sobre lo que pasa al enviar un email, hacia perder mucho tiempo y ganar posibilidad de errores.

Ahora con el Framework 2.0 o superiores (en el 1.1 también pero no como se explica aquí), toda esta funcionalidad de enviar un email ha sido encapsulada en el siguiente namespace: System.Net.Mail

Bueno, basta de chachara, y manos a la obra...

Los pasos básicamente son estos:

  • Crear un mensaje a enviar del tipo MailMessage.
  • Asignar las propiedades del mensaje (emisor, destinatarios, asunto,contenido,etc).
  • Si el servidor de correo necesita autenticación crear un objeto del tipo NetworkCredential (el cual contendrá el usuario y el password).
  • Crear una instancia de SmptClient para enviar el mensaje.
  • Enviar el mensaje....

Transformemos esos pasos a C#...

static private void SendEmail(string _email,string _subject,string _body)
{
MailMessage _mail = new MailMessage();
_mail.To.Add(_email);
_mail.From = new MailAddress("email@yahoo.com.ar", "Marcelo Lauret", System.Text.Encoding.UTF8);
_mail.Subject = _subject;
_mail.SubjectEncoding = System.Text.Encoding.UTF8;
_mail.Body = _body;
_mail.BodyEncoding = System.Text.Encoding.UTF8;
_mail.IsBodyHtml = false;
SmtpClient _smtp = new SmtpClient();
_smtp.Credentials = new NetworkCredential("usuario", "password");

_smtp.Host = "smtp.mail.yahoo.com.ar";
//si es necesario definir un port
//_smtp.Port = 587;

//Esto es para que vaya a través de SSL por si usamos GMail por ej.
//_smtp.EnableSsl = true;

try
{
_smtp.Send(_mail);
Label1.Text = "El e-mail ha sido enviado con éxito";
}
catch (System.Net.Mail.SmtpException ex)
{
Label1.Text = ex.Message;
}
}



Consideraciones....


  • No olvidemos incluir estos namespace: using System.Net; using System.Net.Mail;


  • En el ejemplo usa el servidor de correo de Yahoo! Argentina, para el cual hay que tener una cuanta de email para utilizarlo y en la parte de credenciales poner su usuario y password.
  • Para utilizar una cuenta de Hotmail (@hotmail, @live.com.ar, @live.com, etc.) el smtp a utilizar es: smtp.live.com y hay que activar SSL (_smtp.EnableSsl = true;), recuerden ademas que al pasar las credenciales para autentificarse con el servicio smtp, deben pasar el usuario con el dominio de la cuenta, es decir "pepito@hotmail.com" y no solo "pepito". Con eso es suficiente para que funcione, sino funciona lo mas probable es que la cuenta con la que estan probando no tenga habilitado aun los protocolos SMTP/POP3, microsoft va habilitando estas caracteristicas por tandas, por lo general, las cuentas mas viejas y/o de ciertos paises tienen más prioridad para incorporar las mejoras.

  • Para otros servidores que no requieran autenticación comentar la linea de Credentials.

  • Para los servidores que requieran usar una comunicación por SSL descomentar la línea de smtp.EnableSsl.

  • En el ejemplo se asigna un destinatario a la propiedad To, esta propiedad es una colección del tipo MailAddressCollection, por eso usa el método Add, podemos agregar la cantidad de destinatarios que necesitemos usando ese método.

  • Al momento de usar el método Send lo ponemos en un Try-Catch porque se puede producir errores en el envió, por ej por requerir SSL.

  • La clase MailMessage pose algunos elementos interesantes, que permiten asignar la prioridad, Destinatarios de copia, Destinatarios de Copia Oculta y Attachments entre otras cosas, vale la pena revisarla...



Y eso es todo...



Que tengan un buen día...



Marce



4 comentarios:

Gustavo Bonansea dijo...

Marce, suerte con tu blog. Me gustó el ícono Powered By Raona :D

Anónimo dijo...

No me funciono :(
No se si sera porke mi correo de yahoo es de .mx pero ni cambiandole la extension del pais se envia T.T

Ayuda!

Atte.
WeRa

Marce dijo...

Wera, es probable que yahoo.com.mx tenga restringido el servicio smtp y pop. En un tiempo y quizas aun, estaba restringido en yahoo.com para los usuarios no pagos, deberias verificarlo entrando a tu correo desde la web y ver en opciones, la configuracion para usarlo desde outlook, ahi te dira si es posible usarlo y como es la configuracion. Otro detalle.. en las opciones de la web, debes habilitar el acceso pop3, que por defecto esta deshabilitado.... Prueba con eso..

Saludos

Marce.

Anónimo dijo...

Vaya! con un solo clic se soluciono todo mi problema! :D
Toy feliz!
Pero triste porque los codos de Hotmail no hacen lo mismo que los de yahoo y gmail :(
Malditos!
Pero ya hice mi pekeño programita gracias a ti! me caes bien!
agregame!

Atte.
Adriana :D
wera_loka86@hotmail.com