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


110

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

    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);

我在本地主机上运行它,所以我在发送它时犯了什么错误。

当我发送按钮时,它给出了类似的错误

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>

我该怎么做才能解决此错误并发送邮件?



我认为您可能也必须查看此答案:stackoverflow.com/a/9572958/1136253
mrbengi 2013年

我有同样的问题。检查[this post] [1] [1]:stackoverflow.com/a/20186909/709340
Moslem Hady 2013年

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

Answers:


62

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

以下是我通常会首先检查的此类非常普通的问题

client.UseDefaultCredentials = true;

将其设置为false。

注意@Joe国王的答案 -你必须设置client.UseDefaultCredentials 之前你设定client.Credentials


2
在这种情况下,您应该共享您的代码。上面的答案是针对有问题的代码的
Ronak Patel 2014年

7
注意@Joe King的答案-您必须先设置client.UseDefaultCredentials,然后再设置client.Credentials
Aaron

1
这个答案行不通,我认为大多数人在gmail方面都面临安全问题。请参阅mjb的答案以寻求适当的解决方案
Jerry Liang

2
另外,请确保已禁用“ Captcha”-如果您在远程服务器上运行脚本(在本地计算机上运行时不需要),则可能需要执行以下操作:accounts.google.com/DisplayUnlockCaptcha
Jens

3
设置client.UseDefaultCredentials = false; 在client.Credentials之前并设置client.EnableSsl = true; 在我的情况下做到了。
2016年

139

我也有同样的问题。

我找到了这个解决方案:

Google可能会阻止某些未使用现代安全标准的应用或设备的登录尝试。由于这些应用程序和设备更容易被破解,因此屏蔽它们有助于确保您的帐户安全。

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

  • 在装有iOS 6或更低版本的iPhone或iPad上的Mail应用
  • Windows版本8.1之前的Windows Phone上的Mail应用
  • 一些桌面邮件客户端,例如Microsoft Outlook和Mozilla Thunderbird

因此,您必须在Google帐户中启用“ 不太安全的登录”(或“不安全的应用程序访问”)。

登录到Google帐户后,请转到:

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

https://myaccount.google.com/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
这与确保SSL是在代码启用了奇迹一起,非常感谢
克劳奇

1
感谢您@mjb分享答案。它挽救了我的生命:)
Maye

3
这应该是选定的答案
thatOneGuy 2015年

2
这是我的问题,感谢您解决麻烦并给出更解释性的答复。
Bojan 2015年

也为我工作。感谢@mjb
Rajbir Jawanda

44

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

该顺序很重要,因为设置SmtpClient.UseDefaultCredentials = false将重置SmtpClient.Credentials为空。


2
我一直在寻找解决方案达半小时,您的是我在互联网上发现的唯一有关此命令排序的小文章。谢了哥们。

4
@Joe King您只是一位了不起的伴侣.....从3个小时以来一直在寻找它:)
Jatin

1
谢谢@Joe King,这是MS文档中缺少的重要信息。这是我也使用用户名和密码发送问题的解决方案。
亚伦2015年

1
这很容易被忽略,但是正如我刚刚发现的那样,排序很重要。
GatesReign 2015年

1
是的 拯救了我的一天。您需要在设置凭据之前调用UseDefaultCredentials = false。
伦德尔

33

我已经搜索并尝试了数小时的其他方法。总而言之,我必须考虑以下几点:

  1. 使用smtp.gmail.com代替smtp.google.com
  2. 使用端口587
  3. 设置client.UseDefaultCredentials = false;设置证书之前
  4. 打开访问权限以降低安全性的应用程序
  5. client.EnableSsl = true;

如果这些步骤没有帮助,请检查此答案
也许,您也可以在此System.Net.Mail FAQ上找到有用的东西。


1
这个答案非常有用...解决了我的问题。非常感谢
Hari

1
如果仍然无法使用,请访问此链接g.co/allowaccess并允许访问
Portekoi

1
“访问不太安全的应用程序”挽救了我的一天。
Romil Kumar Jain

1
这部分对我有用:“打开不安全的应用程序的访问权限”。谢谢!
Tadej

11

尝试登录您的Gmail帐户。如果您使用gmail SMTP发送电子邮件,它将被锁定。我不知道在锁定之前可以发送的电子邮件数量限制,但是如果您登录一次,则可以通过代码再次使用。确保您的webconfig设置正确。


确实是最好的答案!我再次登录,成功了!PS:我必须在Google上提供验证码
Bellash 2014年

我收到此错误的原因是我的Google帐户受到两因素身份验证的保护。我最终创建了一个专用帐户来发送电子邮件。
MvdD 2014年

8

尝试这种方式,我只是做了一些改动:

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文件。


我尚未配置它。我应该在那里写什么?
Abhay Andhariya

我的mvc应用程序中没有app.config文件。
Abhay Andhariya

我尝试了许多其他解决方案,但只有这个可行。谢谢
Adil Malik


3

即使将“ UseDefaultCredentials”设置为false,我也遇到了同样的问题。后来,我发现根本原因是我在帐户中启用了“两步验证”。我将其关闭后,问题就消失了。


4
不要关闭两步验证。它在那里是有原因的。您可以在GMail设置中生成应用程序专用密码,并在SmtpClient中使用该密码。无论如何,您都应该这样做,而不是公开普通密码。
丹尼尔·戴森


2

在此处输入图片说明 确保允许访问不太安全的应用。

        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;
        }

1
切换设置为“访问不够安全的应用”的环节就在这里- google.com/settings/security/lesssecureapps更改设置没有帮助我克服错误
mvark

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);

您可以在发送邮件中转介



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>



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);

0

在打开不太安全的选项并尝试其他解决方案之后,如果仍然遇到相同的问题,请尝试使用此重载:

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

代替:

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

0

我今天早上创建了Microsoft 365开发人员订阅(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帐户时没有任何问题,密码肯定不是无效的。但是,密码更改解决了该问题。


-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密码。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.