如何通过 Gmail 使用 C# 发送电子邮件

Posted

技术标签:

【中文标题】如何通过 Gmail 使用 C# 发送电子邮件【英文标题】:How to send an e-mail with C# through Gmail 【发布时间】:2015-06-10 11:39:57 【问题描述】:

尝试通过我的网络服务发送电子邮件时出现错误。我尝试启用对安全性较低的应用程序的访问,禁用两步验证并通过网络浏览器登录帐户。 SO上的任何解决方案都不适合我。我仍然得到:

错误:System.Net.Mail.SmtpException:SMTP 服务器需要 安全连接或客户端未通过身份验证。服务器 响应是:5.5.1 需要身份验证。

我可以做些什么来解决这个问题?

namespace EmailService

    public class Service1 : IService1
        
        public string SendEmail(string inputEmail, string subject, string body)
        
            string returnString = "";
            try
            
                MailMessage email = new MailMessage();
                SmtpClient smtp = new SmtpClient();
                smtp.Host = "smtp.gmail.com";

                // set up the Gmail server
                smtp.EnableSsl = true;
                smtp.Port = 587;
                smtp.Credentials = new System.Net.NetworkCredential("myemail@gmail.com", "mypassword");
                smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
                smtp.UseDefaultCredentials = false;

                // draft the email
                MailAddress fromAddress = new MailAddress("cse445emailservice@gmail.com");
                email.From = fromAddress;
                email.To.Add(inputEmail);
                email.Subject = body;
                email.Body = body;

                smtp.Send(email);

                returnString = "Success! Please check your e-mail.";
            
            catch(Exception ex)
            
                returnString = "Error: " + ex.ToString();
            
            return returnString;
        
    

【问题讨论】:

看看这是否有帮助:***.com/questions/18503333/… 您是否尝试过 ping 服务器,如果是,那么 Eghbal Sohrabi 提到的解决方案是可以的 @Shubhojit ping Google 服务器? @Johnny,我的意思是说您的防火墙是否没有阻止请求,这种情况有时会发生。只是为了确定...... 那么为什么我可以从 localhost 成功运行我的类似代码,但从 Web 服务器运行时却出现此错误? 【参考方案1】:

去这里:Less secure apps,使用您的电子邮件和密码登录,用于在您的 c# 代码中发送邮件,然后选择Turn On

也请转到此链接并点击继续 Allow access to your Google account

我也稍微修改了一下:

public string sendit(string ReciverMail)

    MailMessage msg = new MailMessage();

    msg.From = new MailAddress("YourMail@gmail.com");
    msg.To.Add(ReciverMail);
    msg.Subject = "Hello world! " + DateTime.Now.ToString();
    msg.Body = "hi to you ... :)";
    SmtpClient client = new SmtpClient();
    client.UseDefaultCredentials = true;
    client.Host = "smtp.gmail.com";
    client.Port = 587;
    client.EnableSsl = true;
    client.DeliveryMethod = SmtpDeliveryMethod.Network;
    client.Credentials = new NetworkCredential("YourMail@gmail.com", "YourPassword");
    client.Timeout = 20000;
    try
    
       client.Send(msg);
        return "Mail has been successfully sent!";
    
    catch (Exception ex)
    
        return "Fail Has error" + ex.Message;
    
    finally
    
       msg.Dispose();
    

如果上面的代码不起作用,请尝试像下面的代码一样更改它:

    SmtpClient client = new SmtpClient();
    client.Host = "smtp.gmail.com";
    client.Port = 587;
    client.EnableSsl = true;
    client.DeliveryMethod = SmtpDeliveryMethod.Network;
    client.UseDefaultCredentials = false;
    client.Credentials = new NetworkCredential("YourMail@gmail.com", "YourPassword");

【讨论】:

这两种方法我都试过了,还是不行。 原来smtp.UseDefaultCredentials = false; 必须在smtp.Credentials = new System.Net.NetworkCredential("myemail@gmail.com", "mypassword"); 之前我只是交换了这些行,一切正常。 您的意思是将smtp.UseDefaultCredentials = true; 更改为smtp.UseDefaultCredentials = false; 并将其放在smtp.Credentials = new System.Net.NetworkCredential("myemail@gmail.com", "mypassword"); 之前,如果是,请告诉我编辑我的答案。 是的,我认为默认凭据需要为 false,并且该行必须在另一行之前。 我一直试图让它工作几个小时,我所要做的就是点击继续按钮!非常感谢你,你是生活的品味

以上是关于如何通过 Gmail 使用 C# 发送电子邮件的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在 gmail.com 帐户中找到从 C# 以编程方式发送的电子邮件?

使用 gmail smtp 通过代理发送电子邮件

如何使用 Gmail 的 SMTP 客户端在 C# 中向自己发送电子邮件,而无需在 Gmail 设置中启用安全性较低的应用程序的访问权限?

c# SmtpClient 类无法使用 gmail 发送电子邮件

通过 GoDaddy 上的 gmail SMTP 发送电子邮件 [关闭]

使用gmail smtp c#发送电子邮件[重复]