Gmail:如何以编程方式发送电子邮件

Posted

技术标签:

【中文标题】Gmail:如何以编程方式发送电子邮件【英文标题】:Gmail: How to send an email programmatically 【发布时间】:2010-11-22 11:59:06 【问题描述】:

可能完全重复:Sending Email in C#.NET Through Gmail

嗨,

我正在尝试使用 gmail 发送电子邮件:

我尝试了在此站点和其他站点上找到的各种示例,但总是遇到相同的错误: Unable to connect to the remote server --> System.net.Sockets.SocketException: No connection could be made because the target active denied it 209.85.147.109:587

    public static void Attempt1()
    
        var client = new SmtpClient("smtp.gmail.com", 587)
        
            Credentials = new NetworkCredential("MyEmailAddress@gmail.com", "MyPassWord"),
            EnableSsl = true
        ;
        client.Send("MyEmailAddress@gmail.com", "some.email@some.com", "test", "testbody"); 
    

有什么想法吗?

更新

更多细节。

也许我应该说一下我所做的其他尝试给了我同样的错误: (请注意,当我没有指定端口时,它会尝试使用端口 25)

    public static void Attempt2()
    
        var fromAddress = new MailAddress("MyEmailAddy@gmail.com", "From Name");
        var toAddress = new MailAddress("MyEmailAddy@dfdf.com", "To Name");
        const string fromPassword = "pass";
        const string subject = "Subject";
        const string body = "Body";
        var smtp = new SmtpClient
        
            Host = "smtp.gmail.com",
            Port = 587,
            EnableSsl = true,
            DeliveryMethod = SmtpDeliveryMethod.Network,
            UseDefaultCredentials = false,
            Credentials = new NetworkCredential(fromAddress.Address, fromPassword)
        ;
        using (var message = new MailMessage(fromAddress, toAddress)
        
            Subject = subject,
            Body = body
        
            )  smtp.Send(message); 
    


    public static void Attempt3()
    
        MailMessage mail = new MailMessage();
        mail.To.Add("MyEmailAddy@dfdf.com");
        mail.From = new MailAddress("MyEmailAddy@gmail.com");
        mail.Subject = "Email using Gmail";

        string Body = "Hi, this mail is to test sending mail" +
                      "using Gmail in ASP.NET";
        mail.Body = Body;

        mail.IsBodyhtml = true;
        SmtpClient smtp = new SmtpClient();
        smtp.Host = "smtp.gmail.com";
        smtp.Credentials = new System.Net.NetworkCredential
             ("MyEmailAddy@gmail.com", "pass");
        smtp.EnableSsl = true;
        smtp.Send(mail);
    

【问题讨论】:

您确定您的登录凭据设置正确吗? 您不是在服务器托管的 Web 应用程序中运行它吗? Sending email in .NET through Gmail的可能重复 【参考方案1】:

我正在使用以下代码:

SmtpClient sc = new SmtpClient("smtp.gmail.com");
NetworkCredential nc = new NetworkCredential("username", "password");//username doesn't include @gmail.com
sc.UseDefaultCredentials = false;
sc.Credentials = nc;
sc.EnableSsl = true;
sc.Port = 587;
try 
    sc.Send(mm);
 catch (Exception ex) 
    EventLog.WriteEntry("Error Sending", EventLogEntryType.Error);

【讨论】:

试过了,同样的错误。可能是防火墙问题还是什么?我现在下班做,今晚我可以在家试试 如果您有两步验证,那么您需要创建一个新的应用访问密码,并使用该密码(相同的用户名)。 security.google.com/settings/security/apppasswords【参考方案2】:

使用下面的代码,就可以成功了。

MailMessage mail = new MailMessage();
mail.From = new MailAddress("abc@mydomain.com", "Enquiry");
mail.To.Add("abcdef@yahoo.com");
mail.IsBodyHtml = true;
mail.Subject = "Registration";
mail.Body = "Some Text";
mail.Priority = MailPriority.High;

SmtpClient smtp = new SmtpClient("smtp.gmail.com", 587);
//smtp.UseDefaultCredentials = true;
smtp.Credentials = new System.Net.NetworkCredential("xyz@gmail.com", "<my gmail pwd>");
smtp.EnableSsl = true;
//smtp.DeliveryMethod = SmtpDeliveryMethod.Network;

smtp.Send(mail);

但是,使用 gmail 存在问题。邮件将发送成功,但收件人收件箱中的“发件人地址”中的 gmail 地址,而不是代码中提到的“发件人地址”。

要解决此问题,请按照以下链接中提到的步骤操作。

http://karmic-development.blogspot.in/2013/10/send-email-from-aspnet-using-gmail-as.html

在执行上述所有步骤之前,您需要验证您的 gmail 帐户以允许访问您的应用程序和设备。请在以下链接查看帐户认证的所有步骤:

http://karmic-development.blogspot.in/2013/11/allow-account-access-while-sending.html

【讨论】:

【参考方案3】:

这是我从 Java 连接到 Gmail 的连接资源

<!-- Java Mail -->
    <Resource name="mail/MailSession" auth="Container" type="javax.mail.Session" 
                mail.debug="true"
                mail.transport.protocol="smtp"
                mail.smtp.host="smtp.gmail.com"
                mail.smtp.user="youremail@gmail.com"
                mail.smtp.password="yourpassword"
                mail.smtp.port="465"
                mail.smtp.starttls.enable="true"
                mail.smtp.auth="true"
                mail.smtp.socketFactory.port="465"
                mail.smtp.socketFactory.class="javax.net.ssl.SSLSocketFactory"
                mail.smtp.socketFactory.fallback="false" 
                mail.store.protocol="pop3"
                mail.pop3.host="pop.gmail.com"
                mail.pop3.port="995" />

在安全端口(465 用于 SMTP,995 用于 POP3)上连接您的 Gmail 帐户,并使用任何可用的 .NET SSL 工厂安全地连接到 Gmail。

【讨论】:

【参考方案4】:

您确定您的 GMail 帐户设置为允许 POP/SMTP 连接吗?这是一个可配置的选项,您可以根据自己的选择打开和关闭。

【讨论】:

似乎 gmail 允许您启用 imap 或 pop ...但是 ...这似乎与以编程方式从您的 gmail 帐户发送电子邮件不同。【参考方案5】:

您可以在http://codersatwork.wordpress.com/2010/02/14/sending-email-using-gmail-smtp-server-and-spring-mail/ 看到我的博客文章,其中解释了如何使用 Spring Mail 通过 gmail smtp 服务器发送电子邮件。

我使用的是 java,但你可以看到配置并在你的 c# 代码中使用它。

【讨论】:

【参考方案6】:

尝试使用端口号 465 进行 SSL 连接

【讨论】:

以上是关于Gmail:如何以编程方式发送电子邮件的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式确认Gmail自动转发验证?

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

以编程方式使用 Gmail 接收电子邮件?

如何通过 gmail-api for python 发送 HTML 格式的电子邮件

以编程方式生成的数字签名电子邮件在 Outlook 中显示正确,但在 Gmail 中显示不正确

附件未以编程方式发送到邮件中