我正在使用以下代码发送电子邮件。代码在我的本地计算机中正常运行。但在生产服务器上我收到错误消息
var fromAddress = new MailAddress("mymailid@gmail.com");
var fromPassword = "xxxxxx";
var toAddress = new MailAddress("yourmailid@yourdoamain.com");
string subject = "subject";
string body = "body";
System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient
{
Host = "smtp.gmail.com",
Port = 587,
EnableSsl = true,
DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network,
UseDefaultCredentials = false,
Credentials = new NetworkCredential(fromAddress.Address, fromPassword)
};
using (var message = new MailMessage(fromAddress, toAddress)
{
Subject = subject,
Body = body
})
smtp.Send(message);
在我的Gmail A / c上,我从生产服务器
运行代码后收到了以下电子邮件嗨,
最近有人使用您的密码尝试登录您的Google 帐户mymailid@gmail.com。这个人正在使用这样的应用程序 作为电子邮件,客户端或移动设备。
我们阻止了登录尝试,以防这是一名劫机者 访问您的帐户。请查看登录尝试的详细信息:
2014年1月3日星期五13:56:08 UTC时间地址:xxx.xx.xx.xxx (abcd.net。)地点:费城PA,费城,宾夕法尼亚州,美国
如果您不认识此登录尝试,则可能是其他人 试图访问您的帐户。您应该登录自己的帐户 立即重置密码。
重设密码
如果是您并且您在访问帐户时遇到问题, 完成列出的故障排除步骤 http://support.google.com/mail?p=client_login
您诚挚的,Google帐户小组
答案 0 :(得分:248)
当您尝试从代码发送邮件时,您发现错误“SMTP服务器需要安全连接或客户端未经过身份验证。服务器响应是:5.5.1需要身份验证”,而不是错误可能由于以下情况而发生。
案例1:,当密码错误时
案例2:当您尝试从某个应用
登录时 当您尝试从您的时区/域/计算机以外的域登录时案例3 (在大多数情况下从代码发送邮件时就是这种情况)
每个
都有一个解决方案 案例1的解决方案:输入正确的密码。
针对案例2的解决方案1 :转到以下链接 https://www.google.com/settings/security/lesssecureapps 的安全设置,并启用安全性较低的应用。这样您就可以从所有应用程序登录。
案例2的解决方案2 :(请参阅https://stackoverflow.com/a/9572958/52277)启用双因素身份验证(也称为两步验证),然后生成应用程序专用密码。使用新生成的密码通过SMTP进行身份验证。
案例3的解决方案1:(这可能会有所帮助)您需要查看活动。但由于最新的安全标准,链接无效,因此审核该活动将无济于事。请尝试以下案例。
案例3的解决方案2 :如果您已将代码托管在生产服务器上的某个位置,并且您有权访问生产服务器,那么请将远程桌面连接连接到生产服务器并尝试登录一次从生产服务器的浏览器。 这将为登录google添加excpetioon,您将被允许从代码登录。
但是,如果您无权访问生产服务器,该怎么办。 尝试解决方案3
案例3的解决方案3: 您必须为其Google帐户启用其他时区/ IP登录。
执行此操作,请点击 https://g.co/allowaccess 链接,然后点击“继续”按钮进行访问。
就是这样。干得好。现在,您可以从任何计算机和任何应用程序登录到您的Google帐户。
答案 1 :(得分:171)
当您尝试从不同时区或IP地址计算机登录时,通常会发生这种情况。您的生产服务器和您使用的邮件ID位于不同的时区。选择以下两种解决方案之一:
1)通过远程访问登录生产服务器,并使用您的凭据登录gmail一次。他们会要求确认,确认并注销。
或2)将gmail登录到您的本地计算机,按照Link进行操作,然后选择review this activity并采取相应措施。
答案 2 :(得分:96)
答案 3 :(得分:18)
今天花了几个小时尝试每个解决方案,我仍然无法通过这个确切的错误。我用这种方式多次使用gmail所以我知道这是愚蠢的,但我没有做任何事情来解决这个问题。我终于在我的案子中偶然发现了解决方案,以为我会分享。
首先,上面的大部分答案都是必需的,但在我的情况下,在创建SmtpClient类时,只需要对代码进行排序即可。
在下面的第一个代码段中,请注意"凭据=信用卡"线位于。即使您已正确设置其他所有内容,此实现也会生成此问题中引用的错误。
System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient
{
Host = Emailer.Host,
Port = Emailer.Port,
Credentials = creds,
EnableSsl = Emailer.RequireSSL,
UseDefaultCredentials = false,
DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network
}
但是,如果您将凭据设置者调用移到底部,则会发送电子邮件而不会出错。我没有对周围的代码做任何更改...即...用户名/密码等。显然,EnableSSL,UseDefaultCredentials或DeliveryMethod依赖于首先设置的凭据....我没有' t测试所有人以确定它是哪一个。
System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient
{
Host = Emailer.Host,
Port = Emailer.Port,
EnableSsl = Emailer.RequireSSL,
UseDefaultCredentials = false,
DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network,
Credentials = creds
}
希望这有助于在将来为其他人带来一些麻烦。
答案 4 :(得分:12)
您好我有同样的问题,
我已经做了什么来解决它。是打开不太安全的应用程序。 连接到我的Gmail帐户后。我输入了这个链接:https://www.google.com/settings/security/lesssecureapps
然后我打开安全的应用程序,并且它工作了。 上面已经说过了
答案 5 :(得分:8)
只需按照google电子邮件中的步骤启用安全性较低的应用即可。
答案 6 :(得分:8)
我有一个以前正在运行的代码,现在抛出此错误。密码没问题。无需将消息转换为base64。事实证明,我需要做以下事情:
工作代码
public static void SendEmail(string emailTo, string subject, string body)
{
var client = new SmtpClient("smtp.gmail.com", 587)
{
Credentials = new NetworkCredential("youremail@gmail.com", "secretpassword"),
EnableSsl = true
};
client.Send("youremail@gmail.com", emailTo, subject, body);
}
答案 7 :(得分:6)
我遇到了同样的问题。当您打开2步验证(MFA)时会发生这种情况。 只需关闭2步验证即可解决您的问题。
答案 8 :(得分:6)
您需要从此处打开“允许安全程度较低的应用程序” https://myaccount.google.com/lesssecureapps
答案 9 :(得分:4)
下面是我的代码。我也有同样的错误,但问题是我给了我的密码错误。下面的代码将完美地工作..它
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);
您可以在my blog
中推荐答案 10 :(得分:3)
答案 11 :(得分:2)
对于部署到Microsoft Azure的应用程序,我遇到了同样的问题。
SmtpException:SMTP服务器需要安全连接或 客户端未经过身份验证。服务器响应是:5.5.1 需要验证。
首先,我在下一页上批准了所有未知设备(一些来自爱尔兰的IP地址)(以gmail用户身份登录): https://security.google.com/settings/u/1/security/secureaccount
我为客户端使用了以下设置:
var client = new SmtpClient("smtp.gmail.com");
client.Port = 587;
client.EnableSsl = true;
client.UseDefaultCredentials = false;
client.Credentials = new NetworkCredential("my_user_name@gmail.com", "my_password");
仅在我在smtp-client上设置以下属性后才开始工作:
client.TargetName = "STARTTLS/smtp.gmail.com";
答案 12 :(得分:2)
来自Tomasz Madeyski的评论解决了我的问题......他说,SetDefaultCredential存在一个错误,他说:
&#34;问题是在UseDefaultCredentials setter中有这样的代码:this.transport.Credentials = value? (ICredentialsByHost)CredentialCache.DefaultNetworkCredentials:(ICredentialsByHost)null;它会覆盖Credentials setter设置的凭据。对我来说,它看起来像SmtpClient的bug&#34;
如果您在设置凭据后放置smtpClient.UseDefaultCredentials = false
...此行设置为空这些凭据...
答案 13 :(得分:2)
对我来说有用的是激活安全性较低的应用程序选项(我使用的是VB.NET)
Public Shared Sub enviaDB(ByRef body As String, ByRef file_location As String)
Dim mail As New MailMessage()
Dim SmtpServer As New SmtpClient("smtp.gmail.com")
mail.From = New MailAddress("from@gmail.com")
mail.[To].Add("to@gmail.com")
mail.Subject = "subject"
mail.Body = body
Dim attachment As System.Net.Mail.Attachment
attachment = New System.Net.Mail.Attachment(file_location)
mail.Attachments.Add(attachment)
SmtpServer.Port = 587
SmtpServer.Credentials = New System.Net.NetworkCredential("user", "password")
SmtpServer.EnableSsl = True
SmtpServer.Send(mail)
End Sub
然后登录您的帐户,然后转到 google.com/settings/security/lesssecureapps
答案 14 :(得分:1)
2018年11月,上面的所有尝试均未成功。
下面是最终起作用的解决方案。不幸的是,它没有使用SSL,但是可以正常工作!!!
var fromAddress = new MailAddress(asd@asd.com, "From Name");
var toAddress = new MailAddress("tosend@asd.com", "To Name");
const string subject = "Subject";
const string body = "Body";
var smtp = new SmtpClient
{
Host = "aspmx.l.google.com",
Port = 25,
EnableSsl = false
};
using (var message = new MailMessage(fromAddress, toAddress)
{
Subject = subject,
Body = body
})
{
smtp.Send(message);
}
答案 15 :(得分:1)
我尝试了这里找到的所有建议,从启用不太安全的应用程序到尝试端口587 ......没有任何效果。最后,我刚评论了UseDefaultCredentials = false
行。如果我没有触及那个布尔值,一切都有效。
答案 16 :(得分:0)
不要在等待smtp.SendMailAsync(mail);之前放置断点;
:)
当它等待断点时,当我删除断点时它给出了此错误
答案 17 :(得分:0)
首先,我在GoDaddy购买了域,然后单击了此链接 https://www.google.com/settings/security/lesssecureapps 我没有该选项,它显示此消息“域管理员管理这些设置”,因此我转到管理控制台https://admin.google.com/
答案 18 :(得分:0)
答案 19 :(得分:0)
答案 20 :(得分:0)
您可能需要从gmail创建/生成特定的APP密码。 然后,您的应用或脚本将使用此新密码而不是您的常规密码。 您的常规密码仍可正常使用。
这就是为我做的事情。 我仍然使用相同的电子邮件帐户,但必须生成新的应用专用密码。
https://support.google.com/accounts/answer/185833?hl=en
基本上你可以在这里做到: https://security.google.com/settings/security/apppasswords
答案 21 :(得分:0)
我是商家用户的谷歌应用程序,即使在拥有所有正确的设置(smtp,port,enableSSL等)后,我花了最后几个小时处理这个问题。以下是对我和在尝试发送电子邮件时抛出5.5.1错误的网站有用的内容:
执行此操作后,我的网站上的电子邮件表单再次正常运行。祝你好运!
答案 22 :(得分:0)
我真的看了很多想法,唯一的解决方案是这种方式(适用于不同的电子邮件提供商):
try
{
ViewProgressbar("Try to connect mail-server...", progressBar1.Value = 20);
string host = dsProvider.Rows[y]["POP_hostOut"].ToString();
int port = int.Parse(dsProvider.Rows[y]["POP_portOut"].ToString()); //587
string[] email = von1.Split('@');
string userName = (dsProvider.Rows[y]["login"].ToString() == "email[0]@email[1]")? email[0]+"@"+email[1] : email[0];
string password = layer.getUserPassword(listSender.SelectedValue.ToString());
SmtpClient client = new SmtpClient(host, port);
client.DeliveryMethod = SmtpDeliveryMethod.Network;
client.UseDefaultCredentials = false;
//A idea from MSDN but it not works. You got the "The server response was: 5.5.1 Authentication Required."
//System.Net.NetworkCredential myCreds = new System.Net.NetworkCredential(userName, password, host);
//System.Net.CredentialCache cache = new System.Net.CredentialCache();
//cache.Add(host, port, "NTLM", myCreds);
///cache.GetCredential(host, port, "NTLM"); //NTLM
client.Credentials = new System.Net.NetworkCredential(userName, password);
client.Host = host;
client.Port = port;
client.EnableSsl = true;
client.Send(message);
ViewProgressbar();
}
catch (SmtpException ex)...
答案 23 :(得分:-1)
我使用了上述所有解决方案,但只有在我从Gmail设置Link to Enable IMAP Access in gmail settings
启用IMAP访问后才能使用它当然,其他解决方案中的要点也是必需的。
答案 24 :(得分:-5)
尝试更改主机,这是新主机,我得到了这个配置mozilla thunderbird
Host = "smtp.googlemail.com"
对我有用