使用SmtpClient发送邮件不起作用,同时在不同的项目中运行相同的代码

时间:2015-02-04 15:49:50

标签: c# visual-studio-2012 .net-4.0 windows-server-2008-r2 smtpclient

我在Visual Studio 2012中工作,在Windows 7上,我在Windows Server 2008 R2计算机上运行程序,两者都是64位。我一直在许多进程中使用相同的代码,我一直工作得很好。但是,最近当我使用相同的代码时,我得到以下异常,

System.Net.Mail.SmtpException: Failure sending mail. --->
System.Net.WebException: Unable to connect to the remote server ---> 
System.Net.Sockets.SocketException: An attempt was made to access a socket
in a way forbidden by its access permissions xxx.xxx.xxx.xxx:25

代码,

public static void emailReport(string to, string from, string subject, 
    string body, string attachment, string hostAddress)
    {
        MailMessage mail = new MailMessage();
        SmtpClient SmtpServer = new SmtpClient(hostAddress);
        foreach (string email in to.Split(','))
            mail.To.Add(new MailAddress(email));
        mail.From = new MailAddress(from);
        mail.Subject = subject;
        mail.Body = body;
        mail.IsBodyHtml = true;
        SmtpServer.Send(mail);
    }
  • 使用此确切代码的旧进程仍可正常运行并可以发送 邮件,使用相同的主机地址和端口。
  • 看着插座 使用 netstat -o ,我可以看到套接字没有被任何人持有 过程
  • .net Framework 4.5在我的本地计算机和服务器上。
  • 我在服务器上安装了Visual Studio 2012,并尝试在那里重新创建项目以查看是否有任何更改,但是没有。
  • 我可以使用 telnet smtp.mydomain.com 25
  • 在服务器上连接到邮件主机

基本上从本周开始,使用此代码的任何新版本的应用程序(.exe)都不会发送电子邮件,但相同应用程序的旧版本会发送电子邮件。 我怀疑这是我正在运行流程的环境问题,或者我正在构建项目的方式。我不知道如何解决这个问题。

1 个答案:

答案 0 :(得分:1)

我终于能够弄明白了。事实上,尽管流程在某些时候有效,但它实际上是一个防火墙问题。

防火墙具有阻止可疑文件名的某些条件。我需要将可执行文件重命名为不可疑的内容或更能反映它的作用(即“电子邮件”)