Enviar correo electrónico usando System.Net.Mail a través de gmail

Quiero enviar un correo electrónico a través del servidor de Gmail. He puesto el siguiente código pero se está atascado durante el envío. Alguna idea, por favor …

MailMessage mail = new MailMessage(); mail.From = new System.Net.Mail.MailAddress("apps@xxxx.com"); //create instance of smtpclient SmtpClient smtp = new SmtpClient(); smtp.Port = 465; smtp.UseDefaultCredentials = true; smtp.Host = "smtp.gmail.com"; smtp.EnableSsl = true; //recipient address mail.To.Add(new MailAddress("yyyy@xxxx.com")); //Formatted mail body mail.IsBodyHtml = true; string st = "Test"; mail.Body = st; smtp.Send(mail); 

Xxxx.com es un dominio de correo en las aplicaciones de Google. Gracias…

 MailMessage mail = new MailMessage(); mail.From = new System.Net.Mail.MailAddress("apps@xxxx.com"); // The important part -- configuring the SMTP client SmtpClient smtp = new SmtpClient(); smtp.Port = 587; // [1] You can try with 465 also, I always used 587 and got success smtp.EnableSsl = true; smtp.DeliveryMethod = SmtpDeliveryMethod.Network; // [2] Added this smtp.UseDefaultCredentials = false; // [3] Changed this smtp.Credentials = new NetworkCredential(mail.From, "password_here"); // [4] Added this. Note, first parameter is NOT string. smtp.Host = "smtp.gmail.com"; //recipient address mail.To.Add(new MailAddress("yyyy@xxxx.com")); //Formatted mail body mail.IsBodyHtml = true; string st = "Test"; mail.Body = st; smtp.Send(mail); 

Probé el código C # anterior para enviar correos de Gmail a mi identificación corporativa. Al ejecutar la aplicación, el control se detuvo indefinidamente en la sentencia smtp.Send(mail);

Mientras buscaba en Google, encontré un código similar, que funcionó para mí. Estoy publicando ese código aquí.

 class GMail { public void SendMail() { string pGmailEmail = "fromAddress@gmail.com"; string pGmailPassword = "GmailPassword"; string pTo = "ToAddress"; //abc@domain.com string pSubject = "Test From Gmail"; string pBody = "Body"; //Body MailFormat pFormat = MailFormat.Text; //Text Message string pAttachmentPath = string.Empty; //No Attachments System.Web.Mail.MailMessage myMail = new System.Web.Mail.MailMessage(); myMail.Fields.Add ("http://schemas.microsoft.com/cdo/configuration/smtpserver", "smtp.gmail.com"); myMail.Fields.Add ("http://schemas.microsoft.com/cdo/configuration/smtpserverport", "465"); myMail.Fields.Add ("http://schemas.microsoft.com/cdo/configuration/sendusing", "2"); //sendusing: cdoSendUsingPort, value 2, for sending the message using //the network. //smtpauthenticate: Specifies the mechanism used when authenticating //to an SMTP //service over the network. Possible values are: //- cdoAnonymous, value 0. Do not authenticate. //- cdoBasic, value 1. Use basic clear-text authentication. //When using this option you have to provide the user name and password //through the sendusername and sendpassword fields. //- cdoNTLM, value 2. The current process security context is used to // authenticate with the service. myMail.Fields.Add ("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate", "1"); //Use 0 for anonymous myMail.Fields.Add ("http://schemas.microsoft.com/cdo/configuration/sendusername", pGmailEmail); myMail.Fields.Add ("http://schemas.microsoft.com/cdo/configuration/sendpassword", pGmailPassword); myMail.Fields.Add ("http://schemas.microsoft.com/cdo/configuration/smtpusessl", "true"); myMail.From = pGmailEmail; myMail.To = pTo; myMail.Subject = pSubject; myMail.BodyFormat = pFormat; myMail.Body = pBody; if (pAttachmentPath.Trim() != "") { MailAttachment MyAttachment = new MailAttachment(pAttachmentPath); myMail.Attachments.Add(MyAttachment); myMail.Priority = System.Web.Mail.MailPriority.High; } SmtpMail.SmtpServer = "smtp.gmail.com:465"; SmtpMail.Send(myMail); } } 

Establezca smtp.UseDefaultCredentials = false y use smtp.Credentials = new NetworkCredential (gMailAccount, password);

Esto me ha funcionado:

  MailMessage message = new MailMessage("myemail@gmail.com", toemail, subjectEmail, comments); message.IsBodyHtml = true; try { SmtpClient client = new SmtpClient("smtp.gmail.com", 587); client.Timeout = 2000; client.EnableSsl = true; client.DeliveryMethod = SmtpDeliveryMethod.Network; //client.Credentials = CredentialCache.DefaultNetworkCredentials; client.UseDefaultCredentials = false; client.Credentials = new System.Net.NetworkCredential("myemail@gmail.com", "mypassord"); client.Send(message); message.Dispose(); client.Dispose(); } catch (Exception ex) { Debug.WriteLine(ex.Message); } 

PERO (en el momento de escribir esto – Oct 2017)

Debe habilitar “Permitir aplicaciones menos seguras” dentro de la opción “aplicaciones con acceso a la cuenta” en la configuración de seguridad / privacidad de Google “Mi cuenta” ( https://myaccount.google.com )

Use el número de puerto 587

Con el siguiente código, funcionará correctamente.

 MailMessage mail = new MailMessage(); mail.From = new MailAddress("abc@mydomain.com", "Enquiry"); mail.To.Add("abcdef@yahoo.com"); mail.IsBodyHtml = true; mail.Subject = "Registration"; mail.Body = "Some Text"; mail.Priority = MailPriority.High; SmtpClient smtp = new SmtpClient("smtp.gmail.com", 587); //smtp.UseDefaultCredentials = true; smtp.Credentials = new System.Net.NetworkCredential("xyz@gmail.com", ""); smtp.EnableSsl = true; //smtp.DeliveryMethod = SmtpDeliveryMethod.Network; smtp.Send(mail); 

Pero, hay un problema con el uso de gmail. El correo electrónico se enviará con éxito, pero la bandeja de entrada del destinatario tendrá la dirección de Gmail en la “dirección de origen” en lugar de la “dirección de origen” mencionada en el código.

Para resolver esto, siga los pasos mencionados en el siguiente enlace.

http://karmic-development.blogspot.in/2013/10/send-email-from-aspnet-using-gmail-as.html

antes de seguir todos los pasos anteriores, debe autenticar su cuenta de gmail para permitir el acceso a su aplicación y también a los dispositivos. Verifique todos los pasos para la autenticación de cuenta en el siguiente enlace:

http://karmic-development.blogspot.in/2013/11/allow-account-access-while-sending.html

  ActiveUp.Net.Mail.SmtpMessage smtpmsg = new ActiveUp.Net.Mail.SmtpMessage(); smtpmsg.From.Email = "abcd@test.com"; smtpmsg.To.Add(To); smtpmsg.Bcc.Add("vijay@indiagreat.com"); smtpmsg.Subject = Subject; smtpmsg.BodyText.Text = Body; smtpmsg.Send("mail.test.com", "abcd@sss.com", "user@1234", ActiveUp.Net.Mail.SaslMechanism.Login); 

Me doy cuenta de que esta es una respuesta a una pregunta muy antigua, con muchas otras buenas respuestas. Estoy publicando este código para incluir algunos de los comentarios útiles publicados por otros usuarios, como Usar declaraciones y métodos más nuevos, donde algunas respuestas tienen métodos obsoletos. Este código fue probado y funcionando desde el 11 de julio de 2018.

Si envía a través de su cuenta de GMail, asegúrese de que la opción Permitir menos aplicaciones seguras esté habilitada desde su panel de control.

Código de clase C #:

 public class Email { public void NewHeadlessEmail(string fromEmail, string password, string toAddress, string subject, string body) { using (System.Net.Mail.MailMessage myMail = new System.Net.Mail.MailMessage()) { myMail.From = new MailAddress(fromEmail); myMail.To.Add(toAddress); myMail.Subject = subject; myMail.IsBodyHtml = true; myMail.Body = body; using (System.Net.Mail.SmtpClient s = new System.Net.Mail.SmtpClient("smtp.gmail.com", 587)) { s.DeliveryMethod = SmtpDeliveryMethod.Network; s.UseDefaultCredentials = false; s.Credentials = new System.Net.NetworkCredential(myMail.From.ToString(), password); s.EnableSsl = true; s.Send(myMail); } } } } 

Código de clase VB:

 Public Class Email Sub NewHeadlessEmail(fromEmail As String, password As String, toAddress As String, subject As String, body As String) Using myMail As System.Net.Mail.MailMessage = New System.Net.Mail.MailMessage() myMail.From = New MailAddress(fromEmail) myMail.To.Add(toAddress) myMail.Subject = subject myMail.IsBodyHtml = True myMail.Body = body Using s As New Net.Mail.SmtpClient("smtp.gmail.com", 587) s.DeliveryMethod = SmtpDeliveryMethod.Network s.UseDefaultCredentials = False s.Credentials = New Net.NetworkCredential(myMail.From.ToString(), password) s.EnableSsl = True s.Send(myMail) End Using End Using End Sub End Class 

Uso C #:

 { Email em = new Email(); em.NewHeadlessEmail("myemail@gmail.com", "password", "recipient@email.com", "Subject Text", "Body Text"); } 

VB de uso:

 Dim em As New Email em.NewHeadlessEmail("myemail@gmail.com", "password", "recipient@email.com", "Subject Text", "Body Text")