可以';t通过MailMessage&;smtpClient

本文关键字:amp smtpClient MailMessage 可以 通过 | 更新日期: 2023-09-27 18:22:05

我一辈子都不明白为什么不起作用

SmtpClient smtp = new SmtpClient
{
    Host = "smtp.gmail.com",
    Port = 587,
    UseDefaultCredentials = false,
    DeliveryMethod = SmtpDeliveryMethod.Network,
    Credentials = new NetworkCredential("myemail@gmail.com", "myGmailPasswordHere"),
    EnableSsl = true,
    Timeout = 10000
};

smtp.Send(mail);

我得到:

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

我只是将EnableSsl指定为true,所以这不应该是安全连接方面的问题。

我从本地主机运行这个。是的,我输入的用户名和密码(我的gmail帐户凭据)是100%正确的。

可以';t通过MailMessage&;smtpClient

我知道这是个老话题,但是。。。谷歌更改了一些安全设置。

我一直在纠结所有的答案,直到我用谷歌的一封邮件查看了我的电子邮件,邮件中说"我们最近阻止了你的谷歌账户登录"。

这让我看到了这一页:谷歌账户安全

在"访问不太安全的应用程序"部分,您可以启用从其他设备/应用程序访问您的帐户。。。就像你的C#应用程序一样。

请注意,不再有"特定应用程序"部分。

希望这能帮助到别人。。。我刚刚失去了30分钟的生命。。。

如果登录信息100%正确,则需要先设置UseDefaultCredentials = false,然后设置要使用Credentials = new NetworkCredential("myemail@gmail.com", "myGmailPasswordHere")的凭据。

如果先设置凭据,则在设置UseDefaultCredentials = false时,会将Credentials属性设置为null

这是有线的,但它发生在我身上。

在调用smtp.Send(message);之前,调试代码并检查Credentials属性是否为null。如果是,请尝试颠倒顺序。看起来它的顺序是正确的,但如果它为null,就不要使用内联初始化。

希望能有所帮助。

编辑:如果您使用两步验证,请确保您使用的是应用程序特定密码

看起来Gmail需要特定于应用程序的密码(而不是主密码)。

请调查一下:http://support.google.com/mail/bin/answer.py?hl=en&答案=1173270

我最近也遇到了同样的问题。

这对我来说很好

SmtpClient smtp = new SmtpClient
    {
        Host = "smtp.gmail.com",
        Port = 587,
        UseDefaultCredentials = false,
        DeliveryMethod = SmtpDeliveryMethod.Network,
        Credentials = new NetworkCredential("myid@gmail.com", "mypassword"),
        EnableSsl = true,
        Timeout = 10000
    };
    MailMessage message = new MailMessage();
    message.Body = "hello there";
    message.Subject = "hi!!";
    message.To.Add("myid@gmail.com");
    message.From = new MailAddress("myid@gmail.com");
    smtp.Send(message);

我以前遇到过这个问题,并通过以下步骤解决了它:

  1. 转到"我的帐户"设置
  2. 单击"登录和安全"类别
  3. 向下滚动至"已连接的应用程序和网站"部分
  4. 关闭"允许不太安全的应用"选项

我刚刚关闭了这个选项,我的代码成功运行了。

对我来说,解决方案需要两个"步骤":

  • 先设置UseDefaultCredentials = false,然后设置要使用Credentials = new NetworkCredential("myemail@gmail.com", "myGmailPasswordHere")的凭据。首先设置凭据,当我设置UseDefaultCredentials = false时,将使凭据属性成为null
  • 允许在我的谷歌个人资料上使用不太安全的应用程序

进行如下回调。告诉System.Net忽略错误!

在调用Send() 之前添加此

ServicePointManager.ServerCertificateValidationCallback = 
    delegate(object s, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) 
    { return true; };
smtp.Send(mail);
<mailSettings>
            <smtp from="youremail@gmail.com">
                <network host="smtp.gmail.com" password="yourpassword" port="587" userName="username"/>
            </smtp>
</mailSettings>

编辑:尝试在此之后添加此行smtp.Credentials = Credentials

Credentials = new NetworkCredential("myemail@gmail.com", "myGmailPasswordHere"),

从运行在Amazon AWS主机上的ASP.NET应用程序访问smtp.gmail.com时遇到同样的问题。事实证明,我的配置是正确的——它在另一台计算机上也运行良好——但gmail会拒绝我的登录尝试,因为我尝试从一个不寻常的位置登录。我通过网络界面(www.gmail.com)登录了gmail,不得不回答一个captcha。在那之后,它起了作用。

我的问题是我们gmail帐户的域所有者禁用了"访问不太安全的应用程序"和两步身份验证。没有办法启用它,我甚至看不到设置。所以我用我的个人账户进行了测试,结果很好。

对于C#WPF应用程序,只需遵循以下步骤即可:

       private void SendByGmail(string subject, string body, string recepientEmail, string MailMsgFrom, string MailMsgPass)
        {
            using (MailMessage mailMessage = new MailMessage())
            {
                mailMessage.From = new MailAddress(MailMsgFrom);
                mailMessage.Subject = subject;
                mailMessage.Body = body;
                mailMessage.IsBodyHtml = true;
                mailMessage.To.Add(new MailAddress(recepientEmail));
                mailMessage.Priority = System.Net.Mail.MailPriority.High;
                SmtpClient smtp = new SmtpClient();
                smtp.Host = "smtp.gmail.com";
                smtp.EnableSsl = true;
                smtp.Timeout = 200000;
                System.Net.NetworkCredential NetworkCred = new System.Net.NetworkCredential();
                NetworkCred.UserName = MailMsgFrom;
                NetworkCred.Password = MailMsgPass;
                smtp.UseDefaultCredentials = true;
                smtp.Credentials = NetworkCred;
                smtp.Port = 587;
                smtp.Send(mailMessage);
            }
        }

之后你应该得到这样的错误

smtpException   {"The SMTP server requires a secure connection or the client was not authenticated. The server response was: 5.5.1 Authentication Required. Learn more at"}   System.Net.Mail.SmtpException

要解决这个问题,首先在网络浏览器中将您的电子邮件帐户登录到您的谷歌帐户。然后只需按照这个链接谷歌帐户活动。然后你会得到最近的设备&活动。如果显示阻止您当前设备上的当前活动。只需取消阻止即可。然后重试发送电子邮件
感谢