C#邮件程序 - 550访问被拒绝 - 无效的HELO名称

时间:2012-05-31 06:34:56

标签: c# smtp

我知道有很多与此问题相关的线程,但我无法对这些线程采取任何响应并使其在我的服务器上运行。

所以,试着看看是否有人可以帮助我。 99%的电子邮件正常发送,实际上很少有电子邮件返回错误。

我的代码看起来像这样

        MailMessage mm = new MailMessage(Settings.EmailCustomerService, to, subject, body);
        mm.SubjectEncoding = Encoding.UTF8;
        mm.BodyEncoding = Encoding.UTF8;
        mm.IsBodyHtml = true;

        MailAddress add = new MailAddress(Settings.EmailCustomerService, "Customer Service");
        mm.From = add;

        try
        {
            SmtpClient client = new SmtpClient(Settings.EmailSMTP);

            client.UseDefaultCredentials = false;
            client.Credentials = new NetworkCredential(Settings.EmailUser, Settings.EmailPwd); 

            System.Threading.ParameterizedThreadStart threadStart = new System.Threading.ParameterizedThreadStart(SendInThread);
            threadStart.Invoke(new SendInThreadParams
            {
                client = client,
                Message = mm
            });
        }
        finally
        {
            mm = null;
        }

实际上后来添加了凭据代码,但即使没有它,我的代码也运行正常。只是1%的电子邮件永远不会发送给收件人,而为Credentials添加这两行并没有什么区别。

Settings.EmailUser只是运行SMTP的服务器上的用户,但我没有将其附加到任何地方。

  
    

我打赌这就是问题所在。

  

SMTP服务器中继设置为使用127.0.0.1,而FQDN只是机器的名称(类似“Machine1”......没有域名的名称)

我得到的错误就是这个

  

报告-MTA:dns; Machine1
  收到来自MTA:dns; Machine1
  抵达日期:2012年5月30日星期三23:08:36 -0700
  最终收件人:rfc822; test@email.net
  行动:失败   状态:5.5.0
  诊断代码:smtp; 550拒绝访问 - 无效的HELO名称(参见RFC2821 4.1.1.1)

通过电子邮件发回的邮件是:

   > This is an automatically generated Delivery Status Notification.  
   Delivery to the following recipients failed.  
   test@email.com

先谢谢...

2 个答案:

答案 0 :(得分:1)

除了消息/传递状态附件之外,DSN通常还会返回消息。对于这类问题,您应该发布返回邮件的标题和DSN。

在我看来,您的服务器已接受该消息,但在向前传输时出错。如果您的服务器拒绝了它,您的代码就会抛出异常。所以你的服务器Machine1接受它,试图将它传输到email.net,但email.net拒绝了它。然后,Machine1生成DSN(交付状态通知,在您的情况下为NDR =未送达报告)。

换句话说,电子邮件服务器的配置错误不是代码问题。几乎可以肯定的是,问题是电子邮件服务器没有像你所说的那样设置FQDN。

作为配置问题,它属于ServerFault。

答案 1 :(得分:0)

根据BEN的回答,我意识到我错过了PRIMARY DND SUFFIX。

主要是为了找到您的FQDN,您需要简单地: 1)打开命令提示符 2)输入“ipconfig / all”

阅读您的主持人姓名+主要DNS后缀。

我的DNS SUFFIX是emtpy所以我去了并使用此链接添加了 http://www.simpledns.com/kb.aspx?kbid=1227

然后重新启动机器。

现在代码就像魅力一样。 谢谢BEN !!!