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
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
}