Envío de correo electrónico en .NET a través de Gmail

Resuelto Mike Wills asked hace 16 años • 26 respuestas

En lugar de depender de mi anfitrión para enviar un correo electrónico, estaba pensando en enviar los mensajes de correo electrónico utilizando mi cuenta de Gmail . Los correos electrónicos son correos electrónicos personalizados para las bandas que toco en mi programa.

¿Es posible hacer lo?

Mike Wills avatar Aug 28 '08 20:08 Mike Wills
Aceptado

Asegúrese de utilizar System.Net.Mail, no el obsoleto System.Web.Mail. Hacer SSL con System.Web.Mailes un gran lío de extensiones hacky.

using System.Net;
using System.Net.Mail;

var fromAddress = new MailAddress("[email protected]", "From Name");
var toAddress = new MailAddress("[email protected]", "To Name");
const string fromPassword = "fromPassword";
const string subject = "Subject";
const string body = "Body";

var smtp = new SmtpClient
{
    Host = "smtp.gmail.com",
    Port = 587,
    EnableSsl = true,
    DeliveryMethod = SmtpDeliveryMethod.Network,
    UseDefaultCredentials = false,
    Credentials = new NetworkCredential(fromAddress.Address, fromPassword)
};
using (var message = new MailMessage(fromAddress, toAddress)
{
    Subject = subject,
    Body = body
})
{
    smtp.Send(message);
}

Además, vaya a la página Cuenta de Google > Seguridad y observe la configuración Iniciar sesión en Google > Verificación en dos pasos .

  • Si está habilitado, deberá generar una contraseña que permita a .NET omitir la verificación en dos pasos. Para hacer esto, haga clic en Iniciar sesión en Google > Contraseñas de aplicaciones , seleccione aplicación = Correo y dispositivo = Computadora con Windows y, finalmente, genere la contraseña. Utilice la contraseña generada en la fromPasswordconstante en lugar de su contraseña estándar de Gmail.
  • Si está deshabilitado, entonces debe activar Acceso a aplicaciones menos seguras , ¡lo cual no se recomienda! Así que será mejor que habilites la verificación en dos pasos.
Domenic avatar Aug 28 '2008 14:08 Domenic

La respuesta anterior no funciona. Debe configurarlo DeliveryMethod = SmtpDeliveryMethod.Networko volverá con el error " el cliente no fue autenticado ". Además, siempre es una buena idea establecer un tiempo de espera.

Código revisado:

using System.Net.Mail;
using System.Net;

var fromAddress = new MailAddress("[email protected]", "From Name");
var toAddress = new MailAddress("[email protected]", "To Name");
const string fromPassword = "password";
const string subject = "test";
const string body = "Hey now!!";

var smtp = new SmtpClient
{
    Host = "smtp.gmail.com",
    Port = 587,
    EnableSsl = true,
    DeliveryMethod = SmtpDeliveryMethod.Network,
    Credentials = new NetworkCredential(fromAddress.Address, fromPassword),
    Timeout = 20000
};
using (var message = new MailMessage(fromAddress, toAddress)
{
    Subject = subject,
    Body = body
})
{
    smtp.Send(message);
}
Donny V. avatar Jan 28 '2009 22:01 Donny V.

Editar 2022 A partir del 30 de mayo de 2022, Google ya no admitirá el uso de aplicaciones o dispositivos de terceros que le soliciten iniciar sesión en su cuenta de Google utilizando únicamente su nombre de usuario y contraseña. Pero aún puedes enviar correos electrónicos a través de tu cuenta de Gmail.

  1. Vaya a https://myaccount.google.com/security y active la verificación en dos pasos . Confirme su cuenta por teléfono si es necesario.
  2. Haga clic en "Contraseñas de aplicaciones", justo debajo de la marca "Verificación en dos pasos".
  3. Solicite una nueva contraseña para la aplicación de correo. ingrese la descripción de la imagen aquí

¡Ahora simplemente use esta contraseña en lugar de la original de su cuenta!

public static void SendMail2Step(string SMTPServer, int SMTP_Port, string From, string Password, string To, string Subject, string Body, string[] FileNames) {            
            var smtpClient = new SmtpClient(SMTPServer, SMTP_Port) {
                DeliveryMethod = SmtpDeliveryMethod.Network,
                UseDefaultCredentials = false,
                EnableSsl = true
            };                
            smtpClient.Credentials = new NetworkCredential(From, Password); //Use the new password, generated from google!
            var message = new System.Net.Mail.MailMessage(new System.Net.Mail.MailAddress(From, "SendMail2Step"), new System.Net.Mail.MailAddress(To, To));
            smtpClient.Send(message);
    }

Úselo así:

SendMail2Step("smtp.gmail.com", 587, "[email protected]",
          "yjkjcipfdfkytgqv",//This will be generated by google, copy it here.
          "[email protected]", "test message subject", "Test message body ...", null);

Para que las otras respuestas funcionen "desde un servidor", primero active el acceso para aplicaciones menos seguras en la cuenta de Gmail. Esto quedará obsoleto el 30 de mayo de 2022.

Parece que Google cambió recientemente su política de seguridad. La respuesta mejor valorada ya no funciona hasta que cambie la configuración de su cuenta como se describe aquí: https://support.google.com/accounts/answer/6010255?hl=en-GB A partir de marzo de 2016, Google volvió a cambiar la ubicación de la configuración. ! ingrese la descripción de la imagen aquí

BCS Software avatar Sep 08 '2015 12:09 BCS Software

Esto es para enviar un correo electrónico con un archivo adjunto. Simple y breve.

fuente: http://coding-issues.blogspot.in/2012/11/sending-email-with-attachments-from-c.html

using System.Net;
using System.Net.Mail;

public void email_send()
{
    MailMessage mail = new MailMessage();
    SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com");
    mail.From = new MailAddress("your [email protected]");
    mail.To.Add("[email protected]");
    mail.Subject = "Test Mail - 1";
    mail.Body = "mail with attachment";

    System.Net.Mail.Attachment attachment;
    attachment = new System.Net.Mail.Attachment("c:/textfile.txt");
    mail.Attachments.Add(attachment);

    SmtpServer.Port = 587;
    SmtpServer.Credentials = new System.Net.NetworkCredential("your [email protected]", "your password");
    SmtpServer.EnableSsl = true;

    SmtpServer.Send(mail);

}
Ranadheer Reddy avatar May 28 '2012 12:05 Ranadheer Reddy