Windows-Server-2008-R2

使用 powershell 通過 MS Exchange 發送未經身份驗證的郵件 (Windows Server 2008 R2)

  • October 1, 2013

我正在嘗試使用任務計劃程序來執行 powershell 腳本並通過電子郵件發送一些命令的輸出。我正在使用“Send-MailMessage”來做到這一點。當我使用域管理員帳戶執行計劃任務時,我可以很好地收到電子郵件,但是當我使用服務帳戶時,電子郵件不會通過。

我使用的服務帳戶同時具有“作為服務登錄”和“作為批處理作業登錄”。它在我執行它的伺服器上也具有本地管理員權限。

需要注意的是:我使用 telnet 通過我正在使用的 SMTP 伺服器發送電子郵件,並且能夠發送未經身份驗證的電子郵件,因此問題不是 SMTP 伺服器的身份驗證問題。

我在此服務帳戶上缺少哪些憑據?還有什麼我可能會失去的嗎?

謝謝您的幫助!

當您通過送出電子郵件telnet選擇不進行身份驗證時,伺服器會假定您是anonymous(又名眾所周知的NT AUTHORITY\Anonymous logonS-1-5-7)。

送出電子郵件時Send-MailMessage,它將始終嘗試對會話進行身份驗證。如果未指定一組憑據,它將假定使用目前使用者的網路憑據,並作為執行 PowerShell 腳本的服務帳戶進行身份驗證。

服務帳戶既不是匿名的,也不是 Exchange 使用者,也不是 Exchange 組織管理員,並且不允許送出電子郵件。

解決這個問題,你需要一個PSCredential對象:

$anonUsername = "anonymous"
$anonPassword = ConvertTo-SecureString -String "anonymous" -AsPlainText -Force
$anonCredentials = New-Object System.Management.Automation.PSCredential($anonUsername,$anonPassword)

Send-MailMessage -to "Big Boss <ceo@example.com>" -from "Me <advis12@example.com>" -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

引用自:https://serverfault.com/questions/543052