SMTP服务器需要安全连接或客户端未经过身份验证。服务器响应是:5.5.1身份验证是否必需?

时间:2013-08-29 06:00:45

标签: c# smtp

我想从我的应用程序发送一封电子邮件,并且我已经编写了以下用于发送邮件的代码

    MailMessage msg = new MailMessage();

    msg.From = new MailAddress("mymailid");
    msg.To.Add("receipientid");
    msg.Subject = "test";
    msg.Body = "Test Content";
    msg.Priority = MailPriority.High;

    SmtpClient client = new SmtpClient();

    client.Credentials = new NetworkCredential("mymailid", "mypassword", "smtp.gmail.com");
    client.Host = "smtp.gmail.com";
    client.Port = 587;
    client.DeliveryMethod = SmtpDeliveryMethod.Network;
    client.EnableSsl = true;
    client.UseDefaultCredentials = true;

    client.Send(msg);

我在localhost上运行它,所以我正在做什么错误发送它。

当我发送按钮时,会出现类似

的错误
  

SMTP服务器需要安全连接,否则客户端不需要   认证。服务器响应是:5.5.1身份验证   必需的。

Web.config文件中的代码

 <appSettings>
    <add key="webpages:Version" value="2.0.0.0" />
    <add key="webpages:Enabled" value="false" />
    <add key="PreserveLoginUrl" value="true" />
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />   
    <add key="smtpServer" value="smtp.gmail.com" />
    <add key="EnableSsl" value = "true"/>
    <add key="smtpPort" value="587" />
    <add key="smtpUser" value="sender@gmail.com" />
    <add key="smtpPass" value="mypassword" />
    <add key="adminEmail" value="sender@gmail.com" />
  </appSettings>
  <system.net>
    <mailSettings>
      <smtp from="sender@gmail.com">
        <network host="smtp.gmail.com" password="mypassword" port="587" userName="sender@gmail.com"  enableSsl="true"/>
      </smtp>
    </mailSettings>
  </system.net>

如何解决此错误并发送邮件?

25 个答案:

答案 0 :(得分:88)

我有同样的问题。

我找到了这个解决方案:

Google可能阻止某些不使用现代安全标准的应用或设备尝试登录。由于这些应用和设备更易于破解,因此阻止它们有助于保持帐户安全。

不支持最新安全标准的应用程序的一些示例包括:

  • 适用于iOS 6或更低版本的iPhone或iPad上的邮件应用
  • 8.1手机版之前的Windows手机上的邮件应用
  • 某些桌面邮件客户端,如Microsoft Outlook和Mozilla Thunderbird

因此,您必须在Google帐户中启用安全登录

登录Google帐户后,请转到:

https://www.google.com/settings/security/lesssecureapps

在C#中,您可以使用以下代码:

using (MailMessage mail = new MailMessage())
{
    mail.From = new MailAddress("email@gmail.com");
    mail.To.Add("somebody@domain.com");
    mail.Subject = "Hello World";
    mail.Body = "<h1>Hello</h1>";
    mail.IsBodyHtml = true;
    mail.Attachments.Add(new Attachment("C:\\file.zip"));

    using (SmtpClient smtp = new SmtpClient("smtp.gmail.com", 587))
    {
        smtp.Credentials = new NetworkCredential("email@gmail.com", "password");
        smtp.EnableSsl = true;
        smtp.Send(mail);
    }
}

-------------------
Michael Freidgeim在以下评论区分享的信息:
屏幕截图https://stackoverflow.com/a/32457468/52277

的类似答案

答案 1 :(得分:38)

首先检查gmail的安全相关问题。您可能已在gmail中启用了双重身份验证。如果您收到任何安全警报,请检查您的Gmail收件箱。在这种情况下,请检查@mjb的其他答案,如下所示

以下是我总是先检查这些问题的一般事项

client.UseDefaultCredentials = true;

将其设置为false。

注意@Joe King的answer - 您必须在设置client.Credentials

之前设置client.UseDefaultCredentials

答案 2 :(得分:32)

确保在致电SmtpClient.Credentials后设置SmtpClient.UseDefaultCredentials = false

订单非常重要,因为设置SmtpClient.UseDefaultCredentials = false会将SmtpClient.Credentials重置为空。

答案 3 :(得分:17)

我已经搜索并尝试了几个小时不同的事情。总而言之,我必须考虑以下几点:

  1. 使用smtp.gmail.com代替smtp.google.com
  2. 使用端口587
  3. 在设置凭据之前设置client.UseDefaultCredentials = false;
  4. 开启Access for less secure apps
  5. 设置client.EnableSsl = true;
  6. 如果这些步骤无效,请查看answer 也许,你也可以在System.Net.Mail FAQ找到有用的东西。

答案 4 :(得分:8)

尝试登录您的Gmail帐户。如果您使用gmail SMTP发送电子邮件,它将被锁定。我不知道您可以在锁定之前发送的电子邮件的限制,但如果您登录一次,那么它将再次从代码中运行。 确保您的webconfig设置良好。

答案 5 :(得分:7)

尝试这种方式,我做了一些轻微的改变:

MailMessage msg = new MailMessage();

msg.From = new MailAddress("mymailid@gmail.com");
msg.To.Add("receipientid@gmail.com");
msg.Subject = "test";
msg.Body = "Test Content";
//msg.Priority = MailPriority.High;


using (SmtpClient client = new SmtpClient())
{
    client.EnableSsl = true;
    client.UseDefaultCredentials = false;
    client.Credentials = new NetworkCredential("mymailid@gmail.com", "mypassword");
    client.Host = "smtp.gmail.com";
    client.Port = 587;
    client.DeliveryMethod = SmtpDeliveryMethod.Network;

    client.Send(msg);
}

如果您有邮件设置,请显示您的app.config文件。

答案 6 :(得分:3)

即使我设置了#34; UseDefaultCredentials&#34;我也遇到了同样的问题。为假。后来我发现根本原因是我打开了&#34; 2步验证&#34;在我的帐户中。在我关闭之后,问题就消失了。

答案 7 :(得分:2)

enter image description here 确保允许访问安全性较低的应用。

        MailMessage mail = new MailMessage();
        mail.From = new MailAddress("xx@gmail.com");
        mail.Sender = new MailAddress("xx@gmail.com");
        mail.To.Add("external@emailaddress");
        mail.IsBodyHtml = true;
        mail.Subject = "Email Sent";
        mail.Body = "Body content from";

        SmtpClient smtp = new SmtpClient("smtp.gmail.com", 587);
        smtp.UseDefaultCredentials = false;

        smtp.Credentials = new System.Net.NetworkCredential("xx@gmail.com", "xx");
        smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
        smtp.EnableSsl = true;

        smtp.Timeout = 30000;
        try
        {

            smtp.Send(mail);
        }
        catch (SmtpException e)
        {
            textBox1.Text= e.Message;
        }

答案 8 :(得分:1)

如果是新的Google帐户,则必须通过常规用户界面发送电子邮件(第一个)。之后,您可以使用应用程序/机器人发送消息。

答案 9 :(得分:1)

您应该考虑在配置文件中指定SMTP配置数据,不要在代码中覆盖它们 - 请参阅http://www.systemnetmail.com/faq/4.1.aspx上的SMTP配置数据

<system.net>
            <mailSettings>
                <smtp deliveryMethod="Network" from="admin@example.com">
                    <network defaultCredentials="false" host="smtp.example.com" port="25" userName="admin@example.com" password="password"/>
                </smtp>
            </mailSettings>
        </system.net>

答案 10 :(得分:1)

从此link打开安全性较低的应用并繁荣......

答案 11 :(得分:1)

下面是我的代码。我也有同样的错误,但问题是我给了我的密码错误。下面的代码将完美地工作..它

            MailMessage mail = new MailMessage();
            SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com");              
            mail.From = new MailAddress("fromaddress@gmail.com");
            mail.To.Add("toaddress1@gmail.com");
            mail.To.Add("toaddress2@gmail.com");
            mail.Subject = "Password Recovery ";
            mail.Body += " <html>";
            mail.Body += "<body>";
            mail.Body += "<table>";

            mail.Body += "<tr>";
            mail.Body += "<td>User Name : </td><td> HAi </td>";
            mail.Body += "</tr>";

            mail.Body += "<tr>";
            mail.Body += "<td>Password : </td><td>aaaaaaaaaa</td>";
            mail.Body += "</tr>";

            mail.Body += "</table>";
            mail.Body += "</body>";
            mail.Body += "</html>";

            mail.IsBodyHtml = true;
            SmtpServer.Port = 587;
            SmtpServer.Credentials = new System.Net.NetworkCredential("sendfrommailaddress.com", "password");
            SmtpServer.EnableSsl = true;

            SmtpServer.Send(mail);

您可以在Sending mail

中查看它

答案 12 :(得分:1)

应用密码帮助了我。

  1. 转到https://myaccount.google.com/security
  2. 向下滚动到“登录 Google”。
  3. 启用两步验证。
  4. 添加应用密码。
  5. 在您的代码中使用生成的密码。

答案 13 :(得分:1)

我多次遇到相同的问题。启用不太安全的应用程序选项后,问题得以解决。 从此处启用安全性较低的应用:https://myaccount.google.com/lesssecureapps

希望这会有所帮助。

答案 14 :(得分:1)

如果您处于测试环境中并且不想设置安全设置,则必须允许安全性较低的应用程序通过。 Gmail中的此链接。

https://myaccount.google.com/lesssecureapps

答案 15 :(得分:1)

我今天早上创建了Microsoft 365 Developer subscription (E5),并使用它通过以下设置发送了测试电子邮件

using (SmtpClient client = new SmtpClient())
{
    client.EnableSsl = true;
    client.UseDefaultCredentials = false;
    client.Credentials = new NetworkCredential(username, password);
    client.Host = "smtp.office365.com";
    client.Port = 587;
    client.DeliveryMethod = SmtpDeliveryMethod.Network;

    client.Send(msg);
}

一开始它没有用,因为我不断收到此错误消息,但此代码引发了异常。然后,我花了大约4个小时以上的时间来使用Microsoft 365管理中心设置并阅读文章以找出问题所在。最终,我更改了Microsoft 365管理中心密码,它的工作原理像一个超级按钮。因此,在考虑任何高级解决方案之前,值得尝试在收到此消息时更改密码。

请注意,当我登录到Microsoft 365帐户没有任何问题时,密码肯定不是无效的。但是,密码更改解决了该问题。

答案 16 :(得分:0)

如果: 1)用户或通行证错误 2) 不启用 SSL 3) 安全性较低的应用程序未启用 4)您还没有使用此邮件登录服务器 5)你没有设置client.UseDefaultCredentials = false

答案 17 :(得分:0)

如果所有提到的解决方案都没有帮助,请尝试使用此 URL - 它帮助我取消阻止在我的网站上发送电子邮件

https://g.co/allowaccess

答案 18 :(得分:0)

我已经使用了步骤 in this question 并且它对我有用。

我的问题是 G Suite 认为我的密码不强,更改后它运行良好。

答案 19 :(得分:0)

如果您使用 Office 365 帐户遇到此问题。在 Exchange Online 中,默认情况下,将对所有 Office 365 邮箱帐户禁用 SMTP 客户端身份验证。您必须为有问题的帐户手动启用 SMTP 身份验证并再次检查案例。检查以下线程。

https://morgantechspace.com/2021/01/the-smtp-server-requires-a-secure-connection-or-the-client.html

https://docs.microsoft.com/en-us/exchange/clients-and-mobile-in-exchange-online/authenticated-client-smtp-submission

答案 20 :(得分:0)

我遇到了同样的问题,可以通过将密码更改为强密码来解决。

答案 21 :(得分:0)

尝试启用允许不太安全的应用访问。

在这里,使用Gmail登录后,您可以启用安全性较低的应用程序。

https://myaccount.google.com/lesssecureapps

谢谢。

答案 22 :(得分:0)

转动less secure option on并尝试其他解决方案后,如果您仍然面临同样的问题,请尝试使用此重载:

client.Credentials = new NetworkCredential("mymailid", "mypassword");

而不是:

client.Credentials = new NetworkCredential("mymailid", "mypassword", "smtp.gmail.com");

答案 23 :(得分:0)

某些smtp服务器(安全服务器)要求您提供用户名和电子邮件,如果它的gmail,那么大多数人都有机会获得“不太安全的登录”。您需要解决的问题,否则您可以尝试:

public static void SendEmail(string address, string subject, 
    string message, string email, string username, string password, 
    string smtp, int port)
{
    var loginInfo = new NetworkCredential(username, password);
    var msg = new MailMessage();
    var smtpClient = new SmtpClient(smtp, port);

    msg.From = new MailAddress(email);
    msg.To.Add(new MailAddress(address));
    msg.Subject = subject;
    msg.Body = message;
    msg.IsBodyHtml = true;

    smtpClient.EnableSsl = true;
    smtpClient.UseDefaultCredentials = false;
    smtpClient.Credentials = loginInfo;
    smtpClient.Send(msg);
}

请注意,来自和用户名的电子邮件不同于某些将它们称为相同的实现。

调用此方法可以这样完成:

SendEmail("to-mail@gmail.com", "test", "Hi it worked!!", 
   "from-mail", "from-username", "from-password", "smtp", 587);

答案 24 :(得分:-1)

我也面临着类似的问题 'SMTP服务器需要安全的连接,或者客户端未通过身份验证。服务器响应为:5.5.0需要身份验证' 然后浏览了很多互联网资料,但并没有完全帮助我。我是怎么解决的

step1:smtp.gmail.com是gmail服务器,因此请转到您的帐户gmail设置->单击查看所有设置->转发和IMAP / POP->检查弹出窗口并启用imap(如果未启用它)->保存变化。 步骤2-单击您的gmail个人资料图片->单击管理您的Google帐户->转到安全选项卡->检查对安全性较低的应用程序的访问权限(如果您未选择两步验证,此选项将可用)->默认情况下Google会将其设置为禁用,使其启用以使用您的真实Gmail密码发送电子邮件。 注意:-为不太安全的应用启用gmail访问,可能对您很危险,因此我不建议这样做

第3步:-如果您的帐户启用了两步验证,或者想使用应用专用密码使用除Gmail真实密码之外的其他密码,请尝试以下操作:- 点击您的gmail个人资料图片->点击管理您的Google帐户->转到安全标签->搜索APP密码->选择给定的任何应用程序名称->选择任意设备名称->点击生成->复制16-数字密码,然后将其粘贴到您的应用中,您必须在其中输入gmail密码来代替您的真实gmail密码。