PI Services

Le blog des collaborateurs de PI Services

Powershell – Script de MailFlow Externe

 

Le script suivant:

- envoi un mail a un responder (ping@oleane.net)

- attends et récupère la réponse du responder dans Outlook

- retourne un état en cas d’echec

- retourne un état et le message en cas de succes, et supprime le message.

Prerequis: client outlook installé avec le composant “Visual Basic for application” et présence de l’assembly .net Microsoft.Office.Interop.Outlook (cette assembly est présente dans le dossier C:\Windows\assembly).

Dans le menu Outil/Macro/Sécurité , cochez l’option ci-dessous

image image

Paramètre de script a modifier:

$smtpServer: le nom du serveur smtp

$From: l’emeteur du mail

$ReplyTo: l’adresse de réponse

$Dest: le destinataire du mail

$Subject: le sujet du mail

$Body: le corp du mail

$SecondToWait: le temps d’attente de la réponse du responder

[System.Reflection.Assembly]::Load("Microsoft.Office.Interop.Outlook, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c")

    [string]$smtpServer=”mon_serveur_smtp@home.fr”

    [string]$From="test@home.fr"

    [string]$ReplyTo="test@home.fr"

    [string]$Dest="ping@oleane.net"

    [string]$Subject="Test envoi mail"

    [string]$Body="Test envoi mail"

    [string]$SecondToWait =90

 

function sendMail

{

     Write-Host "Sending Email"

     #Creating a Mail object

     $msg = new-object Net.Mail.MailMessage

     #Creating SMTP server object

     $smtp = new-object Net.Mail.SmtpClient($smtpServer)

     #Email structure

     $msg.From = "$From"

     $msg.ReplyTo = "$ReplyTo"

     $msg.To.Add("$Dest")

     $msg.subject = "$Subject"

     $msg.body = "$Body"

     #Sending email

     $smtp.Send($msg)

}

Function Get-MessageInBox

{

Add-type -assembly "Microsoft.Office.Interop.Outlook" | out-null

$olFolders = "Microsoft.Office.Interop.Outlook.olDefaultFolders" -as [type]

$outlook = new-object -comobject outlook.application

$namespace = $outlook.GetNameSpace("MAPI")

write-host "waiting for the response from Oleane..."

$namespace.SendAndReceive($false)

sleep -Seconds $SecondToWait

$folder = $namespace.getDefaultFolder($olFolders::olFolderInBox)

$folder.items |

Select-Object -Property * -Last 1 | where-object {$_.subject -eq "[echo] Votre message a $Dest"}

}

 

Function Delete-mail

{

Add-type -assembly "Microsoft.Office.Interop.Outlook" | out-null

$olFolders = "Microsoft.Office.Interop.Outlook.olDefaultFolders" -as [type]

$outlook = new-object -comobject outlook.application

$namespace = $outlook.GetNameSpace("MAPI")

$folder = $namespace.getDefaultFolder($olFolders::olFolderInBox)

$folder.items | Select-Object -Property * -Last 1 | where-object {$_.subject -eq "[echo] Votre message a $Dest"} | tee-object -Variable MessageToDelete

$folder.Items.Remove(1)

}

#Calling function sendmail

sendMail

#Retrieve message to oleane in inbox

Get-MessageInBox | Tee-Object -Variable Message | out-null

if ($Message -eq $null)

{

write-host -ForegroundColor Darkred "---PAS ENCORE DE REPONSE DE $Dest---"

}

else

{

write-host -ForegroundColor Darkgreen "---REPONSE OK DE $Dest---"

Write-Host -ForegroundColor Darkgreen "----MESSAGE----:"

Write-Host "SUJET:" $Message.Subject

Write-Host "ENVOYE LE:" $Message.SentOn

Write-Host "RECU LE:" $Message.ReceivedTime

Write-Host "CORP DU MESSAGE:" $Message.Body

Clear-Variable -Name Message

Write-Host -ForegroundColor Yellow "SUPPRESSION DU MESSAGE..."

Delete-mail | Out-Null

}