SMTP:邮箱不可用。服务器响应为:Error458块

时间:2018-08-13 09:54:00

标签: c# smtp smtpclient

我正在构建C#.NET系统,并具有以下Webmail Mail Client手册设置:

Username: noreply@domain.com
Password: password123
Incoming Server: mail.domain.com (IMAP Port: 993, POP3 Port: 995)
Outgoing Server: mail.domain.com (SMTP Port: 465)

我的系统正在尝试使用以下设置发送电子邮件:

方法1:在控制器方法中

MailDefinition md = new MailDefinition();
md.From = "noreply@domain.com";
md.IsBodyHtml = true;
md.Subject = "subject";

MailMessage mm = md.CreateMailMessage("user1@gmail.com", null, "Some Text", new System.Web.UI.Control());
mm.From = new MailAddress("noreply@domain.com", "System Name");

SmtpClient smtp = new SmtpClient();
smtp.UseDefaultCredentials = false;
smtp.Credentials = new NetworkCredential("noreply@domain.com", "password123");
smtp.Host = "mail.domain.com";
smtp.Port = 465; //tried for 25, 587
smtp.EnableSsl = true;
smtp.Timeout = 40000;
smtp.Send(mm);

方法2:在web.config中

<system.net>
    <mailSettings>
      <smtp deliveryMethod="Network" from="noreply@domain.com">
          <network host="mail.domain.com" port="465" userName="noreply@domain.com" password="password123" defaultCredentials="false" enableSsl="true" />
      </smtp>
    </mailSettings>
</system.net>

我有两种方法,也尝试了不同的端口:25、26、587仍然有错误,例如“操作已超时”。

不同端口的错误信息如下:

Port 25: Mailbox unavailable. The server response was: Error458 block
Port 26: Mailbox unavailable. The server response was: Error458 block
Port 465: The operation has timed out
Port 587: Mailbox unavailable. The server response was: Error458 block

我还搜索了Error458,它的意思是“无法为节点排队消息”,但是没有解决此错误的方法。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

您的SMTP服务器似乎有问题。根据{{​​3}}:

  

由于队列的处理可能需要不确定的数量
  时间,此命令应立即返回并响应
  客户端主机。此命令的有效返回码为:

     

250 OK,正在排队启动节点
  251 OK,没有消息正在等待节点
  252 OK,已启动节点的待处理消息
  253 OK,节点的待处理消息已启动
   458无法将节点的消息排队
  459不允许的节点:
  500语法错误
  参数中的501语法错误

     

250响应代码不表示将发送消息   到有问题的系统,只是队列已经启动并且   将会发生一些动作。如果服务器能够支持它,   251、252或253响应代码应用于提供更多信息
  信息发送给客户端。在这种情况下,如果有消息
  等待客户端节点,可以使用
执行检查   这些响应代码表示何时不再存在
  该节点的队列中的未决消息。

     

应使用458和459结果代码提供更多信息   信息返回到客户端主机,说明为何未执行该操作   执行。如果请求的语法不正确,则   应该使用500和501结果代码。