1

У меня есть сценарий, который я хотел бы динамически отправлять по электронной почте, содержащую некоторую информацию, и переходить к определенным людям в зависимости от того, кто в компании выполняет сценарий, благодаря ActiveDirectory.

У меня есть другая часть кода, которая определяет, из какого подразделения выполняется учетная запись пользователя или службы, поэтому ради этого вопроса не беспокойтесь об этом.

То, что я до сих пор, выглядит примерно так:

function SendEmail 
{ 
Send-MailMessage -To $Recipients -From "Info <noreply@domain.com>" -Subject "Account Report" -Body $Body -SmtpServer smtpserver.domain.com
}

 $To = Get-ADUser -Filter "(Name -like '*')" -Properties Name, EmailAddress -Searchbase $OUDetected | Format-List EmailAddress | Out-String

Я пытаюсь использовать командлет Send-MailMessage, но письма должны отправляться получателям в определенном формате.

Единственный получатель:

"John Doe <doe.john@domain.com>"

Несколько получателей должны выглядеть так:

"John Doe < doe.john@domain.com>", "Jane Doe <doe.jane@domain.com>"

Проблема сложна, так как в результате $ To находится в формате:

Адрес электронной почты: doe.john@domain.com

Адрес электронной почты: doe.jane@domain.com

Этот формат необходимо преобразовать в пример с несколькими получателями, как показано выше.

Я не знаю, как правильно получить данные, отформатировать их и убедиться, что они остаются в том формате, который может использовать Send-Mailmessage.

TL; DR - должен быть способ, позволяющий захватывать адреса электронной почты каждого пользователя (ов) в данном подразделении в ActiveDirectory и форматировать эти / эти адреса электронной почты, чтобы они могли отправляться с использованием Send-MailMessage

1 ответ1

1

Отправка электронной почты из скрипта Powershell нескольким получателям на основе пользователя ActiveDirectory

Этот формат необходимо преобразовать в пример с несколькими получателями, как показано выше.

Я не знаю, как правильно получить данные, отформатировать их и убедиться, что они остаются в том формате, который может использовать Send-Mailmessage.

Должен быть способ, позволяющий захватывать адреса электронной почты каждого пользователя (ов) в данном подразделении в ActiveDirectory и форматировать эти / эти адреса электронной почты, чтобы они могли отправляться с использованием Send-MailMessage

Ниже приведена логика PowerShell для получения выходных данных через значения, разделенные запятыми, за исключением значений NULL для свойств адресов электронной почты тех учетных записей, которые захватывает ваша логика.

Я протестировал и подтвердил, что этот формат работает, как и ожидалось, в моей среде без использования логики, о которой вы не беспокоитесь (например, $OUDetected).

  • Обратите внимание на формат Send-MailMessage с параметром -To прекрасно работает с форматом doe.john@domain.com,doe.jane@domain.com поэтому каждый адрес электронной почты , только локальной частью почтового ящика и имя домена , разделенное запятых достаточно.

Ниже я приведу « Мой рабочий пример» и ниже приведу « Ваш пример», основываясь на том, что вы дали, и на том, как я смог подтвердить, что он хорошо работал в моем случае.

Ваш пример (с добавленной моей рабочей логикой)

function SendEmail 
{ 
Send-MailMessage -To $Recipients -From "Info <noreply@domain.com>" -Subject "Account Report" -Body $Body -SmtpServer smtpserver.domain.com
}

 $To = (Get-ADUser -Filter "(Name -like '*')" -Properties Name, EmailAddress -Searchbase $OUDetected | Where-Object {$_.EmailAddress -ne $null} | Select -ExpandProperty EmailAddress) -join "," | Out-String

Ваш пример (повторяется по адресам)

function SendEmail 
{
Send-MailMessage -To $To -From "Info <noreply@domain.com>" -Subject "Account Report" -Body $Body -SmtpServer smtpserver.domain.com
}

$ToAddresses = Get-ADUser -Filter "(Name -like '*')" -Properties Name, EmailAddress -Searchbase $OUDetected | 
Where-Object {$_.EmailAddress -ne $null} | Select -ExpandProperty EmailAddress

ForEach ($ToAddress in $ToAddresses) {
   $To = $ToAddress
   SendEmail
}

Мой рабочий пример

(Get-ADUser -Filter "(Name -like '*')" -Properties Name, EmailAddress | Where-Object {$_.EmailAddress -ne $null} | Select -ExpandProperty EmailAddress) -join "," | Out-String

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .