出于某种原因,既不是接受的答案,也没有其他工作为我“通过Gmail在。net发送电子邮件”。为什么它们不会起作用?

更新:我已经在另一个问题中尝试了所有的答案(接受的和其他的),但没有一个有效。

我只是想知道它是否适用于其他人,否则谷歌可能已经改变了一些东西(以前发生过)。

当我尝试使用SmtpDeliveryMethod的代码段时。网络,我很快收到一个SmtpException发送(消息)。信息是

SMTP服务器需要安全连接,否则客户端未经过身份验证。

服务器的回复是:

5.5.1认证要求在“<——说真的,它到此结束。

更新:

这是我很久以前问过的一个问题,公认的答案是我在不同的项目中使用过很多很多次的代码。

我采用了这篇文章和其他EmailSender项目中的一些想法,在Codeplex上创建了一个EmailSender项目。它是为可测试性而设计的,支持我最喜欢的SMTP服务,如GoDaddy和Gmail。


当前回答

我得到了同样的错误,上面的解决方案都没有帮助。

我的问题是,我是从一个远程服务器上运行的代码,而这个服务器从未用于登录gmail帐户。

我在远程服务器上打开浏览器,并从那里登录到gmail。它问了一个安全问题来验证是我,因为这是一个新的位置。在做了安全检查后,我能够通过代码进行身份验证。

其他回答

CVertex,确保检查你的代码,如果没有发现什么,就发布出来。我只是在一个测试ASP上启用这个。我在NET网站上工作,它工作。

实际上,在某种程度上,我的代码出现了问题。直到我在一个控制台程序上有一个更简单的版本,并看到它正在工作(Gmail端没有你所担心的变化),我才发现它。下面的代码就像你提到的例子一样:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Mail;
using System.Net;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            var client = new SmtpClient("smtp.gmail.com", 587)
            {
                Credentials = new NetworkCredential("myusername@gmail.com", "mypwd"),
                EnableSsl = true
            };
            client.Send("myusername@gmail.com", "myusername@gmail.com", "test", "testbody");
            Console.WriteLine("Sent");
            Console.ReadLine();
        }
    }
}

我还得到了它的工作使用网络的组合。config, http://msdn.microsoft.com/en-us/library/w355a94k.aspx和code(因为在配置文件中没有匹配的EnableSsl:)。

2021年更新

默认情况下,您还需要在您的gmail设置页面:google.com/settings/security/lesssecureapps中启用“不太安全的应用程序”。这是必要的,如果你得到异常" '服务器的响应是:5.5.1认证需要。-感谢@Ravendarksky

问题不是通过gmail发送的技术能力问题。这在大多数情况下都适用。如果你不能让机器发送,通常是由于机器没有经过至少一次人工控制的验证。

大多数用户面临的问题是,谷歌总是决定更改出站限制。您应该始终在解决方案中添加防御性代码。如果你开始看到错误,放慢你的发送速度,只是停止发送一段时间。如果您继续尝试发送谷歌,有时会在您再次发送之前增加额外的延迟时间。

在我目前的系统中,我所做的是在每条消息之间发送1.5秒的延迟。如果我发现任何错误,停止5分钟,然后重新开始。这通常是有效的,并且允许您发送到帐户的限制(最后我检查了它是每天2000个高级客户登录)。

哦……令人惊奇的… 首先,我不知道为什么不能发电子邮件。 但是当我改变了这两行的顺序后,它可以很好地工作。

//(1)
client.UseDefaultCredentials = true;
//(2)
client.Credentials = new System.Net.NetworkCredential("username@gmail.com", "password");

谷歌不再允许“不太安全的应用程序”,所以这对普通gmail用户来说是不可能的。

https://support.google.com/accounts/answer/6010255?hl=en#zippy=%2Cif-less-secure-app-access-is-on-for-your-account

从谷歌:

为了保证您的账户安全,从2022年5月30日起,谷歌号 long支持使用第三方应用程序或设备来询问您 仅使用您的用户名和登录您的谷歌帐户 密码。 重要提示:此截止日期不适用于谷歌工作区或谷歌工作区 云身份客户。这些客户的执行日期 将于晚些时候在工作空间博客上公布。 欲了解更多信息,请继续阅读。

我也尝试了许多解决方案,但做一些改变,它会起作用

host = smtp.gmail.com
port = 587
username = email@gmail.com
password = password
enabledssl = true

与smtpclient上述参数工作在gmail