У меня есть один сервер Exchange 2010 с несколькими ролями, и мне нужно выполнять сценарий Powershell по ежемесячному расписанию.
И я действительно хотел бы отправить отчет по электронной почте на почтовый ящик какой-нибудь местной компании по окончании задания.
Я создал учетную запись службы с необходимыми разрешениями и написал сценарий Powershell, который отлично справляется при запуске в качестве учетной записи службы, за исключением части отчета по электронной почте.
Мне кажется, что добавление IP-адреса моего сервера Exchange к разрешенному анонимно соединителю приема не подходит, может быть, есть какой-то лучший способ сделать это?
Любое мнение очень ценится!
ОБНОВИТЬ:
Что касается почтовой части скрипта, обычно я использую объект .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-MailMessage
Команда Powershell дает тот же результат, поэтому проблема не в коде, на самом деле она отлично работает на серверах, отличных от Exchange.
В настоящее время у меня есть три соединителя получения:
Так что я ищу красивый и безопасный способ заставить его работать, заранее спасибо!
Решение довольно простое, имея пароль для ExchangeServiceAccount как переменную SecureString $ ExchangeServicePassword:
# Mail server $SmtpServer = "mail.company.com" # .NET object MailMessage $Msg = New-Object Net.Mail.MailMessage # .NET object SMTP server and SMTP authentication parameters $Smtp = New-Object Net.Mail.SmtpClient($SmtpServer, 587) $Smtp.Credentials = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList "ExchangeServiceAccount", $ExchangeServicePassword $Smtp.EnableSsl = $true # Email structure $Msg.From = "exchangeserviceaccount@company.com" $Msg.ReplyTo = "alerts@company.com" $Msg.To.Add("alerts@company.com") $Msg.Subject = "Subject" $Msg.Body = "Some text" $Msg.SubjectEncoding = [System.Text.Encoding]::UTF8 $Msg.BodyEncoding = [System.Text.Encoding]::UTF8 # Send email $Smtp.Send($Msg)