使用System.Net.Mail通过Gmail发送电子邮件

我想通过Gmail服务器发送电子邮件。 我已经把下面的代码,但发送时卡住了。 任何想法请….

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是Google应用程序中的一个邮件域。 谢谢…

 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); 

我尝试了上面的C#代码,从Gmail发送邮件到我的公司ID。 在执行应用程序时,控件无限期停止在语句smtp.Send(mail);

当谷歌search时,我遇到了一个类似的代码 ,为我工作。 我在这里发布该代码。

 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); } } 

设置smtp.UseDefaultCredentials = false并使用smtp.Credentials = new NetworkCredential(gMailAccount,password);

使用端口号码587

用下面的代码,它会成功的工作。

 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", "<my gmail pwd>"); smtp.EnableSsl = true; //smtp.DeliveryMethod = SmtpDeliveryMethod.Network; smtp.Send(mail); 

但是,使用Gmail有一个问题。 电子邮件将成功发送,但收件人收件箱将在“发件人地址”中代替“代码”中提及的“发件人地址”中的Gmail地址。

要解决这个问题,请按照以下链接中提到的步骤操作。

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

在遵循上述所有步骤之前,您需要validation您的Gmail帐户以允许访问您的应用程序以及设备。 请在以下链接检查所有的帐户validation步骤:

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); 

这对我有效:

  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); } 

但(截至写这篇文章的时间 – 2017年10月)

您需要在“我的帐户”谷歌安全/隐私设置( https://myaccount.google.com )的“有帐户访问权限的应用程序”选项中启用“允许安全性较低的应用程序”