2008R2服务器上的System.Net.Sockets.SocketException
本文关键字:Net Sockets SocketException System 服务器 2008R2 | 更新日期: 2023-09-27 18:28:45
我有一个程序想要在服务器上运行,该程序能够监控网络上的各种服务器,并在发生涉及这些服务器的某些情况时发送电子邮件通知。
目前,我可以在我的本地机器上运行这个程序,并让它发送电子邮件(使用gmailSMTP)。然而,当我试图通过命令提示符在服务器上运行它时,它会抛出以下异常:
Unhandled Exception: System.Net.Mail.SmtpException: Failure sending mail. --->
System.Net.WebException: Unable to connect to the remote server --->
System.Net.Sockets.SocketException: A connection attempt failed
because the connected party did not properly respond after a period of time,
or established connection failed because connected host has failed to respond
xxx.xxx.xxx.xxx:587
与发送电子邮件相关的代码相当简单:
static void sendEmail(MailAddressCollection mailCollection, string emailSender,
string emailDisplayName, string emailPassword,
string subject, string body) {
MailAddress fromAddress = new MailAddress(emailSender, emailDisplayName);
SmtpClient smtpClient = new SmtpClient {
Host = "smtp.gmail.com",
Port = 587,
EnableSsl = true,
DeliveryMethod = SmtpDeliveryMethod.Network,
UseDefaultCredentials = false,
Credentials = new NetworkCredential(fromAddress.Address, emailPassword)
};
MailMessage message = new MailMessage {
From = fromAddress,
Subject = subject,
Body = body
};
foreach (MailAddress mailAddress in mailCollection) {
message.To.Add(mailAddress);
}
smtpClient.Send(message);
}
有问题的服务器是一个2008R2盒子,并且它没有启用Windows防火墙。此外,端口25肯定是开放的,因为该服务器可以发送其他类型的电子邮件(特别是由Dynamics CRM电子邮件路由器生成的电子邮件)。
是什么原因导致了这个错误?
该问题与Gmail阻止试图发送电子邮件的服务器的IP地址有关。
当尝试使用Gmail帐户发送电子邮件时,首先尝试使用浏览器在特定IP地址的机器上手动登录Gmail。我最终不得不这样做,并通过验证来自服务器的电子邮件发送尝试(以编程方式生成)是否合法的过程。如果你不像我那样经历这个过程,Gmail可以假设你的服务器不是合法的电子邮件发件人,并可以继续假设来自你的IP地址的所有流量都是无效的,直到你如上所述正式验证该IP地址。