我已经在我的开发环境(Windows 7,visual studio 2010)上测试了这段代码,并且它可以工作
public static bool SendMail(string to, string subject, string message)
{
try
{
NetworkCredential loginInfo = new NetworkCredential("mylogin","mypassowrd");
MailMessage msg = new MailMessage();
msg.From = new MailAddress("mylogin");
msg.To.Add(new MailAddress(to));
msg.Subject = subject;
msg.Body = message;
msg.IsBodyHtml = true;
SmtpClient client = new SmtpClient("smtp.gmail.com",587);
client.EnableSsl = true;
client.UseDefaultCredentials = false;
client.Credentials = loginInfo;
client.Send(msg);
return true;
}
catch (Exception)
{
return false;
}
}
但是当我将它移动到我的生产服务器(Windows Server 2008)时,它无法正常工作。我最初的想法是防火墙阻塞了端口,因此我创建了一个出站规则以使用TCP协议打开端口587。这不行。
任何见解都将受到赞赏。
谢谢
答案 0 :(得分:3)
您是否确认可以从服务器上的其他工具到达smtp.gmail.com上的端口587?在生产环境中,有许多可以过滤端口的地方 - 包括网络中的防火墙和路由器,而不仅仅是服务器上的防火墙。
验证应用程序的网络连接的一种方法是尝试在应用程序中发送邮件,同时在服务器的控制台上运行命令netstat -n
。如果与smtp.gmail.com的连接卡住SYN_SENT
,则不建立TCP连接。