Назад | Перейти на главную страницу

Отправка неаутентифицированной почты через MS Exchange с помощью powershell (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

Если вы хотите, чтобы он отправлял электронные письма получателям вне ваша собственная организация обмена, вам также необходимо разрешить это:

$RC | Add-ADPermission -User "DOMAIN\ServiceAcc01" -ExtendedRights ms-Exch-SMTP-Accept-Any-Recipient