Я пытаюсь использовать планировщик задач для запуска сценария 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
Если вы хотите, чтобы он отправлял электронные письма получателям вне ваша собственная организация обмена, вам также необходимо разрешить это:
$RC | Add-ADPermission -User "DOMAIN\ServiceAcc01" -ExtendedRights ms-Exch-SMTP-Accept-Any-Recipient