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 服务器需要安全连接或客户端未通过身份验证的主要内容,如果未能解决你的问题,请参考以下文章