SMTP Gmail连接超时

4

我不确定为什么会发生这种情况。我在搜索的所有地方都告诉我我做得对。但每次我尝试发送邮件时,它都会在smtpserver.Send(mail)上超时。

private void emailReport(string email_address,int begDatabaseCount, int endDatabaseCount)
        {
            SmtpClient smtpserver = new SmtpClient();
            MailMessage mail = new MailMessage();
            smtpserver.EnableSsl = true;
            smtpserver.Port = 465;
            smtpserver.Host = "smtp.gmail.com";           
            smtpserver.Credentials = new NetworkCredential("mtaylor@atr.com", "password");
            smtpserver.UseDefaultCredentials = false;
            mail = new MailMessage();
            mail.From = new System.Net.Mail.MailAddress("mtaylor@atr.com", "ATR Reports");
            mail.To.Add(email_address);
            mail.Subject = "FNAS Report - " + DateTime.Now;
            mail.Body += "<u><b>FNAS Report for " + DateTime.Now + "</u></b>" + "\r\n \r\n";
            mail.Body += "Beginning Database Count - " + begDatabaseCount + "\r\n" + "\r\n";
            mail.Body += "End Database Count - " + endDatabaseCount + "\r\n" + "\r\n";
            mail.Body += "<b>Total Imported Orders = " + (endDatabaseCount - begDatabaseCount) + "<b>" + "\r\n" + "\r\n";
            mail.IsBodyHtml = true;

            smtpserver.Send(mail);
        }

端口465 = 1分钟后超时

端口587 = "SMTP服务器需要安全连接或客户端未经身份验证。服务器响应为:5.5.1需要验证身份。"

4个回答

10
如 @kostyan 所说,正确的端口是587,但是要进行身份验证,您需要在您的 gmail 帐户中允许来自不太安全的应用程序的访问权限。请在此处尝试:https://www.google.com/settings/security/lesssecureapps
对我有用,希望能对您有所帮助。

5
您确定端口是正确的吗?在我的代码中,它是587,否则看起来相似并且可以工作。

我相信Gmail的端口号应该是587。 - Michael B
当我使用端口587时,我会收到这个错误消息:“SMTP服务器需要安全连接或客户端未经身份验证。服务器响应为:5.5.1需要身份验证。”尽管我已将EnableSSL设置为true。 - MaylorTaylor
我看到的唯一其他区别是你缺少了这一行: smtpserver.DeliveryMethod = SmtpDeliveryMethod.Network; - Konstantin
刚刚添加了DeliveryMethod - 仍然没有运气。 - MaylorTaylor
我在使用Gmail SMTP服务器发送电子邮件时遇到了问题,当我将端口从465更改为587时,它才起作用,这很奇怪,因为在Gmail帮助页面上他们说要使用465端口。 - Marlon

4

这个帖子对我很有帮助。不过我不确定为什么这段代码能够工作而我的不能。

在.NET中通过Gmail发送电子邮件

using System.Net;
using System.Net.Mail;

var fromAddress = new MailAddress("from@gmail.com", "From Name");
var toAddress = new MailAddress("to@example.com", "To Name");
const string fromPassword = "fromPassword";
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);
}

2
它对我也起作用了,而其他的却没有。我也不知道为什么。 - Fabio Napodano
您需要按照Credentials和UeDefaultCredentials的顺序进行操作。帖子中的代码顺序是相反的。 - JP Hochbaum

1
我发现,当我尝试使用Google SMTP欺骗发件人地址(例如,将“FromAddress”设置为与我的Gmail帐户名称不同的内容)时,我要么收到身份验证错误消息,要么就是超时。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接