jueves, 28 de abril de 2011

Enviar correo con SMTP en C#.

image
El envió de correo por medio de SMTP (Simple Mail Transfer Protocol) desde nuestra aplicación win y web form es muy sencillo, para ello necesitamos dos librerías importantes para lograrlo: System.Net.Mail y System.Net en nuestro código, utilizando un Using.

Para ello necesitamos un servidor de correo, podemos utilizar los servidores de Gmail, Hotmail, o si tenemos uno propio de igual forma. (les dejo el SMTP de estos dos con sus respectivos puertos)
/*
* Cliente SMTP
* Gmail: smtp.gmail.com puerto:587
* Hotmail: smtp.liva.com puerto:25
*/

Bien adentrándonos a lo importante, crearemos una nueva clase llamada Correos, en la cual are una instancia de SmtpClient para poder trabajar con nuestro cliente de correo, la cual utilizaremos mas adelante.
SmtpClient server = new SmtpClient("smtp.gmail.com", 587);
Ahora utilizare el método publico Correos donde ya empezaremos a proporcionarle la información necesaria para el envió,  donde ingresaremos la cuenta de correo origen o credencial de una cuenta existente.

server.DeliveryMethod = SmtpDeliveryMethod.Network;
server.Credentials = new NetworkCredential ("CorreoOrigen", "Contraseña");
server.EnableSsl = true;

Nota: podemos dejar fijo el correo y la contraseña, o bien hacer que nuestros método reciba estos dos parámetros cuando se invoca la clase.
Como paso siguiente declare un método llamada MandarCorreo el cual recibirá el cuerpo del mensaje de tipo MailMessage.
server.Send(mensaje);

Y enviaremos el correo. mensaje es mi variable donde guardo el cuerpo del correo, puede ser un texto plano o bien podemos elaborar un cuerpo mas sofisticado, armándolo por medio de código HTML, con imágenes, link, y dándole un formato mas personalizado, para ello lo hacemos de la siguiente forma:

mensaje.Subject = "Correo Prueba"; // Es el titulo del correo o asunto.
mensaje.Body = cuerpo; // Aquí utilizo una variable de tipo string donde guardo mi codigo html o texto plano que viene siendo el cuerpo del correo.
mensaje.IsBodyHtml = true; // Esta instrucción es para indicarle a nuestro código que acepte el cuerpo del correo en formato HTML.
mensaje.BodyEncoding = System.Text.Encoding.UTF8; // Por ultimo solo podemos la codificación del correo, por eso de los acentos. con esto tenemos armado nuestra variable ahora solo faltaría invocar nuestro método y enviar el correo.


Bien después de esta breve explicación les dejo el código que utilizo.

class Correos
{
     SmtpClient server = new SmtpClient("smtp.gmail.com", 587);
    
public Correos()
   {  
   server.DeliveryMethod = SmtpDeliveryMethod.Network;
   server.Credentials = new NetworkCredential("CorreoOrigen", "Contraseña");
   server.EnableSsl = true;
   }
public void MandarCorreo(MailMessage mensaje)
{
     try
        {
         server.Send(mensaje);
        }
     catch (SmtpException smtpe)
        {
         throw smtpe;
        }
}


Con esto ya solo invocamos en nuestro código nuestra clase de la siguiente forma: y le pasamos el parámetro con nuestro mail ya construido.
Correos mail = new Correos();
mail.MandarCorreo(mensaje);

Espero les sirva este pequeño ejemplo, si tienen alguna duda no duden en comentarlo y con gusto les daré una respuesta.

Atte.
LSCA Gustavo Ortiz Gamez.

No hay comentarios:

Publicar un comentario