发送邮件在服务器上运行,但在本地计算机上运行

时间:2009-08-06 05:48:29

标签: c# asp.net email smtpclient

我在下面有以下代码(我坚持使用xxx不发布真实姓名)。当我上传到服务器并且完美地发送电子邮件时,此代码工作正常。

        MailMessage msg = new MailMessage();
        msg.From = new MailAddress(fromEmailAddress_);
        msg.To.Add(new MailAddress(toEmailAddress_));

        msg.Subject = subject_;
        msg.Body = body_;
        msg.IsBodyHtml = true;
        msg.Priority = MailPriority.High;

        NetworkCredential basicAuthenticationInfo = new System.Net.NetworkCredential("xxx@xxxx.org", "password");
        try
        {
            SmtpClient c = new SmtpClient("mail.xxx.org");
            c.UseDefaultCredentials = false;
            c.Credentials = basicAuthenticationInfo;
            c.Send(msg);
        }
        catch (Exception ex)
        {
            throw ex;
            Console.Write(ex.Message.ToString());
        }

但是当我在visual studio中在我的机器上进行本地测试时,我收到一个错误:

[SocketException(0x274d):无法建立连接,因为目标计算机主动拒绝了它 66.226.21.251:25]    System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot,SocketAddress socketAddress)+239    System.Net.Sockets.Socket.InternalConnect(EndPoint remoteEP)+35    System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure,Socket s4,Socket s6,Socket& socket,IPAddress& address,ConnectSocketState state,IAsyncResult asyncResult,Int32 timeout,Exception& exception)+224

[WebException:无法连接到远程服务器]    System.Net.ServicePoint.GetConnection(PooledStream PooledStream,Object owner,Boolean async,IPAddress& address,Socket& abortSocket,Socket& abortSocket6,Int32 timeout)+5420699    System.Net.PooledStream.Activate(Object owningObject,Boolean async,Int32 timeout,GeneralAsyncDelegate asyncCallback)+202    System.Net.PooledStream.Activate(Object owningObject,GeneralAsyncDelegate asyncCallback)+21    System.Net.ConnectionPool.GetConnection(Object owningObject,GeneralAsyncDelegate asyncCallback,Int32 creationTimeout)+332    System.Net.Mail.SmtpConnection.GetConnection(String host,Int32 port)+160    System.Net.Mail.SmtpTransport.GetConnection(String host,Int32 port)+159

任何有关为什么不起作用的建议

6 个答案:

答案 0 :(得分:3)

我要做的第一件事就是查看目标机器是否正如错误消息所说的那样,实际上是拒绝连接。我可以从这里连接到该IP地址上的端口25,因此您的错误消息可能会产生误导。这些都是连接失败的可能原因:

  • 您的代码中存在一些问题
  • 您正在使用的库中存在一些问题
  • 您有本地防火墙阻止来自奇怪程序的出站邮件
  • 您的ISP不允许出站SMTP连接,除了自己的服务器
  • 某些中间网络正在阻止事情
  • 邮件服务器的ISP阻止来自网络的SMTP连接
  • 邮件服务器真的拒绝了你,也许是因为你在阻止列表

要获得更多详细信息,请下载并安装Wireshark。它就像是网络调试器。在系统和目标网络之间启动捕获,然后运行代码。解释捕获的数据包需要一些经验,因此如果您遇到困难,请随时在此处发布更多数据。

答案 1 :(得分:1)

中继限制很可能会阻止您从允许的IP集合外部发送邮件。如果在Web /应用程序服务器上配置了SMTP服务器,则可能将其设置为仅允许通过127.0.0.1发送邮件。

您可以通过IIS管理器配置本地SMTP服务器。如果沿着这条路走下去,请确保在本地计算机上打开端口25。通常,反病毒类型的软件会阻止/监控此端口,并且通过电子邮件传递它会很糟糕。

答案 2 :(得分:1)

我认为您没有在代码中使用端口号。使用这些行,然后邮件也应该在本地消失。

    smtp.DeliveryMethod = SmtpDeliveryMethod.PickupDirectoryFromIis;
    smtp.Timeout = 60000;
    smtp.Port = 25;

这适用于我的系统。我希望它也适用于您的本地系统。

答案 3 :(得分:0)

提供商可能已经对其邮件服务器进行了防火墙处理,因此它只接受来自其托管环境的邮件。

将其更改为在本地测试时使用本地邮件服务器。

答案 4 :(得分:0)

您要求提供XP Mail Server。试试hMailServer

答案 5 :(得分:0)

看看你的防病毒软件是否疯了,我已经在运行mcafee的人身上看过几次这个问题了。

希望这有帮助。