Hero

Enviar correo electrónico mediante SMTP en C#

Febrero 28, 2013

kenneth
C#
Microsoft
.Net

En ciertas ocaciones cuando estamos desarrollando en C# es necesario enviar un correo electrónico a un usuario final para notificarlo, entonces para esta tarea podríamos utilizar el protocolo SMTP para cumplir esta cometido.

Ahora bien, Microsoft nos proporciona en su Framework las clases nativas con las cuales podemos crear y enviar un correos electrónicos.

  1. Definir instancia de la clase MailMessage.

Debemos crear una instancia de la clase MailMessage y definirla con los siguientes atributos:

  • To: Dirección de corre electrónico donde enviaremos el correo electrónico, podemos utilizar el metodo “add” para incluirlo.
  • From: Dirección de correo electrónico desde donde se enviara el correo electrónico.
  • Subject: Define el título del correo electrónico.
  • Body: Define el cuerpo del correo electrónico.
  • IsBodyHtml: Indica si el cuerpo del correo electrónico esta es formato HTML.
  • Priority: Definir la prioridad del correo electrónico (esto es ignorado por casi todos los servidores de correo electrónico).

El siguiente código se puede ver una implementación de ejemplo:

<pre title="Creando objeto MailMessage">MailMessage email = new MailMessage();
email.To.Add(new MailAddress("example@example.com"));
email.From = new MailAddress("example2@example.com");
email.Subject = "Asunto ( " + DateTime.Now.ToString("dd / MMM / yyy hh:mm:ss") + " ) ";
email.Body = "Cualquier contenido en <b>HTML</b> para enviarlo por correo electrónico.";
email.IsBodyHtml = TRUE;
email.Priority = MailPriority.Normal;
  1. Definir instancia de SMTP

Se definirá una instancia de la clase SmtpClient en la cual utilizaremos los siguientes atributos:

  • Host: El servidor anfrition que enviara el correo electrónico.
  • Port: El numero de puerto de salida del correo electrónico (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 electrónico por medio del protocolo SMTP, este atributo recibe un objeto de la clase NetworkCredential.

Ademas para este ejemplo crearemos una variable tipo string de nombre output donde mostraremos un mensaje al usuario final, el código se vera como el siguiente listado:

<pre title="Definir objeto SmtpClient ">SmtpClient smtp = new SmtpClient();
smtp.Host = "example.com";
smtp.Port = 2525;
smtp.EnableSsl = FALSE;
smtp.UseDefaultCredentials = FALSE;
smtp.Credentials = new NetworkCredential("email_from@example.com", "contraseña");

string output = null;

Posteriormente se usara el metodo send(MailMessage mailMessage) para enviar el correo electrónico, este metodo recibe como parámetro un objeto de tipo MailMessage, y luego es necesario liberar todos los recursos utilizados por el objeto *MailMessage y de esta forma liberar memoria.

Para finalizar se imprimirá el valor que contenga la variable output, en este ejemplo utilizaremos un bloque try-catch para ejecutar estas ultimas instrucciones y manejar si ocurre una excepción, el código quedaría de la siguiente manera.

<pre title="Enviar correo electronico">try{
 smtp.Send(email);
 email.Dispose();
 output = "Corre electrónico fue enviado satisfactoriamente.";
}
catch (Exception ex)
{
 output = "Error enviando correo electrónico: " + ex.Message;
}

Console.WriteLine(output);

Espero que les sea de mucha ayuda,

Saludos,

Recibe consejos y oportunidades de trabajo 100% remotas y en dólares de weKnow Inc.