我知道有很多与此问题相关的线程,但我无法对这些线程采取任何响应并使其在我的服务器上运行。
所以,试着看看是否有人可以帮助我。 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
先谢谢...
答案 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 !!!