
Tengo un script al que me gustaría enviar dinámicamente un correo electrónico que contenga información e ir a ciertas personas según quién en la empresa esté ejecutando el script gracias a ActiveDirectory.
Tengo otra porción de código que detecta desde qué unidad organizativa está ejecutando esto la cuenta de usuario o de servicio, así que por el bien de esta pregunta no se preocupe por eso.
Lo que tengo hasta ahora es algo como esto:
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
Estoy intentando utilizar el cmdlet Send-MailMessage pero los correos electrónicos deben enviarse en un formato particular a los destinatarios.
Un único destinatario es:
"John Doe <[email protected]>"
Varios destinatarios deberían verse así:
"John Doe
<[email protected]>", "Jane Doe <[email protected]>"
El problema es complicado entonces porque el resultado de $To está en el formato:
Dirección de correo electrónico:[correo electrónico protegido]
Dirección de correo electrónico:[correo electrónico protegido]
Este formato debe convertirse al ejemplo de múltiples destinatarios como se muestra arriba.
No sé cómo capturar correctamente los datos, formatearlos y asegurarme de que permanezcan en el formato que Send-Mailmessage puede usar.
TL;DR: debe haber una forma de capturar las direcciones de correo electrónico de cada usuario en una unidad organizativa determinada en ActiveDirectory y formatear esas direcciones de correo electrónico para que puedan enviarse mediante Send-MailMessage.
Respuesta1
Enviar correo electrónico desde el script de Powershell a varios destinatarios según el usuario de ActiveDirectory
Este formato debe convertirse al ejemplo de múltiples destinatarios como se muestra arriba.
No sé cómo capturar correctamente los datos, formatearlos y asegurarme de que permanezcan en el formato que Send-Mailmessage puede usar.
Es necesario que haya una forma de capturar las direcciones de correo electrónico de cada usuario en una unidad organizativa determinada en ActiveDirectory y formatear esas direcciones de correo electrónico para que puedan enviarse mediante Send-MailMessage.
A continuación se muestra la lógica de PowerShell para obtener el resultado en valores separados por comas, excluyendo los valores NULL para las propiedades de dirección de correo electrónico de aquellas cuentas que toma su lógica.
Probé y confirmé que este formato funciona como se esperaba en mi entorno sin utilizar la lógica de la que usted indica que no debe preocuparse (por ejemplo $OUDetected
).
- Tenga en cuenta que el formato
Send-MailMessage
con el-To
parámetro funciona bien con un formato de, por lo que cada dirección de correo electrónico con solo la parte del buzón local y el nombre de dominio separados por comas es suficiente.[email protected],[email protected]
Lo pondréMi ejemplo de trabajoabajo y pondré elTu ejemploa continuación según lo que diste y cómo pude confirmar que funcionó bien en mi caso.
Su ejemplo (con mi lógica de trabajo agregada)
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
Su ejemplo (iterado a direcciones)
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
}
Mi ejemplo de trabajo
(Get-ADUser -Filter "(Name -like '*')" -Properties Name, EmailAddress | Where-Object {$_.EmailAddress -ne $null} | Select -ExpandProperty EmailAddress) -join "," | Out-String