如何通过 Gmail 使用 C# 发送电子邮件
Posted
技术标签:
【中文标题】如何通过 Gmail 使用 C# 发送电子邮件【英文标题】:How to send an e-mail with C# through Gmail 【发布时间】:2015-06-10 11:39:57 【问题描述】:尝试通过我的网络服务发送电子邮件时出现错误。我尝试启用对安全性较低的应用程序的访问,禁用两步验证并通过网络浏览器登录帐户。 SO上的任何解决方案都不适合我。我仍然得到:
错误:System.Net.Mail.SmtpException:SMTP 服务器需要 安全连接或客户端未通过身份验证。服务器 响应是:5.5.1 需要身份验证。
我可以做些什么来解决这个问题?
namespace EmailService
public class Service1 : IService1
public string SendEmail(string inputEmail, string subject, string body)
string returnString = "";
try
MailMessage email = new MailMessage();
SmtpClient smtp = new SmtpClient();
smtp.Host = "smtp.gmail.com";
// set up the Gmail server
smtp.EnableSsl = true;
smtp.Port = 587;
smtp.Credentials = new System.Net.NetworkCredential("myemail@gmail.com", "mypassword");
smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
smtp.UseDefaultCredentials = false;
// draft the email
MailAddress fromAddress = new MailAddress("cse445emailservice@gmail.com");
email.From = fromAddress;
email.To.Add(inputEmail);
email.Subject = body;
email.Body = body;
smtp.Send(email);
returnString = "Success! Please check your e-mail.";
catch(Exception ex)
returnString = "Error: " + ex.ToString();
return returnString;
【问题讨论】:
看看这是否有帮助:***.com/questions/18503333/… 您是否尝试过 ping 服务器,如果是,那么 Eghbal Sohrabi 提到的解决方案是可以的 @Shubhojit ping Google 服务器? @Johnny,我的意思是说您的防火墙是否没有阻止请求,这种情况有时会发生。只是为了确定...... 那么为什么我可以从 localhost 成功运行我的类似代码,但从 Web 服务器运行时却出现此错误? 【参考方案1】:去这里:Less secure apps,使用您的电子邮件和密码登录,用于在您的 c# 代码中发送邮件,然后选择Turn On
。
也请转到此链接并点击继续 Allow access to your Google account
我也稍微修改了一下:
public string sendit(string ReciverMail)
MailMessage msg = new MailMessage();
msg.From = new MailAddress("YourMail@gmail.com");
msg.To.Add(ReciverMail);
msg.Subject = "Hello world! " + DateTime.Now.ToString();
msg.Body = "hi to you ... :)";
SmtpClient client = new SmtpClient();
client.UseDefaultCredentials = true;
client.Host = "smtp.gmail.com";
client.Port = 587;
client.EnableSsl = true;
client.DeliveryMethod = SmtpDeliveryMethod.Network;
client.Credentials = new NetworkCredential("YourMail@gmail.com", "YourPassword");
client.Timeout = 20000;
try
client.Send(msg);
return "Mail has been successfully sent!";
catch (Exception ex)
return "Fail Has error" + ex.Message;
finally
msg.Dispose();
如果上面的代码不起作用,请尝试像下面的代码一样更改它:
SmtpClient client = new SmtpClient();
client.Host = "smtp.gmail.com";
client.Port = 587;
client.EnableSsl = true;
client.DeliveryMethod = SmtpDeliveryMethod.Network;
client.UseDefaultCredentials = false;
client.Credentials = new NetworkCredential("YourMail@gmail.com", "YourPassword");
【讨论】:
这两种方法我都试过了,还是不行。 原来smtp.UseDefaultCredentials = false;
必须在smtp.Credentials = new System.Net.NetworkCredential("myemail@gmail.com", "mypassword");
之前我只是交换了这些行,一切正常。
您的意思是将smtp.UseDefaultCredentials = true;
更改为smtp.UseDefaultCredentials = false;
并将其放在smtp.Credentials = new System.Net.NetworkCredential("myemail@gmail.com", "mypassword");
之前,如果是,请告诉我编辑我的答案。
是的,我认为默认凭据需要为 false,并且该行必须在另一行之前。
我一直试图让它工作几个小时,我所要做的就是点击继续按钮!非常感谢你,你是生活的品味以上是关于如何通过 Gmail 使用 C# 发送电子邮件的主要内容,如果未能解决你的问题,请参考以下文章
是否可以在 gmail.com 帐户中找到从 C# 以编程方式发送的电子邮件?
如何使用 Gmail 的 SMTP 客户端在 C# 中向自己发送电子邮件,而无需在 Gmail 设置中启用安全性较低的应用程序的访问权限?
c# SmtpClient 类无法使用 gmail 发送电子邮件