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



01 mayo 2008

Presentación

Hola a todos, les doy la bienvenida a lo que será mi segundo blog, en el cual escribiré post desde mi lado técnico, mayoritariamente sobre las tecnologías de Microsoft.

La idea de este espacio, será la de ir poniendo las cosas interesantes o difíciles que vaya descubriendo en mi andar por mi camino profesional, para devolver un poco lo que internet y San Google nos da en cada petición de auxilio y también como un repositorio a donde buscar las cosas que ya "olvide".

Como siempre los comentarios serán bien recibidos y espero que encuentren algo interesante aquí... por lo menos alguna sonrisa…


Que tengan un lindo día…


Marce