PowerShell – Send-MailMessage : envoyer un e-mail à plusieurs destinataires
I. Présentation
Pour envoyer un e-mail en PowerShell, Microsoft a créé le cmdlet Send-MailMessage qui est inclus nativement à PowerShell. Dans certains cas, il peut être intéressant d'envoyer l'e-mail à plusieurs destinataires, mais comment faire ? Je vous montre comment procéder dans ce tutoriel.
II. Send-MailMessage : plusieurs destinataires
Le cmdlet Send-MailMessage contient un ensemble de paramètres, y compris le serveur SMTP (-SmtpServer), l'adresse e-mail de l'expéditeur (-From), le sujet (-Subject) ou encore le corps de l'e-mail (-Body). En ce qui nous concerne, c'est le paramètre -To qui nous intéresse et qui sert à indiquer l'adresse de destination. On pourrait tout simplement indiquer les adresses e-mails à la suite au niveau de la commande, mais si l'on récupère cette liste depuis une variable, un fichier de config ou autre, ce ne sera pas possible.
Commençons par déclarer la variable $Destinataires qui va contenir la liste des destinataires séparés par une virgule :
$Destinataires = "[email protected]","[email protected]","[email protected]"
Cette variable sera de type string c'est-à-dire une chaîne de caractères. Pour l'envoyer comme valeur du paramètre -To, nous devons avoir un tableau de chaînes de caractères. C'est ce que nous allons faire avec la variable $To cette fois-ci, en découpant notre chaîne précédente à chaque fois qu'une virgule est rencontrée (en guise de séparateur).
[string[]]$To = $Destinataires.Split(',')
Si l'on affiche la variable, on obtient :
Il ne reste plus qu'à utiliser notre variable $To au niveau de la commande Send-MailMessage. Finalement, c'est assez simple mais il faut savoir comment s'y prendre.
Send-MailMessage -SmtpServer smtp.server.net -From [email protected] -To $To -Subject "test" -Body "test" -BodyAsHtml
Le code complet :
$Destinataires = "[email protected]","[email protected]","[email protected]" [string[]]$To = $Destinataires.Split(',') Send-MailMessage -SmtpServer smtp.server.net -From [email protected] -To $To -Subject "test" -Body "test" -BodyAsHtml
Voilà, votre e-mail sera envoyé à tous les destinataires de votre liste ! ?
Sauf erreur il n’y a pas besoin de faire un split car « $To » est de type array of string et « -To » accepte ce type de variable.
Ce qui simplifie un peu la commande :
$To= « [email protected] », »[email protected] », »[email protected] »
Send-MailMessage -SmtpServer smtp.server.net -From [email protected] -To $To -Subject « test » -Body « test » -BodyAsHtml
Bonjour,
A quoi correspond réellement » smtp.server.net » ?
Doit-on le remplacer par un nom de serveur ou une adresse IP ?
Merci par avance.
Bonjour,
Cela correspond au nom FQDN ou à l’adresse IP du serveur SMTP à utiliser pour envoyer l’e-mail, par exemple le serveur SMTP de Google pour utiliser Gmail.
Florian
Salut,
Cela ne fonctionne pas car j’ai le méssage suivant : « La réponse du serveur était : 5.1.0 Authentification requise. »
Merci pour votre aide.
Olivier