我正在尝试通过SMTP服务器发送电子邮件,但它未能给我以下错误:
不允许使用MailBox名称。服务器响应是发件人必须具备的 有效的反向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授权访问权限。 请指教。
答案 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服务器上,您必须向电子邮件服务器管理员请求允许的“发件人”地址。