我正在使用以下代码发送电子邮件 . 代码在我的本地计算机中正常运行 . 但在 生产环境 服务器上我收到错误消息
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 . )地点:宾夕法尼亚州费城费城宾夕法尼亚州,美国如果您无法识别此登录尝试,则其他人可能会尝试访问您的帐户 . 您应该立即登录您的帐户并重置密码 . 重置密码如果是您并且您在访问帐户时遇到问题,请完成http://support.google.com/mail?p=client_login中列出的问题排查步骤 . 您诚挚的,Google帐户小组
23 回答
我使用了上面提到的所有解决方案,但只有在我从Gmail设置启用IMAP Access后才能使用它Link to Enable IMAP Access in gmail settings
当然,其他解决方案中的要点也是必需的 .
尝试更改主机,这是新主机,我得到了这个配置mozilla thunderbird
这对我有用
当您尝试从不同时区或IP地址计算机登录时,通常会发生这种情况 . 您的 生产环境 服务器和您使用的邮件ID位于不同的时区 . 选择任何一种解决方案:
1)通过远程访问登录 生产环境 服务器,并使用您的凭据登录gmail一次 . 他们会要求确认,确认并注销 .
或者2)登录gmail到您的本地计算机,按照Link并选择review this activity并采取适当的措施 .
When you try to send mail from code and you find the error "The SMTP server requires a secure connection or the client was not authenticated. The server response was: 5.5.1 Authentication Required", than the error might occur due to following cases.
case 1: 当密码错误时
case 2: 当您尝试从某个应用程序登录时
case 3: 当您尝试从您的时区/域/计算机以外的域登录时(在大多数情况下从代码发送邮件时都是这种情况)
There is a solution for each
solution for case 1: 输入正确的密码 .
solution 1 for case 2 :转到以下链接https://www.google.com/settings/security/lesssecureapps的安全设置,启用安全性较低的应用 . 这样您就可以从所有应用程序登录 .
solution 2 for case 2 :(参见https://stackoverflow.com/a/9572958/52277)启用双因素身份验证(也称为两步验证),然后生成应用程序专用密码 . 使用新生成的密码通过SMTP进行身份验证 .
solution 1 for case 3: (这可能会有所帮助)您需要查看活动 . 但由于最新的安全标准,链接无效,因此审查活动将无济于事 . 所以试试下面的情况 .
solution 2 for case 3 :如果您已将代码托管在 生产环境 服务器上的某个位置,并且您可以访问 生产环境 服务器,则可以将远程桌面连接连接到 生产环境 服务器,并尝试从 生产环境 服务器的浏览器登录一次 . 这将为登录google添加excpetioon,您将被允许从代码登录 .
But what if you don't have access to the production server. 尝试解决方案3
solution 3 for case 3: 您必须为您的Google帐户启用其他时区/ IP登录 .
要执行此操作,请按照链接https://g.co/allowaccess进行操作,并通过单击“继续”按钮进行访问 .
就是这样 . 干得好 . 现在,您可以从任何计算机和任何应用程序登录到您的谷歌帐户 .
这是一个安全问题,Gmail默认阻止您从自定义应用程序访问您的电子邮件帐户 . 您可以将其设置为接受来自应用程序的登录 .
登录到您的电子邮箱后,CLICK HERE
这将带您进入以下页面
今天花了几个小时尝试每个解决方案,我仍然无法通过这个确切的错误 . 我用这种方式多次使用gmail,所以我知道这是愚蠢的,但我没有解决问题 . 我终于在我的案子中偶然发现了解决方案,以为我会分享 .
首先,上面的大多数答案也是必需的,但在我的情况下,在创建SmtpClient类时,这是一个简单的代码排序问题 .
在下面的第一个代码段中,请注意“Credentials = creds”行所在的位置 . 即使您已正确设置其他所有内容,此实现也将生成此问题中引用的错误 .
但是,如果将Credentials setter调用移到底部,则会发送电子邮件而不会出错 . 我没有对周围的代码进行任何更改...即...用户名/密码等 . 显然,EnableSSL,UseDefaultCredentials或DeliveryMethod依赖于首先设置的凭据....我没有测试所有人都想知道它是哪一个 .
希望这有助于在将来为其他人带来一些麻烦 .
嗨我有同样的问题,
我做了什么来解决它 . 是打开不太安全的应用程序 . 连接到我的Gmail帐户后 . 我输入了这个链接:https://www.google.com/settings/security/lesssecureapps
然后我打开安全的应用程序,并且它工作 . 上面也有人说过
只需按照谷歌中的步骤电子邮件并启用不太安全的应用
我遇到了同样的问题 . 当您启用2步验证(MFA)时会发生这种情况 . 只需关闭2步验证,您的问题就应该解决了 .
我有一个以前工作的代码,现在抛出此错误 . 密码没问题 . 无需将消息转换为base64 . 事实证明,我需要做以下事情:
关闭双因素身份验证
将"Allow less secure apps"设置为ON
从 生产环境 服务器登录您的Gmail帐户
Go here以及批准登录活动
在 生产环境 服务器中运行您的应用
工作代码
关闭双因素身份验证
将"Allow less secure apps"设置为ON(同一页面,需要滚动到底部)
下面是我的代码 . 我也有同样的错误,但问题是我给了我的密码错误 . 下面的代码将完美地工作..它
你可以参考my blog
对于部署到Microsoft Azure的应用程序,我遇到了同样的问题 .
首先,我在下一页(以gmail用户身份登录)批准了所有未知设备(一些源自爱尔兰的IP地址):https://security.google.com/settings/u/1/security/secureaccount
我为客户端使用了以下设置:
它只在我在smtp-client上设置以下属性后才开始工作:
对我有用的是为不太安全的应用程序激活选项(我使用的是VB.NET)
请登录到您的帐户,然后转到google.com/settings/security/lesssecureapps
只需打开或gmail的设置 . 见下图给出的图像:
我尝试了这里找到的所有建议,从启用不太安全的应用程序到尝试端口587 ......没有任何效果 . 最后我只是注释了
UseDefaultCredentials = false
这一行 . 如果我没有触摸那个布尔值,一切都有效 .来自Tomasz Madeyski的评论解决了我的问题...他说,SetDefaultCredential存在一个错误,他说:
“问题是在UseDefaultCredentials setter中有这样的代码:this.transport.Credentials = value?(ICredentialsByHost)CredentialCache.DefaultNetworkCredentials:(ICredentialsByHost)null;它会覆盖由Credentials setter设置的凭据 . 对我来说,它看起来像SmtpClient的bug”
如果您在设置凭据后放置
smtpClient.UseDefaultCredentials = false
...此行设置为空这些凭据...我真的看了很多想法,唯一的解决方案是这种方式(适用于不同的电子邮件提供商):
我是商业用户的谷歌应用程序,即使在拥有所有正确的设置(smtp,port,enableSSL等)后,我花了最后几个小时处理这个问题 . 这对我和在尝试发送电子邮件时抛出5.5.1错误的网站有用:
登录您的admin.google.com
点击SECURITY < - 如果这不是't visible, then click ' MORE CONTROLS',并从列表中添加它
单击“基本设置”
滚动到“基本设置”框的底部,单击链接:'Go to settings for less secure apps'
选择选项#3:为所有用户强制访问不太安全的应用程序(不推荐)
按窗口底部的“保存”
这样做后,我的网站上的电子邮件表格再次运行 . 祝好运!
您可能需要从gmail创建/生成特定的APP密码 . 然后,您的应用或脚本将使用此新密码而不是您的常规密码 . 您的常规密码仍然可以正常使用 .
这就是为我做的事情 . 我仍然使用相同的电子邮件帐户,但必须生成新的应用专用密码 .
https://support.google.com/accounts/answer/185833?hl=en
基本上你可以在这里做到:https://security.google.com/settings/security/apppasswords
如果你正在使用Gmail .
2-浏览link
3-允许安全性较低的应用:开启
请享用....
你应该 disallow less secure apps to access your google account .
去做:
https://myaccount.google.com/lesssecureapps
NOVEMBER 2018, 已尝试过上述所有内容但没有成功 .
以下是最终有效的解决方案 . 不幸的是,它没有使用SSL,但它的工作原理!
在等待smtp.SendMailAsync(mail)之前不要设置断点;
:)
当它等待一个断点时,当我删除断点时它会产生这个错误