
Eu tenho um script que gostaria de enviar dinamicamente um e-mail contendo algumas informações e ir para determinadas pessoas com base em quem na empresa está executando o script, graças ao ActiveDirectory.
Eu tenho outra parte do código que detecta de qual UO o usuário ou conta de serviço está executando isso, portanto, por causa desta questão, não se preocupe com isso.
O que tenho até agora é algo assim:
function SendEmail
{
Send-MailMessage -To $Recipients -From "Info <[email protected]>" -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
Estou tentando utilizar o cmdlet Send-MailMessage, mas os emails precisam ser enviados em um formato específico aos destinatários.
Um único destinatário é:
"John Doe <[email protected]>"
Vários destinatários devem ser parecidos com:
"John Doe
<[email protected]>", "Jane Doe <[email protected]>"
O problema é complicado porque o resultado de $To está no formato:
Endereço de email:[e-mail protegido]
Endereço de email:[e-mail protegido]
Este formato precisa ser convertido para o exemplo de múltiplos destinatários conforme mostrado acima.
Não sei como capturar os dados corretamente, formatá-los e garantir que permaneçam no formato que o Send-Mailmessage pode usar.
DR - É necessário que haja uma maneira de capturar o(s) endereço(s) de e-mail de cada usuário(s) em uma determinada UO no ActiveDirectory e formatar esse(s) endereço(s) de e-mail para que possam ser enviados usando Send-MailMessage
Responder1
Enviar e-mail do script Powershell para vários destinatários com base no usuário do ActiveDirectory
Este formato precisa ser convertido para o exemplo de múltiplos destinatários conforme mostrado acima.
Não sei como capturar os dados corretamente, formatá-los e garantir que permaneçam no formato que o Send-Mailmessage pode usar.
É necessário que haja uma maneira de capturar o(s) endereço(s) de e-mail de cada usuário(s) em uma determinada UO no ActiveDirectory e formatar esse(s) endereço(s) de e-mail para que possam ser enviados usando Send-MailMessage
Abaixo está a lógica do PowerShell para obter a saída nos valores separados por vírgula, excluindo valores NULL para as propriedades de endereço de e-mail das contas que sua lógica captura.
Testei e confirmei que este formato funciona conforme o esperado em meu ambiente, sem usar a lógica que você declara para não se preocupar (por exemplo $OUDetected
).
- Observe que o formato
Send-MailMessage
com o-To
parâmetro funciona perfeitamente com um formato de modo que cada endereço de e-mail com apenas a parte da caixa de correio local e o nome de domínio separados por vírgulas é suficiente.[email protected],[email protected]
eu vou colocarMeu exemplo de trabalhoabaixo e vou colocar oSeu exemploabaixo com base no que você forneceu e como pude confirmar que funcionou bem no meu caso.
Seu exemplo (com minha lógica de trabalho adicionada)
function SendEmail
{
Send-MailMessage -To $Recipients -From "Info <[email protected]>" -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
Seu exemplo (iterado para endereços)
function SendEmail
{
Send-MailMessage -To $To -From "Info <[email protected]>" -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
}
Meu exemplo de trabalho
(Get-ADUser -Filter "(Name -like '*')" -Properties Name, EmailAddress | Where-Object {$_.EmailAddress -ne $null} | Select -ExpandProperty EmailAddress) -join "," | Out-String