使用SmtpClient发送电子邮件时出现故障“421此时未接受连接”错误

时间:2011-02-06 12:04:08

标签: c# smtpclient

我正在尝试使用我的isp发送4封电子邮件。 (不是JUNK MAIL,我发送到我的地址)
我从循环中逐个发送它们(因为我构建它们)。每条消息都是50kb-80kb

 MailMessage mailmessage = new MailMessage();
 mailmessage.To.Add(to);
 mailmessage.From = new MailAddress(from, "From");
 mailmessage.IsBodyHtml = true;
 mailmessage.Priority = MailPriority.Normal;
 mailmessage.Subject = subject;
 mailmessage.Body = body;
 SmtpClient smtpclient = new SmtpClient(server, 25); //use this PORT!
 smtpclient.DeliveryMethod = SmtpDeliveryMethod.Network;
 smtpclient.Credentials = new NetworkCredential(user, pass);
 smtpclient.Send(mailmessage);

在上一条消息中我收到此错误:

  

服务不可用,关闭   传输通道。服务器   回复是:连接未被接受   此时

更新
在此错误之后的某些时候,我甚至无法发送任何电子邮件(使用此服务器)甚至来自Outlook Express等其他应用程序,我收到错误:

  

发生了未知错误。   帐户:'MailServerAddress',服务器:   'MailServerAddress'',协议:SMTP,   服务器响应:'421连接没有   此时接受',港口:25,   安全(SSL):否,服务器错误:421,   错误号码:0x800CCC67

大约一分钟后,我可以再次发送。

2 个答案:

答案 0 :(得分:1)

始终确保您的发件人地址也是有效邮箱,因此退回邮件实际上会回复给您,许多ISP禁止完全使用其他(未注册的)发件人地址。正如其他人的评论中指出的那样,ISP通常也会对速率进行限制,因此您必须根据ISP的期望对发送代码进行微调,这可能很乏味。

一般来说,出于某种原因发送电子邮件既是艺术又是科学。如果您尝试将其用于生产系统,我只建议您使用某些服务,例如SendGridMailgun。即使您的邮件服务器接受邮件,它也可能在另一个ISP邮件服务器上受到限制,因为大多数ISP都有一定的限制,并且电子邮件路由非常复杂。您也可以快速点击垃圾邮件过滤器。对于我的ISP,无论出于何种原因,自动邮件总是在googlemail中发送垃圾邮件。

对于开发,Mailgun每天免费提供200封电子邮件,这在开始时应该足够了。此外,SMTP是一种非常慢的协议,因此使用它们的HTTP接口可以节省一些服务器时间。

答案 1 :(得分:1)

我不完全,但在这里非常相似的问题:

SMTP send email failure by SmtpClinet (SmarterEmail server)

问题是我的本地ISP正在关闭25端口。

您是否测试了其他一些端口,例如587?