4

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

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

在此处输入图像描述 不幸的是,我找不到有意义的信息来解决问题

这是我的方法:

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 授予访问权限。请指教。

4

3 回答 3

2

回顾我的问题,我可以告诉你,如果你遇到这个问题,这不是代码中的问题,实际上它更多的是网络问题。

测试这一点的一种快速方法是在不那么锁定的环境中运行您的代码。我只在我的生产服务器上收到此错误。它在开发中运行良好。

所以这意味着您需要关闭视觉工作室并进行调查。该错误可能具有误导性,因此不要 100% 依赖它,而是使用工具来调试您的问题。我使用wireshark检查数据包,我注意到一个IP在我的SMTP服务器上被拒绝。

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

不要猜测,使用工具*为您提供答案。

*工具:除了wireshark,mxtoolbox之类的网站也很有帮助

于 2014-12-04T15:37:31.917 回答
2

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

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

于 2013-07-19T19:43:05.330 回答
0

旧线程,但如果其他人有这个问题,对我来说这个问题与“FROM”属性有关。在 smtp 服务器上,您必须向电子邮件服务器管理员请求允许的“发件人”地址。

于 2019-08-15T08:13:19.463 回答