【问题标题】:Mailbox unavailable. The server response was: 5.7.1 Unable to relay信箱不可用。服务器响应为:5.7.1 无法中继
【发布时间】:2017-11-24 00:16:46
【问题描述】:

相同的 ASP.NET MVC 4 网站,相同的邮件发送代码。从 AccountController 发送电子邮件不再有效,从所有其他控制器都可以。

这是我从 AccountController 操作中得到的错误:

Cannot send e-mail from noreply@domain.com to bill@microsoft.com
Exception: Mailbox unavailable. The server response was: 5.7.1 Unable to relay.
mail.domain.com, SMTPSVC/mail.domain.com, 25, 

我应该检查什么?多年来一直有效,但最近的 Windows Server 2008 / Exchange 2010 更新不再有效。

MailMessage message = new MailMessage(fromAddress, toAddress)
{
   Subject = subject,
   Body = body,
   IsBodyHtml = isHtml
};

try
{
   smtpClient.Send(message);

   string errorMsg = "Sending e-mail from " + fromAddress.Address + " to " + originalAddresses[i];
   errorMsg += Environment.NewLine;
   errorMsg += smtpClient.Host + ", " + smtpClient.TargetName + ", " + smtpClient.Port + ", " + smtpClient.ClientCertificates + ", " + smtpClient.EnableSsl + ", " + smtpClient.UseDefaultCredentials + ", " + smtpClient.Timeout;

   sw.WriteLine(errorMsg)
}
catch (Exception ex)
{
   string errorMsg = "Cannot send e-mail from " + fromAddress.Address + " to " + originalAddresses[i] + ", " + "Exception: " + ex.Message +
                                (ex.InnerException != null ? ", " + ex.InnerException.Message : string.Empty);
   errorMsg += Environment.NewLine;
   errorMsg += smtpClient.Host + ", " + smtpClient.TargetName + ", " + smtpClient.Port + ", " + smtpClient.ClientCertificates + ", " + smtpClient.EnableSsl + ", " + smtpClient.UseDefaultCredentials + ", " + smtpClient.Timeout;

   sw.WriteLine(errorMsg);

   return false;
}

知道我应该检查什么吗? AccountController 有我应该关心的特别之处吗? [RequireHttps] 控制器动作属性是否有些涉及?

谢谢。

EDIT1:

这是我们的 Exchange 2010 设置(请注意,我们可以从其他 ASP.NET MVC 控制器发送相同的电子邮件):

https://practical365.com/exchange-server/how-to-configure-a-relay-connector-for-exchange-server-2010/

EDIT2:

我错了,问题与 ASP.NET MVC 控制器无关,而是与电子邮件地址域有关。我发现每次我们包含不属于我们公司域(外部互联网)的电子邮件地址时,我们都会收到上述错误。所以现在的问题是:为什么 Exchange 2010 接收连接器现在无法向外部 Internet 发送电子邮件通知?

【问题讨论】:

  • 不就是您可能需要通过 SMTP 服务器进行身份验证吗?由于您尝试将邮件发送到不同的域 (domain.com != microsoft.com)?
  • 检查 IIS 管理器上的中继限制设置 => 默认 SMTP 虚拟服务器 => 属性 => 访问 => 中继限制,在此处添加您的公共 IP 地址,然后在身份验证访问中标记匿名访问和集成 Windows 身份验证控制设置。还要检查用于发送邮件的现有NetworkCredential
  • @kayess:我们确实这样做了,事实上,电子邮件是从所有其他控制器发送和传递的。
  • @Tetsuya:我们不使用虚拟服务器,而是使用 Exchange 2010 接收连接器(请参阅我的编辑)。
  • 由于您使用 Exchange 服务器,并且向不同的主机发送邮件说domain.com,它可能需要凭据设置取决于mail.domain.com 作为目标域。检查practical365.com/… & stackoverflow.com/questions/15717743/…

标签: c# asp.net asp.net-mvc web exchange-server


【解决方案1】:

服务器场更改了我们服务器的传出 IP 地址,这会阻止所有包含不在我们公司域中的收件人的电子邮件。将新的传出 IP 地址添加到Properties->Network->Receive mail from remote servers that have these IP addresses 下的 Exchange 2010 接收连接器解决了该问题。

【讨论】:

    猜你喜欢
    • 2015-03-06
    • 2012-04-05
    • 2013-03-21
    • 2012-07-15
    • 1970-01-01
    • 2011-03-11
    • 2017-10-14
    • 2014-04-15
    相关资源
    最近更新 更多