我正在使用以下代码发送电子邮件。代码在我的本地机器上正常工作。但是在生产服务器上,我得到了错误消息

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上,我从生产服务器运行代码后收到了以下电子邮件

Hi , Someone recently used your password to try to sign in to your Google Account mymailid@gmail.com. This person was using an application such as an email, client or mobile device. We prevented the sign-in attempt in case this was a hijacker trying to access your account. Please review the details of the sign-in attempt: Friday, 3 January 2014 13:56:08 o'clock UTC IP Address: xxx.xx.xx.xxx (abcd.net.) Location: Philadelphia PA, Philadelphia, PA, USA If you do not recognise this sign-in attempt, someone else might be trying to access your account. You should sign in to your account and reset your password immediately. Reset password If this was you and you are having trouble accessing your account, complete the troubleshooting steps listed at http://support.google.com/mail?p=client_login Yours sincerely, The Google Accounts team


当前回答

尝试改变主机,这是一个新的,我得到了这个配置mozilla雷鸟

Host = "smtp.googlemail.com"

这对我很有用

其他回答

您可能需要从gmail创建/生成一个特定的APP密码。 您的应用程序或脚本将使用这个新密码,而不是您的常规密码。 您的常规密码仍然可以正常工作。

这对我来说很重要。 我仍然使用相同的电子邮件帐户,但必须生成一个新的应用程序特定的密码。

https://support.google.com/accounts/answer/185833?hl=en

基本上你可以在这里做: https://security.google.com/settings/security/apppasswords

只需遵循谷歌电子邮件中的步骤,启用不太安全的应用程序。

对我有效的是激活不太安全的应用程序的选项(我使用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

我尝试了这里找到的所有建议,从启用不太安全的应用程序,到尝试587端口……毫无效果。最后,我只注释掉了UseDefaultCredentials = false这一行。如果我不碰这个布尔值,一切都能正常工作。

更新2022

更不安全的应用程序方法不再工作

您应该迁移到GMail SMTP API

仅使用gmail id和密码发送电子邮件不再有效。您必须从谷歌云控制台设置api并创建OAuth凭据。

链接到谷歌云控制台

连结至官方指南

链接到一个简单的指南

原来的答案

这是一个安全问题。Gmail默认情况下阻止自定义应用程序访问您的电子邮件帐户。您可以将其设置为接受应用程序的登录。

登录您的电子邮件后,点击这里

这将带您到下面的页面