使用 live/gmail smtp 发送电子邮件
Posted
技术标签:
【中文标题】使用 live/gmail smtp 发送电子邮件【英文标题】:Sending Email using live/gmail smtp 【发布时间】:2016-10-25 21:19:10 【问题描述】:我正在使用 C# 使用 SMTP 和 gmail 服务器发送电子邮件。
以下是我用于发送电子邮件的代码。我遇到了一些错误,即
SMTP 服务器需要安全连接或客户端未通过身份验证。服务器响应为:5.5.1 Authentication Required。
public static bool SendEmail(string from, string[] to, string[] cc, string[] bcc, string subject, string body, bool isBodyhtml, List<Attachment> attachmentList)
try
var mailMessage = new MailMessage();
var smtpClient = new SmtpClient();
mailMessage.From = new MailAddress(from);
mailMessage.To.Add(new MailAddress(string.Join(",", to)));
if (cc != null && cc.Any())
mailMessage.CC.Add(new MailAddress(string.Join(",", cc)));
if (bcc != null && bcc.Any())
mailMessage.Bcc.Add(new MailAddress(string.Join(",", bcc)));
mailMessage.Subject = subject;
mailMessage.Body = body;
mailMessage.IsBodyHtml = isBodyHtml;
if (attachmentList != null)
foreach (var attachment in attachmentList)
mailMessage.Attachments.Add(attachment);
smtpClient.Host = "smtp.gmail.com";
smtpClient.Port = 587; //465
smtpClient.Credentials = new System.Net.NetworkCredential("username@email.com", "passsword");
smtpClient.EnableSsl = true;
smtpClient.Send(mailMessage);
return true;
catch (Exception ex)
return false;
我做错了什么以及如何使用 gmail 发送电子邮件。
【问题讨论】:
您是否检查过凭据是否正确? 是的,凭据是正确的。 如果您提供特定的电子邮件地址和密码smtpClient.UseDefaultCredentials = false;
,请将此行放入您的代码中
对我来说,您的代码看起来不错,请尝试检查 Gmail 收件箱,您可能收到有关来自不安全应用或其他任何东西的注册尝试的邮件,如果您收到来自 gmail 的邮件,请按照说明更改设置根据它。
发件人地址是否与登录地址相同?否则 gmail 可能会认为您正在尝试转发消息
【参考方案1】:
您尚未将UseDefaultCredentials
设置为false
,因此尽管您提供了凭据,但应用程序仍在尝试使用您的Windows 凭据登录SMTP。试试下面的:
smtpClient.UseDefaultCredentials = false;
smtpClient.Credentials = new System.Net.NetworkCredential("username@email.com", "passsword");
UseDefaultCredentials
需要设置为false
在您设置新的网络凭据之前。
【讨论】:
UseDefaultCredentials
默认设置为 false
。如果您确实想使用默认凭据,则必须手动将其设置为 true
。
@user1666620,非常感谢,这里的关键是 UseDefaltCredentials 的位置。
@Adwaenyth 如果UseDefaultCredentials
默认设置为false
,则无需将其设置为false
即可使应用程序正常工作。我知道文档中另有说明,但这不是文档错误的第一次。 msdn.microsoft.com/en-us/library/…
@user1666620 很奇怪,因为Microsoft documentation 明确声明了其他内容。
@Adwaenyth 文档有误。如果您想使用 Windows 凭据以外的其他内容,则需要将 UseDefaultCredentials
显式设置为 false。当我编辑我的评论时,如果默认值为 false,那么这不会是我在使用 SmtpClient 时在 SO 上看到的最常见问题。随意编写应用程序来重现此行为。【参考方案2】:
如果您确定您的用户名和密码正确并且您仍然收到错误,则表示 Gmail 已阻止您的应用程序。
尝试从这里开启它Grant Access to Less Secure Apps
【讨论】:
Gmail 的应用程序安全性较低。所以我检查了但仍然得到同样的错误:( 致反对者,虽然这不是导致 OP 收到错误的原因,但如果未启用不太安全的应用程序,您将收到 OP 描述的错误。以上是关于使用 live/gmail smtp 发送电子邮件的主要内容,如果未能解决你的问题,请参考以下文章