我有下面的代码(我已经卡在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 的机器上进行本地测试时,出现错误:

[套接字异常(0x274d): 由于目标机器主动拒绝而无法建立连接 66.226.21.251:25] System.net.Sockets.Socket.Socket.DoconNect(Endpoint endpointSnapSnapShot,SocketAddress socketAdadDress)+239 System.net.net.net.sockets.sockets.sockets.socket.Socket.internalConnect(Endpoint externep)套接字S4,套接字S6,套接字和套接字,iPaddress&Address,ConnectSocketState状态,IASYNCRESULT ASYNCRESULT,INT32超时,异常和异常)+224

[网络异常: 无法连接到远程服务器] System.Net.ServicePoint.GetConnection(PooledStream、PooledStream、对象所有者、布尔异步、IPAddress&地址、套接字&abortSocket、套接字&abortSocket6、Int32超时)+5420699 System.Net.PooledStream.Activate (对象 owningObject、 布尔异步、 Int32 超时、 GeneralAsyncDelegate 异步回调) +202 System.Net.PooledStream.Activate(对象拥有对象,GeneralAsyncDelegate asyncCallback)+21 System.Net.ConnectionPool.GetConnection(对象 owningObject、GeneralAsyncDelegate asyncCallback、Int32 creationTimeout)+332 System.Net.Mail.SmtpConnection.GetConnection(字符串主机,Int32 端口)+160 System.Net.Mail.SmtpTransport.GetConnection(字符串主机,Int32 端口)+159

关于为什么这行不通的任何建议

有帮助吗?

解决方案

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

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

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

其他提示

中继限制最有可能阻止你从允许的IP地址组之外发送邮件。如果Web /应用服务器上配置的SMTP服务器,它可能设置为允许邮件仅通过127.0.0.1发送。

您可以通过IIS管理器配置本地SMTP服务器。如果你走这条路,确保25端口被打开本地计算机上。很多时候,反病毒软件类型块/监控该端口,并将其与电子邮件递送渣土。

我觉得你不使用的端口没有在你的代码。使用这些线,然后邮件应该去上还局部的。

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

这是我工作的系统上。我希望它也将工作在本地系统上。

在供应商可能已经关闭防火墙他们的邮件服务器,使其只接受来自他们的托管环境的邮件。

将其更改为使用,当你在本地测试它的本地邮件服务器。

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

看一看,看看你的杀毒软件是要疯了,我已经看到了这个问题,几次跟人跑的McAfee。

希望这有助于。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top