【问题标题】:sending mail works on server but not on my local machine发送邮件可以在服务器上工作,但不能在我的本地机器上工作
【发布时间】:2010-11-17 06:05:19
【问题描述】:

我在下面有以下代码(我卡在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(端点远程EP)+35 System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure, Socket s4, Socket s6, Socket& socket, IPAddress& address, ConnectSocketState state, IAsyncResult asyncResult, Int32 timeout, 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(对象拥有对象,布尔异步,Int32 超时,GeneralAsyncDelegate asyncCallback)+202 System.Net.PooledStream.Activate(对象拥有对象,GeneralAsyncDelegate asyncCallback)+21 System.Net.ConnectionPool.GetConnection(Object owningObject, GeneralAsyncDelegate asyncCallback, Int32 creationTimeout) +332 System.Net.Mail.SmtpConnection.GetConnection(字符串主机,Int32 端口)+160 System.Net.Mail.SmtpTransport.GetConnection(String host, Int32 port) +159

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

【问题讨论】:

    标签: c# asp.net email smtpclient


    【解决方案1】:

    我认为您没有在代码中使用端口号。使用这些行,那么邮件也应该在本地发送。

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

    这在我的系统上运行。我希望它也可以在您的本地系统上运行。

    【讨论】:

      【解决方案2】:

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

      希望这会有所帮助。

      【讨论】:

        【解决方案3】:

        您要求使用 XP 邮件服务器。试试hMailServer

        【讨论】:

          【解决方案4】:

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

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

          【讨论】:

            【解决方案5】:

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

            • 你的代码有问题
            • 您使用的库有问题
            • 您有一个本地防火墙阻止来自奇怪程序的出站邮件
            • 您的 ISP 不允许出站 SMTP 连接,除非是到他们自己的服务器
            • 一些中间网络阻塞了一些东西
            • 邮件服务器的 ISP 正在阻止来自您网络的 SMTP 连接
            • 邮件服务器确实拒绝了您,可能是因为您在阻止列表中

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

            【讨论】:

              【解决方案6】:

              提供商可能已经对他们的邮件服务器设置了防火墙,因此它只接受来自他们托管环境的邮件。

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

              【讨论】:

              • windows xp 是否带有某种类型的邮件服务器,我可以在本地用于测试?
              • 只需使用您的 ISP 的服务器,即在您的邮件客户端中配置的服务器。
              猜你喜欢
              • 2014-03-26
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2011-03-23
              • 2016-08-25
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多