0

我在下面有以下代码(我一直在 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(端点 remoteEP)+35 System.Net.ServicePoint.ConnectSocketInternal(布尔连接失败,套接字 s4,套接字 s6,套接字和套接字,IPAddress 和地址,ConnectSocketState 状态,IAsyncResult asyncResult,Int32 超时,异常和异常)+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(字符串主机,Int32 端口)+160 System.Net.Mail.SmtpTransport.GetConnection(字符串主机,Int32 端口)+159

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

4

6 回答 6

3

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

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

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

于 2009-08-06T06:04:46.010 回答
1

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

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

于 2009-08-06T06:26:24.563 回答
1

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

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

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

于 2009-08-06T10:14:51.620 回答
0

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

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

于 2009-08-06T05:53:17.483 回答
0

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

于 2009-08-06T06:30:36.410 回答
0

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

希望这可以帮助。

于 2009-08-06T06:56:42.177 回答