Skip to main content
 首页 » 编程设计

c#之当发送帐户使用双因素身份验证时,如何使用 Gmail 和 SmtpClient 发送电子邮件

2024年02月01日35yjmyzz

            SmtpClient smtpClient = new SmtpClient(); 
            NetworkCredential basicCredential = 
                new NetworkCredential("sender@gmail.com", "password"); 
            MailMessage message = new MailMessage(); 
            MailAddress fromAddress = new MailAddress("sender@gmail.com"); 
 
            smtpClient.EnableSsl = true; 
            smtpClient.Host = "smtp.gmail.com"; 
            smtpClient.Port = 587; 
            smtpClient.UseDefaultCredentials = false; 
            smtpClient.Credentials = basicCredential; 
 
            message.From = fromAddress; 
            message.Subject = "your subject"; 
            //Set IsBodyHtml to true means you can send HTML email. 
            message.IsBodyHtml = true; 
            message.Body = "<h1>Hello, this is a demo ... ..</h1>"; 
            message.To.Add("receiver@gmail.com"); 
 
            try 
            { 
                smtpClient.Send(message); 
            } 
            catch (Exception ex) 
            { 
                //Error, could not send the message 
                ex.ToString(); 
            } 

//问题是这段代码在没有电话号码保护的情况下适用于 gmail。将此代码与通过客户端电话号码保护(验证)的 gmail 一起使用时会发生异常。

解决方案之一是使用远程服务器访问客户端邮件。

现在我的问题是还有另一种方法可以解决这个问题吗?第三方除外。

请您参考如下方法:

如果我没理解错的话,你是说 Google 帐户正在使用双因素身份验证。

如果是这种情况,您需要为此创建一个应用程序密码。转到 https://security.google.com/settings/security/apppasswords以您要进行双因素身份验证的帐户登录后。

在列表中,在 Select App 下选择“Other”并为其命名。单击“生成”,然后将此密码写下来,因为您只会看到一次。您将在身份验证中使用它。它将有 16 个字符长,空格无关紧要,您可以包含或省略它们。我把它们放在这里只是因为。

NetworkCredential basicCredential = 
            new NetworkCredential("sender@gmail.com", "cadf afal rqcf cafo"); 
MailMessage message = new MailMessage();