System.Net.Mail.SmtpException:SMTP 服务器需要安全连接或客户端未通过身份验证

Posted

技术标签:

【中文标题】System.Net.Mail.SmtpException:SMTP 服务器需要安全连接或客户端未通过身份验证【英文标题】:System.Net.Mail.SmtpException: The SMTP server requires a secure connection or the client was not authenticated 【发布时间】:2012-11-26 06:20:39 【问题描述】:

我正在尝试从 C# 应用程序发送带有我网站地址的电子邮件。 直到最近,这几个月都运行良好。 (也许我的提供者改变了一些东西或者其他人改变了设置)

代码如下:

  private void sendEmail(Email invite) 
            MailMessage mail = new MailMessage();
            SmtpClient SmtpServer = new SmtpClient(smtpServerName);
            mail.From = new MailAddress(emailUsername);

            mail.To.Add(invite.RecipientEmail);
            mail.Subject = invite.MessageSubject;
            mail.Body = invite.MessageBody;

            SmtpServer.UseDefaultCredentials = false;
            SmtpServer.Port = 587;
            SmtpServer.Credentials = new System.Net.NetworkCredential(emailUsername, emailPassword);
//          SmtpServer.EnableSsl = true;
            SmtpServer.Send(mail);
          

这是错误:

SMTP 服务器需要安全连接或客户端未通过身份验证。服务器响应为:需要 SMTP 身份验证。

查看其他问题,我尝试了他们的建议,制作SmtpServer.EnableSsl = true。这根本不起作用。它给出了以下内容:

System.Net.Mail.SmtpException:服务器不支持安全连接。

我猜我应该禁用 SSL 并按照以前的方式使用它。

有什么建议可以让电子邮件再次发送工作吗?

编辑 我试过没有SmtpServer.UseDefaultCredentials = false; 我已经尝试将其设置为 true:SmtpServer.UseDefaultCredentials =true; 我已经尝试评论该行以及以下//SmtpServer.Credentials = new System.Net.NetworkCredential(emailUsername, emailPassword);

【问题讨论】:

我建议检查您的提供商的客户端连接设置,以确保您正确指定了一些内容,例如端口等。还要检查您的用户/密码,因为这些可能会导致该错误消息。 这些凭据以前有效,但我正在这样做。彻底没有坏处。谢谢! 我记不清了,但我想我在传递凭据并且服务器不需要它们时遇到了这个错误。您可以尝试注释掉 .Credentials 行,看看会发生什么。 @ReedCopsey 有人刚刚回复我。凭证已更改。如果您想在回复中发表评论,我会接受。 正如@ReedCopsey 所说,检查凭据和设置至关重要。我只是使用 telnet 为我省去了很多麻烦。这是一个easy guide 说明如何操作。 【参考方案1】:

该错误消息通常由以下原因之一引起:

连接设置不正确,例如为安全或非安全连接指定了错误的端口 凭据不正确。我会验证用户名和密码组合,以确保凭据正确。

【讨论】:

【参考方案2】:

我认为你必须设置DeliveryMethod = SmtpDeliveryMethod.Network

这个目前正在我的电脑上运行,我刚刚检查过,运行良好,试试这个

using System.Net;
using System.Net.Mail;

var fromAddress = new MailAddress("from@gmail.com", "From Name");
var toAddress = new MailAddress("to@example.com", "To Name");
const string fromPassword = "fromPassword";
const string subject = "Subject";
const string body = "Body";

var smtp = new SmtpClient
           
               Host = "smtp.gmail.com",
               Port = 587,
               EnableSsl = true,
               DeliveryMethod = SmtpDeliveryMethod.Network,
               UseDefaultCredentials = false,
               Credentials = new NetworkCredential(fromAddress.Address, fromPassword)
           ;
using (var message = new MailMessage(fromAddress, toAddress)
                     
                         Subject = subject,
                         Body = body
                     )

    smtp.Send(message);

【讨论】:

DeliveryMethod 的默认值为 Network,因此此答案没有提供任何新内容。【参考方案3】:

如果您确定您的用户名和密码正确,但仍然出现错误,则表示 Gmail 已阻止您的应用程序。

您应该选中the following link relevant to your gmail account 中的“打开”单选按钮。这样就可以正常工作了。

【讨论】:

【参考方案4】:

如果您在服务器上部署应用程序,请尝试在您的服务器上登录您的谷歌帐户。奇怪的是,smtp 电子邮件发送应用程序在我的桌面上运行良好。不在服务器中。这可能会受到 google 安全机制工作方式的影响。

【讨论】:

以上是关于System.Net.Mail.SmtpException:SMTP 服务器需要安全连接或客户端未通过身份验证的主要内容,如果未能解决你的问题,请参考以下文章