通过SMTP发送电子邮件失败:不允许使用MailBox名称

时间:2013-07-19 19:39:26

标签: c# visual-studio-2010 smtp system.net

我正在尝试通过SMTP服务器发送电子邮件,但它未能给我以下错误:

  

不允许使用MailBox名称。服务器响应是发件人必须具备的   有效的反向DNS

enter image description here 不幸的是,我找不到有意义的信息来解决问题

这是我的方法:

public void SendSmtp()
{
    try
    {
        using (MailMessage message = new MailMessage())
        {
            message.From = new MailAddress("some@email.com");
            message.To.Add(new MailAddress("other@email.com"));


            message.Subject = "subject";
            message.Body = "body";
            message.IsBodyHtml = true;

            // NetworkCredential basicCredential = new NetworkCredential("test@test.com", "password");
            try
            {
                using (SmtpClient client = new SmtpClient())
                {
                    client.Host = "mail.host.com";
                    client.Port = 25;
                    client.UseDefaultCredentials = true;
                    //  client.Credentials = basicCredential;
                    client.Send(message);
                    MessageBox.Show("Success!!");
                }

            }

            finally
            {
                //dispose the client
                message.Dispose();
            }

        }
    }
    catch (SmtpFailedRecipientsException ex)
    {
        for (int i = 0; i < ex.InnerExceptions.Length; i++)
        {
            SmtpStatusCode status = ex.InnerExceptions[i].StatusCode;
            if (status == SmtpStatusCode.MailboxBusy ||
                status == SmtpStatusCode.MailboxUnavailable)
            {
                Console.WriteLine("Delivery failed - retrying in 5 seconds.");
                System.Threading.Thread.Sleep(5000);
                //client.Send(message);
            }
            else
            {
                Console.WriteLine("Failed to deliver message to {0}",
                    ex.InnerExceptions[i].FailedRecipient);
            }
        }
    }
}

当我在不同的服务器上尝试它或我的本地机器不确定原因时,这很有效。 我设置了对服务器的SMTP授权访问权限。 请指教。

3 个答案:

答案 0 :(得分:2)

错误是您的代码尝试连接的SMTP服务器的直接响应。您的客户端计算机没有有效的反向DNS映射(例如127.0.0.1 - &gt; localhost),因此SMTP服务器拒绝连接。

它可能就像您的客户端将自己标识为example.com一样简单,但当SMTP服务器执行反向查找时,服务器的IP将以system-1-2-3.4.hostingprovider.com或类似的形式返回。

答案 1 :(得分:1)

回顾我的问题,我可以告诉你,如果你遇到这个问题,那么代码中的问题不是网络问题。

快速测试方法是在较少锁定的环境中运行代码。我只在我的生产服务器上收到此错误。它在开发中运作良好。

所以这意味着你需要关闭visual studio并进行调查。该错误可能会产生误导,因此请不要依赖它100%而是使用工具来调试您的问题。我使用wireshark来检查数据包,我注意到我的SMTP服务器上拒绝了一个IP。

我没有意识到,因为我的服务器在我的情况下有多个网卡。我无法轻易猜到的东西。所以我的建议是使用工具来观察交通网络,你会发现原因。

不要猜,用工具*来给你答案。

*工具:除了wireshark之​​外,像mxtoolbox这样的网站可能非常有帮助

答案 2 :(得分:0)

旧线程,但是如果有人遇到此问题,对我而言,该问题与“ FROM”属性有关。在smtp服务器上,您必须向电子邮件服务器管理员请求允许的“发件人”地址。