通过MS Exchange通过PowerShell发送未经身份validation的邮件(Windows Server 2008 R2)

我正在尝试使用任务计划程序来运行PowerShell脚本,并通过电子邮件发送一些命令的输出。 我正在使用“Send-MailMessage”来执行此操作。 当我使用域pipe理员帐户运行计划任务时,我收到电子邮件就好,但是当我使用服务帐户时,电子邮件不通过。

我正在使用的服务帐户同时具有“作为服务login”和“作为批处理login”。 它也在我运行的服务器上有本地pipe理员权限。

需要注意的是:我已经使用telnet通过我正在使用的SMTP服务器发送电子邮件,并且能够发送未经validation的电子邮件,所以问题不在于SMTP服务器的身份validation问题。

我在这个服务帐户上缺less什么凭证? 还有什么我可以失踪?

谢谢您的帮助!

当您通过telnet提交电子邮件并select不进行身份validation时 ,服务器会假定您是anonymous (也就是众所周知的NT AUTHORITY\Anonymous logonS-1-5-7 )。

Send-MailMessage提交一封电子邮件时,它总会尝试validation会话。 如果没有指定一组凭证,则会假定将使用当前的用户networking凭证,并authentication为运行PowerShell脚本的服务帐户。

该服务帐户既不是匿名的,也不是Exchange用户,也不是Exchange组织pipe理员,因此不会被允许提交电子邮件。

解决这个问题,你需要一个PSCredential对象:

 $anonUsername = "anonymous" $anonPassword = ConvertTo-SecureString -String "anonymous" -AsPlainText -Force $anonCredentials = New-Object System.Management.Automation.PSCredential($anonUsername,$anonPassword) Send-MailMessage -to "Big Boss <[email protected]>" -from "Me <[email protected]>" -subject "It's working! EOM" -credential $anonCredentials 

现在你的脚本也是匿名发送邮件:-)


另一个(也是更安全的)选项是为有问题的服务帐户提供接收连接器上所需的权限 :

 $RC = Get-ReceiveConnector "ConnectorNameGoesHere" $RC | Add-ADPermission -User "DOMAIN\ServiceAcc01" -ExtendedRights ms-Exch-SMTP-Submit,ms-Exch-SMTP-Accept-Authoritative-Domain-Sender 

如果您需要传输可能被内容过滤或类似内容删除的文件,则还可以绕过反垃圾邮件机制:

 $RC | Add-ADPermission -User "DOMAIN\ServiceAcc01" -ExtendedRights ms-Exch-Bypass-Anti-Spam 

如果您想要将电子邮件发送给您自己的Exchange组织之外的收件人,则还需要允许:

 $RC | Add-ADPermission -User "DOMAIN\ServiceAcc01" -ExtendedRights ms-Exch-SMTP-Accept-Any-Recipient