无法使用c#和gmail从生产服务器发送电子邮件

时间:2011-11-12 20:53:02

标签: c# asp.net email gmail

我已经在我的开发环境(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。这不行。

任何见解都将受到赞赏。

谢谢

1 个答案:

答案 0 :(得分:3)

您是否确认可以从服务器上的其他工具到达smtp.gmail.com上的端口587?在生产环境中,有许多可以过滤端口的地方 - 包括网络中的防火墙和路由器,而不仅仅是服务器上的防火墙。

验证应用程序的网络连接的一种方法是尝试在应用程序中发送邮件,同时在服务器的控制台上运行命令netstat -n。如果与smtp.gmail.com的连接卡住SYN_SENT,则不建立TCP连接。