我在下面有以下代码(我坚持使用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
任何有关为什么不起作用的建议
答案 0 :(得分:3)
我要做的第一件事就是查看目标机器是否正如错误消息所说的那样,实际上是拒绝连接。我可以从这里连接到该IP地址上的端口25,因此您的错误消息可能会产生误导。这些都是连接失败的可能原因:
要获得更多详细信息,请下载并安装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的人身上看过几次这个问题了。
希望这有帮助。