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

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

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

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

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

服务器的回复是:

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

更新:

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

我采用了这篇文章和其他EmailSender项目中的一些想法,在Codeplex上创建了一个EmailSender项目。它是为可测试性而设计的,支持我最喜欢的SMTP服务,如GoDaddy和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帐户上启用了双重身份验证(也称为两步验证),那么您必须生成一个特定于应用程序的密码,并使用新生成的密码通过SMTP进行身份验证。

要创建一个密码,请访问:https://www.google.com/settings/并选择授权应用程序和站点来生成密码。

You can also connect via port 465, but due to some limitations of the System.Net.Mail namespace you may have to alter your code. This is because the namespace does not offer the ability to make implicit SSL connections. This is discussed at http://blogs.msdn.com/b/webdav_101/archive/2008/06/02/system-net-mail-with-ssl-to-authenticate-against-port-465.aspx, and I have supplied an example of how to use the CDO (Collaborative Data Object) in another discussion (GMail SMTP via C# .Net errors on all ports).

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

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

与smtpclient上述参数工作在gmail

我也遇到了同样的问题,但原来是我的病毒防护程序阻止了发出的“垃圾邮件”。关闭这个允许我使用端口587通过GMail发送SMTP电子邮件

谷歌不再允许“不太安全的应用程序”,所以这对普通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支持使用第三方应用程序或设备来询问您 仅使用您的用户名和登录您的谷歌帐户 密码。 重要提示:此截止日期不适用于谷歌工作区或谷歌工作区 云身份客户。这些客户的执行日期 将于晚些时候在工作空间博客上公布。 欲了解更多信息,请继续阅读。