Email

允許在 Exchange 伺服器上執行的 Powershell 腳本發送郵件 - 最佳實踐?

  • December 27, 2016

我有一個多角色 Exchange 2010 伺服器,並且需要按月執行一個 Powershell 腳本。

我真的很想在任務結束時通過電子郵件將報告發送到當地公司的郵箱。

我創建了一個具有所需權限的服務帳戶並編寫了一個 Powershell 腳本,該腳本在作為服務帳戶執行時一切正常 - 除了電子郵件報告部分。

將我的 Exchange 伺服器的 IP 添加到允許匿名的接收連接器對我來說聽起來不正確,也許有一種最佳做法可以做到這一點?

非常感謝任何意見!

更新:

至於腳本的郵件部分,通常我使用這樣的 .NET Net.Mail.MailMessage 對象:

$SmtpServer = "exchangeserver.corp.company.com"
$Msg = New-Object Net.Mail.MailMessage
$Smtp = New-Object Net.Mail.SmtpClient($SmtpServer)
$Msg.From = "svc_exchangeservice@company.com"
$Msg.ReplyTo = "alerts@company.com"
$Msg.To.Add("alerts@company.com")
$Msg.Subject = "Monthly script execution report"
$Msg.Body = "Everything's ok, some statistics etc."
$Smtp.Send($Msg)

當我使用此程式碼時,Exchange 伺服器會回答“服務不可用”。對我來說這是有道理的,因為沒有配置接收連接器。標準Send-MailMessagePowershell 命令給出了相同的結果,因此問題不在於程式碼,實際上它在非 Exchange 伺服器上執行良好。

目前我有三個接收連接器:

  • 一種用於 FQDN mail.company.com 的外部郵件,接受埠 25 上的連接
  • 一種用於在標準 SSL 埠 587 上使用 FQDN exchangeserver.corp.company.com 的內部 Exchange 客戶端
  • 一個用於通過 Exchange 發送郵件的本地伺服器列表,無需在埠 25 上使用 FQDN exchangeserver.corp.company.com 進行身份驗證(不是一個完美的解決方案,我不希望將我的 Exchange 伺服器的 IP 添加到列表中)

因此,我正在尋找一種安全可靠的方法來使其正常工作,在此先感謝!

解決方案非常簡單,將 ExchangeServiceAccount 的密碼設置為 SecureString $ExchangeServicePassword 變數:

# 郵件伺服器
$SmtpServer = "mail.company.com"
# .NET 對象 MailMessage
$Msg = 新對象 Net.Mail.MailMessage
# .NET 對象 SMTP 伺服器和 SMTP 身份驗證參數
$Smtp = 新對象 Net.Mail.SmtpClient($SmtpServer, 587)
$Smtp.Credentials = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList "ExchangeServiceAccount", $ExchangeServicePassword
$Smtp.EnableSsl = $true
# 郵件結構
$Msg.From = "exchangeserviceaccount@company.com"
$Msg.ReplyTo = "alerts@company.com"
$Msg.To.Add("alerts@company.com")
$Msg.Subject = "主題"
$Msg.Body = "一些文字"
$Msg.SubjectEncoding = [System.Text.Encoding]::UTF8
$Msg.BodyEncoding = [System.Text.Encoding]::UTF8
# 發送電子郵件
$Smtp.Send($Msg)

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