使用 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 发送电子邮件的主要内容,如果未能解决你的问题,请参考以下文章

使用 PHPMailer 通过 SMTP 发送电子邮件

SMTP使用Gmail发送电子邮件问题

在Python中使用SMTP发送电子邮件

发送邮件与 SMTP

SMTP 协议发送邮件的整体过程

使用 SMTP 从 Python 发送邮件