RSS 2.0 Atom 1.0 CDF  
JASoft.org - Cómo enviar correo electrónico por código usando cuentas de GMail
El blog de José Manuel Alarcón Aguín. Programación .NET y mucho más...
 

Enviar correo electrónico desde código .NET usando un servidor SMTP es muy fácil gracias al uso de la clase System.Net.Mail.MailMessage.

Un servidor SMTP normal trabaja a través del puerto 25 y sólo necesitaremos tener unas credenciales válidas en el mismoq ue nos permitan enviar correo. Lo habitual en una aplicación cualquiera es usar el servidor SMTP de nuestra cuenta de correo favorito con esta técnica sin problemas.

Pero ¿qué pasa si nuestra cuenta de correo es de GMail? Pues que la técnica convencional no funcionará. El motivo es que GMail usa un puerto diferente y además precisa el uso de una conexión cifrada con SSL para seguridad, por lo que el código normal que vas a encontrar por ahí no te servirá.

¿Qué puedo hacer entonces?

La clase SmtpClient nos ayudará para conseguirlo. Básicamente se trata de indicarle un par de parámetros extra para indicar el puerto a utilizar y la obligatoriedad de SSL. Lo demás lo hará esta clase por nosotros.

El siguiente código en C# ilustra un ejemplo de cómo enviar un correo de prueba a través de GMail usando una aplicación de consola:

using System;
using System.Collections;
using System.Net;
using System.Net.Mail;
using System.Net.Mime;

public class EjemploCorreoGMail
{
    public static void Main()
    {
            System.Net.Mail.MailMessage msg = new System.Net.Mail.MailMessage();
            msg.To.Add("destinatario@dominio.com");
            msg.From = new MailAddress("micuenta@gmail.com", "Tu Nombre", System.Text.Encoding.UTF8);
            msg.Subject = "Prueba de correo a GMail";
            msg.SubjectEncoding = System.Text.Encoding.UTF8;
            msg.Body = "Cuerpo del mensaje";
            msg.BodyEncoding = System.Text.Encoding.UTF8;
            msg.IsBodyHtml = false

            //Aquí es donde se hace lo especial
            SmtpClient client = new SmtpClient();
            client.Credentials = new System.Net.NetworkCredential("micuenta@gmail.com", "miclave");
            client.Port = 587;
            client.Host = "smtp.gmail.com";
            client.EnableSsl = true; //Esto es para que vaya a través de SSL que es obligatorio con GMail
            try
            {
                        client.Send(msg);
            }
            catch (System.Net.Mail.SmtpException ex)
            {
                        Console.WriteLine(ex.Message);
                        Console.ReadLine();
            }
    }
}

 

Saturday, June 23, 2007 10:15:22 AM (Hora de verano romance, UTC+02:00)  #    Comments [8]   ASP.NET | Programación  |  Trackback
Wednesday, June 27, 2007 12:38:56 PM (Hora de verano romance, UTC+02:00)
Y mi pregunta es... Y para hacerlo con el equipo local? Con el antiguo namespace System.Web.Mail se podía hacer sin tener que configurar un SMTP remoto...

¿Sabes como?

Saludos
Wednesday, June 27, 2007 12:57:09 PM (Hora de verano romance, UTC+02:00)
Es que realmente la cosa no tiene que ver con lo anterior.

De todos modos para enviar con el equipo local es el mismo código pero usando la IP 127.0.0.1 y el puerto normal (25), sin SSL.

Eso sí, hay que asegurarse de tener los permisos adecuados para poder enviar en local. Normalmente no será necesario pasarle credenciales si dejas hacer relaying desde la IP local.

Saludos

JM.
Thursday, June 28, 2007 11:54:59 AM (Hora de verano romance, UTC+02:00)
Sipi, no lo recuerdo de memoria pero si te vas a los ajustes y preferencias de GMail te lo dice.

Saludos

JM
Wednesday, July 25, 2007 11:24:48 PM (Hora de verano romance, UTC+02:00)
Buenas tardes, este pequeño programa es bastante útil, pero quisiera saber ¿qué modificaciones le debo hacer para usarlo con hotmail, yahoo, etc... y para agregar datos adjuntos? Muchas gracias por su atención.
Ricardo
Saturday, August 25, 2007 10:33:24 PM (Hora de verano romance, UTC+02:00)
El codigo esta muy bueno, pero como agrego un archivo adjunto?
Pablo Hoffmann
Thursday, November 08, 2007 5:18:33 PM (Hora estándar romance, UTC+01:00)
quizas ya lo hayas solucionado, pero para adjuntar un archivo en un mails:
Attachment adjunto1 = new Attachment(" -->path al archivo que quieras adjuntar<-- ");
correo.Attachments.Add(adjunto1);

la clase Attachment está en el espacio de nombre System.Net.Mail;
Es decir en tu clase tenés que poner using System.Net.Mail;

Espero que sea de ayuda
salu2
tete
Monday, February 18, 2008 6:26:47 AM (Hora estándar romance, UTC+01:00)
gracias, solucionado
pablo hoffmann
Monday, May 12, 2008 7:32:04 PM (Hora de verano romance, UTC+02:00)
hola

sabes estoy tratando con el mismo codigo pero en visual basic , es casi igual
cambie al port 587 porq investigue y para gmail hay que utilizar este, Cambie las opciones de gmail tambien , pero nada no manda el correo

cual sera el o los problemas que tengo

karensol
Name
E-mail
Home page

Comment (Some html is allowed: a@href@title, b, i, strike, strong, u) where the @ means "attribute." For example, you can use <a href="" title=""> or <blockquote cite="Scott">.  

Enter the code shown (prevents robots):

Live Comment Preview
Copyright © 2008 José Manuel Alarcón Aguín. All rights reserved.