Exchange连接器不会发送到外部域

我是一个开发人员,试图让我的.Net应用程序通过我们的Exchange服务器发送电子邮件。 我不是Exchange专家,所以我会在前面资格!

我们在Exchange中设置了一个接收连接器,它具有以下属性:

  1. networking:允许通过端口25的所有IP地址。

  2. 身份validation:检查传输层安全性和外部安全checkbox。

  3. 权限组:匿名用户和Exchange服务器checkbox被选中。

但是,当我在Exchange服务器上运行这个Powershell语句时,它发送到本地域地址,但是当我尝试发送到远程域时失败。

作品:

C:\Windows\system32>Send-Mailmessage -To [email protected] -From [email protected] -Subject testing -Body testing -SmtpServer OURSERVER 

(顺便说一下:我的OURSERVER = boxname.domainname.local的值,这是我启动它时在我们的Exchange命令行pipe理程序中显示的完全限定的名称)。

失败:

 C:\Windows\system32>Send-Mailmessage -To [email protected] -From [email protected] -Subject testing -Body testing -SmtpServer OURSERVER 

Send-MailMessage:邮箱不可用。 服务器响应是:5.7.1无法中继在行:1个字符:17 +发送邮件消息<<<< – 到[email protected] – 从[email protected] – 主题testing – 身份himom -SmtpServer FTI- EX + CategoryInfo:InvalidOperation:(System.Net.Mail.SmtpClient:SmtpClient)[Send-MailMessage],SmtpFailed RecipientException + FullyQualifiedErrorId:SmtpException,Microsoft.PowerShell.Commands.SendMailMessage

编辑:从@TheCleaner的build议,我运行了添加ADPermission到接力,并没有帮助;

 [PS] C:\Windows\system32>Get-ReceiveConnector "Allowed Relay" | Add-ADPermission -User "NT AUTHORITY\ANONYMOUS LOGON" -ExtendedRights "Ms-Exch-SMTP-Accept-Any-Recipient" Identity User Deny Inherited -------- ---- ---- --------- FTI-EX\Allowed Relay NT AUTHORITY\ANON... False False 

谢谢您的帮助。 标记

您应该设置一个在非标准端口(可能是2525)上运行的接收连接器,并将其限制为只接受您允许发送的服务器的IP地址。 在“身份validation”中创build没有任何勾号的连接器,匿名用户勾选权限组。

之后,您将需要在PS中以Exchange身份运行以下命令,默认阻止任何接收连接器上的匿名中继。

 Get-ReceiveConnector “Receive Connector Name” | Add-ADPermission -User “NT AUTHORITY\ANONYMOUS LOGON” -ExtendedRights “Ms-Exch-SMTP-Accept-Any-Recipient” 

我只是在我自己的交换服务器上testing了这个,并设法发送到Gmail和我自己的域名,从交换域发送,以及一个虚假的域名。

还要将-port 2525参数添加到您的PS脚本中。

有些方法可以在没有来自内部networking的身份validation(通过在边缘或集线器上创build新的SMTP连接器)的情况下向外部世界进行中继。

在大多数情况下,如果可以的话,你最好设置authentication。 如果你只是从一些专用的stream程/脚本发送,这很好。

如果您想要进行未经身份validation的中继,请创build一个新的集线器接收连接器规则。 为此(假设一个Exchange服务器填充所有Exchangeangular色):

服务器configuration – >集线器传输

为您的接收使用所有可用的IP地址,并input将转发到“从远程服务器接收邮件”设置的任何远程主机。

您可能不会想要任何身份validation方法(可能是TLS),并且权限组应设置为匿名。

我假设只有一个Exchange服务器,没有任何一个网关/垃圾邮件filter的幻想,等等。

在您的接收连接器上(称之为“中继”):

  1. 确保“从具有这些IP地址的远程服务器接收邮件”具有要运行此应用程序的服务器的IP地址。

  2. 在身份validation点击,唯一应该检查的是“外部安全”

  3. 在权限组上,唯一应该检查的是“Exchange服务器”

注意:如果您使用“匿名”,就像您在原始文章中看起来一样,那么您需要在Exchangeshell程序中运行此命令才能使该types的中继连接器正常工作:

 Get-ReceiveConnector "NAMEOFCONNECTOR" | Add-ADPermission -User "NT AUTHORITY\ANONYMOUS LOGON" -ExtendedRights "Ms-Exch-SMTP-Accept-Any-Recipient" 

然后,从其中一个IP位于上面#1的服务器中再次尝试该应用程序。 不要直接在Exchange服务器上尝试它。

这可能是更多的解决方法,但在您的脚本中指定凭据应允许您发送外部,而不需要在Exchange端进行任何configuration更改。