Windows-Server-2008-R2
使用 powershell 通過 MS Exchange 發送未經身份驗證的郵件 (Windows Server 2008 R2)
我正在嘗試使用任務計劃程序來執行 powershell 腳本並通過電子郵件發送一些命令的輸出。我正在使用“Send-MailMessage”來做到這一點。當我使用域管理員帳戶執行計劃任務時,我可以很好地收到電子郵件,但是當我使用服務帳戶時,電子郵件不會通過。
我使用的服務帳戶同時具有“作為服務登錄”和“作為批處理作業登錄”。它在我執行它的伺服器上也具有本地管理員權限。
需要注意的是:我使用 telnet 通過我正在使用的 SMTP 伺服器發送電子郵件,並且能夠發送未經身份驗證的電子郵件,因此問題不是 SMTP 伺服器的身份驗證問題。
我在此服務帳戶上缺少哪些憑據?還有什麼我可能會失去的嗎?
謝謝您的幫助!
當您通過送出電子郵件
telnet
並選擇不進行身份驗證時,伺服器會假定您是anonymous
(又名眾所周知的NT AUTHORITY\Anonymous logon
或S-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