Como enviar un correo con C#

La forma de como enviar un correo con c# es mediante las librerías de .Net como MailMessage y SmtpClient, permitiendo personalizar los correos.

Para enviar un correo desde C# primero debemos de tener una cuenta de correo que permita ser utilizado por otras aplicaciones.

Con la información de la cuenta de correo tenemos dos opciones de configuración, desde C# agregando los datos o desde la web.config. En este tema veremos cómo enviar un correo realizando las configuraciones desde C# sin tocar la web.config.

Datos de la cuenta de correo

De nuestro proveedor de correos debemos de obtener la siguiente información que utilizaremos en la configuración de c#.

  • Correo electrónico
  • Contraseña
  • Host de salida
  • Puerto
  • Si o no acepta ssl

Enviar correo con C#

Antes de empezar a colocar el código para el envio de correos debemos de agregar los espacios de nombres necesarios.

using System.Net.Mail;
using System.Configuration;
using System.Web.Configuration;
using System.Net.Configuration;
using System.Net;
using System.Security.Cryptography.X509Certificates;
using System.Net.Security;

Ya que tenemos listo el punto anterior, podemos utilizar el siguiente código para enviar los correos.

MailMessage correo = new MailMessage();
correo.From = new MailAddress("[email protected]", "Kyocode", System.Text.Encoding.UTF8);//Correo de salida
correo.To.Add("[email protected]"); //Correo destino?
correo.Subject = "Correo de prueba"; //Asunto
correo.Body = "Este es un correo de prueba desde c#"; //Mensaje del correo
correo.IsBodyHtml = true;
correo.Priority = MailPriority.Normal;
SmtpClient smtp = new SmtpClient();
smtp.UseDefaultCredentials = false;
smtp.Host = "smtp.gmail.com"; //Host del servidor de correo
smtp.Port = 25; //Puerto de salida
smtp.Credentials = new System.Net.NetworkCredential("[email protected]", "*******");//Cuenta de correo
ServicePointManager.ServerCertificateValidationCallback = delegate (object s, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) { return true; };
smtp.EnableSsl = true;//True si el servidor de correo permite ssl
smtp.Send(correo);

2- Asignación del correo de salida y el nombre del correo (visible para el usuario).
3- Cuenta de correo destino.
4- Asunto del correo.
5- Cuerpo del mensaje (Texto plano o HTML si la propiedad IsBodyHtml = true)
10- Host del servidor de correo.
11- Puerto de salida del servidor de correo.
12- Correo y contraseña para autentificación.
14- True si el servidor de correo permite ssl y false si no lo permite.
15- Enviar el correo creado al destinatario.

El correo se envia inmediatamente después de crearse, revisa la cuenta de correo destino, podrás algo similar a esto.

Como enviar un correo con C #

Con los puntos descritos anteriormente puedes personalizar el correo que estas enviando de acuerdo al cliente.

Observaciones

Es importante mencionar que con las cuentas convencionales (Gmail, Hotmail, etc.) no puedes enviar demasiados correos.

Además, no puedes enviar correos masivos simultáneamente debido a que puede registrar la cuenta como spam.

Para evitar esto, busca un servidor de correo que permita el envio masivo desde otras aplicaciones que te ayudan a evitar el spam.

Por supuesto, la mayoría de las servidoras de correo tiene limitaciones, como la que no puedes enviar a más de 10 correos por minuto, por ejemplo. Para estos casos debes de planear bien como ejecutar las salidas de los correos, sobre todo lo que te ofrece el servidor de correo que estas utilizando.

21 Comments

    1. Para adjuntar, debes tener cargado el archivo en el servidor, ademas debes agregar la siguiente linea de codigo:
      correo.Attachments.Add(new Attachment(GetStreamFile(urlAdjunto), nombreArchivo, "application/pdf"));
      urlArchivo: ubicacion en el servidor del archivo.
      nombreArchivo: nombre del documento
      application/pdf : indicar el tipo de archivo que se esta adjuntando.
      GetStreamFile, es un metodo que se utiliza para convertir el archivo a bytes.

      public Stream GetStreamFile(string filePath)
      {
      using (FileStream fileStream = File.OpenRead(filePath))
      {
      MemoryStream memStream = new MemoryStream();
      memStream.SetLength(fileStream.Length);
      fileStream.Read(memStream.GetBuffer(), 0, (int)fileStream.Length);
      return memStream;
      }
      }

    1. Posiblemente los datos del smtp para el envio de correos no son correctos o la otra opción es que el servidor de correos esta bloqueando las salidas(si usas gmail, debes permitir acceso de aplicaciones menos seguras).

      1. Con una cuenta de gmail funciona bien;
        solo ten en cuenta de debes realizar las configuraciones en gmail para que te permita enviar correos desde scripts, de lo contrario no saldrán los correos.

  1. Hola que tal, disculpa, yo estoy elaborando un proyecto, que cuando se modifique una celca de un excel, se mande un correo, alguna idea de ccomo se puede hacer esto?

    1. Hola Jose, me imagino dos posibles opciones para lo que comentas.
      La primera que al cargar nuevamente el excel se envie un correo (el único problema es que no sabes que se modifico);
      la segunda es que leas el excel, si la celda que te interesa si cambio, envías el correo.

  2. Hola. cómo hago para guardar el email enviado en un archivo .msg o por el estilo? Así me queda una copia del envío.

    1. Guardarlo como archivo de correo desconozco si es posible con las librerías de .net o puedes crear un archivo de texto .txt con la informacion; sin embargo, puedes almacenar todo el mensaje y datos de contacto en la BD como respaldo.

  3. Hola, Disculpa que formato debe de llevar la URL del archivo, tengo problemas con es parte mas que todo con las barras

  4. No me deja enviar el correo, ha enviado 8 en dos dias y ya no evia nada, no es que no se recivan, directamente no los envia, como lo soluciono?

  5. Yo tenia una aplicacion que envia correos con gmail pero he visto que ahora esta bloqueado el servicio, sabras de algun otro proveedor de correos que permita utilizar aplicaciones no seguras como lo hacia gmail anteriormente. gracias.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *