POWERSHELL : Envoyer un email avec GMAIL (et sans client SMTP) 1

POWERSHELL : Envoyer un email avec GMAIL (et sans client SMTP)

Après Kixtart, Perl et Python, voici le tour de PowerShell !

Je découvre ce langage de script proposé par Microsoft et disponible depuis XP jusqu’à 2008 Server R2.

Comme à mon habitude, je vais vous faire partager quelques bouts de code que j’ai assemblé.

J’ai écrit à partir de plusieurs sources, la fonction suivante :

# envoi un email

function SendEmail {

param(

[System.String[]] $EmailTo,

[System.String] $Subject,

[System.String] $Body=””,

[System.String[]] $Attachments

)

## adresse de l’expéditeur

$EmailFrom = “SomeEmailAddress@gmail.com”

## nom d’authentifiation SMTP

$username = ” SomeEmailAddress @gmail.com”

## mot de passe d’authentifiation SMTP

$password = “SomePassword”

## serveur SMTP

$SMTPServer = “smtp.gmail.com”

## port SMTP

$SMTPPort = 587

## initialisation des outils Email

$SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, $SMTPPort)

$SMTPClient.EnableSsl = $true

$SMTPClient.Credentials = New-Object System.Net.NetworkCredential($username, $password);

## création du message

$emailMessage = New-Object System.Net.Mail.MailMessage

## expéditeur

$emailMessage.From = $EmailFrom

## destinataires

foreach ($item in $EmailTo) {

if ($debug) {Write-Host $item}

$emailMessage.To.Add($item)

}

## sujet

$emailMessage.Subject = $Subject

## corps

$emailMessage.Body = $Body

## pièces jointes

if ($Attachments -cne $null)

{

foreach ($file in $Attachments) {

if ($debug) {Write-Host $file}

$emailMessage.Attachments.Add($file)

}

}

## envoie de l’émail

$SMTPClient.Send($emailMessage)

}

Vous noterez que l’adresse de l’expéditeur et les identifiants GMAIL sont codés dans la fonction.

Cette fonction reçoit 4 arguments :

[System.String[]] $EmailTo,        un tableau d’adresse email de destination

[System.String] $Subject,        le sujet du mail

[System.String] $Body=””,        le corps textuel du mail – par défaut, il est vide

[System.String[]] $Attachments     Un tableau de pièces jointes – peut être $null

L’évocation du script se fera donc de la fonction suivante :

## destinataires

$destinataires = “SomeEmailAddress@gmail.com”,” SomeEmailAddress@free.fr

$ Attachments = « c:somefile.txt », « d:somefile.xml »

SendEmail $destinataires « Sujet »” « Corps » $ Attachments

En ajoutant la ligne suivante, il est possible d’envoyer un email dont le corps est code en HTML

$ emailMessage.IsBodyHTML = $true

La séquence suivante permet de placer le contenu du fichier textuel « c:sometextfile.txt » dans le corps du mail.

$Body = [string]::join([environment]::NewLine, (get-content “c:sometextfile.txt »))

SendEmail $destinataires « Sujet » ” $Body

A propos Olivier Olejniczak

Cofondateur de SynerGeek.fr. Passionné d'informatique, je m'intéresse plus particulièrement aux technologies de virtualisation et de stockage. J'apprécie la liberté et la quasi-absence de frontières à mon imagination qu'offre l'OpenSource et Linux. Professionnellement, je travaille exclusivement avec les outils Microsoft. Les pieds bien sur terre et ancrés dans le quotidien de l'entreprise, j'aime faire partager mes découvertes et contribuer à un meilleur usage des technologies. Vous aussi, rejoignez-nous sur Synergeek et partagez votre expérience!

Je vous propose également...

Compiler un script PowerShell avec PS2EXE 2

Compiler un script PowerShell avec PS2EXE

J’utilise au quotidien le langage PowerShell pour gérer des serveurs Windows. Ce langage est à …

PowerShell : Programmation MultiTâches 7

PowerShell : Programmation MultiTâches

Il peut être intéressant, afin d’optimiser le temps de traitement de tâches n’ayant pas un …

5 commentaires

  1. Suis un peu débutant en informatique pourriez vous faire ce tuto en vidéo pour me permettre de mieux comprendre merci a vous

  2. Bonjour je suis à la recherche du même script mais compatible avec la version 4.0 de PowerShell (présente sur 2012r2).
    En effet j’ai eu beau essayé plusieurs scripts trouvés sur le Net permettant l’envoi d’un mail automatique via Gmail, aucun ne fonctionne depuis mon serveur 2012r2.

    Si quelqu’un a un script fonctionnel a partager.

    Merci d’avance

  3. hello sir

    i have use you script,
    but i dont ge any resultats
    non errore, but insensible…

    my best regard
    arnold

  4. effectivement
    merci du tuyau

    quelques exemples ici

  5. Bonjour
    Merci beaucoup pour ces articles sur PowerShell.

    Pour les mails, à noter qu’en V2 on y trouve en natif la commande send-mailmessage, elle est très complète