Envoyer un e-mail en PowerShell via Office 365
I. Présentation
Le service de messagerie inclus à Office 365 peut-être utilisé pour envoyer des e-mails à partir de PowerShell. Le tout en s'authentifiant avec un compte existant sur votre tenant Office 365, ce qui peut s'avérer pratique dans vos scripts pour envoyer une notification.
Je vais vous expliquer dans ce tutoriel comment procéder. Avant de commencer, vous devez disposer d'un compte Office 365 sur le tenant que vous souhaitez utiliser. Si cela est possible, créez un compte dédié à l'envoie de notifications via PowerShell.
Désormais, l'utilisation du cmdlet Send-MailMessage est déconseillée par Microsoft. Nous vous recommandons de lire ces articles :
- Comment envoyer des e-mails avec PowerShell ?
- PowerShell et Microsoft Graph : comment envoyer des e-mails avec Send-MgUserMail ?
II. Le script pour envoyer un e-mail via Office 365
On va définir un ensemble de paramètres avec des variables, notamment : le serveur SMTP, l'adresse e-mail de l'expéditeur (correspondante au tenant sur lequel on s'authentifie), l'adresse e-mail du destinataire, les credentials de connexion à Office 365, ainsi que l'objet et le contenu de l'e-mail.
$SMTPServer = "outlook.office365.com" $SMTPExpediteur = "[email protected]" $SMTPDestinataire = "[email protected]" $Credentials = Get-Credential $EmailSubject = "E-mail via Office 365" $EmailContent = "Bonjour, voici un e-mail envoyé via authentification sur Office 365"
Pour envoyer le message électronique, on va s'appuyer sur le cmdlet "Send-MailMessage" :
Send-MailMessage -Verbose -SmtpServer $SMTPServer ` -From $SMTPExpediteur -To $SMTPDestinataire -Credential $Credentials ` -Subject $EmailSubject ` -Body $EmailContent -BodyAsHtml -UseSsl -Port 587
Il est indispensable d'utiliser les options "UseSsl" et "Port" avec la valeur 587 pour envoyer l'e-mail par Office 365. Lorsque vous allez exécuter ce bout de code, vous devrez saisir vos identifiants car ils ne sont pas intégrés au script. Ensuite, vous devriez recevoir votre e-mail !
Ce qui n'est pratique c'est qu'il faut saisir les identifiants à chaque fois... L'idéal serait de pouvoir stocker ses identifiants dans le script. Plusieurs méthodes pour cela... D'où l'intérêt de PowerShell, il y en a une qui est relativement intéressante via l'utilisation d'une clé AES. Sur le blog Altaro, il y a un article sur le sujet : PowerShell - AES Key
J'essaierai de faire un autre article sur le storage sécurisé des credentials PowerShell. En attendant, profitez bien d'envoyer vos e-mails 🙂
Hello,
Une petite coquille : C’est Get-Credential (sans le s)
Hello, j’ai corrigé merci !
Florian.
Bonjour,
Merci beaucoup !
Salutations.
Sylvain Bonnet Passemar
Bonjour,
la commande Send-MailMessage a été dépréciée. Il faudrait peut-être mettre à jour cet article avec les nouvelles pratiques.
il y a un bon tuto ici : https://www.gitbit.org/course/ms-500/blog/how-to-send-emails-through-microsoft-365-from-powershell-injifle8u
Bonjour David,
Oui effectivement, Send-MailMessage est déprécié. J’ai d’ailleurs fait des tutos sur les nouvelles pratiques, je vais mettre les liens dans celui-ci.
Bonne journée
Florian