TUTOS.EU

Envoyer un mail sous Linux avec Powershell !

Comment envoyer un mail avec pwsh sous Linux

Et là vous vous dites certainement WTF ! Car et oui il peut paraitre étrange d'utiliser powershell sous Linux ! Et pourtant cela fonctionne très bien !

On trouve facilement la doc Microsoft qui indique comment installer powershell sur Linux et vous devriez tomber sur https://learn.microsoft.com/fr-fr/powershell/scripting/install/install-powershell-on-linux?view=powershell-7.5


Suivant votre distrib vous trouverez un lien spécifique. Par exemple pour une base RedHat c'est
https://learn.microsoft.com/fr-fr/powershell/scripting/install/install-rhel?view=powershell-7.5


où on trouve par exemple un script qui s'occupe d'installer le bon package suivant la version de l'OS via dnf.

Pour la suite l'idée est de faire un script mail-pwsh.sh qui s'occupera d'appeler powershell avec les différents paramètres. Pour cela faire

nano /data/mail-pwsh.sh
Lien vers le fichier : cliquez ici Copier le code

Pour le contenu mettre

pwsh /data/mail-pwsh.cod -fromaddress $1 -toaddress $2 -Subject "$3" -body "$4" -attachment $5
Lien vers le fichier : cliquez ici Copier le code

pwsh est la version PowerShell multiplateforme et open-source de PowerShell qui fonctionne sur Linux, macOS et Windows.
/data/mail-pwsh.cod c'est le script powershell à proprement parler.

$1, $2, $3 etc ... correspond aux variables qui seront passées en paramètres au script mail-pwsh.sh

On va le créer le script powershell /data/mail-pwsh.cod avec

nano /data/mail-pwsh.cod
Lien vers le fichier : cliquez ici Copier le code

Y coller et adapter le script powershell dont le login et mot de passe cad

param(
    [string]$fromaddress = "robert@mondomaine.com",
    [string]$toaddress = "gerard@mondomaine.com",
    [string]$Subject = "Test", 
    [string]$body = "Test",
    [string]$attachment = "/data/mail-pwsh.cod"
)

$smtpserver = "smtps.mondomaine.com" 

Clear-Host
write-host $fromaddress
$arraytoaddress = $toaddress.split(";")
$arrayattachment = $attachment.split(";")


write-host $toaddress
write-host "Sujet : $subject"
write-host $body
write-host $attachment

[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12

$PasswordForCredential = ConvertTo-SecureString "lemotdepasse" -AsPlainText -Force
$Credentials = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList "lelogin",$PasswordForCredential

Send-MailMessage -From $fromaddress -To $arraytoaddress -Subject $Subject -BodyAsHtml $body -Attachments $arrayattachment -SmtpServer $smtpserver -Credential $Credentials -Encoding default -UseSsl -Port 587
Lien vers le fichier : cliquez ici Copier le code

On peut maintenant appeler le script avec ses paramètres.
On remarquera qu'on peut attacher plusieurs pièces jointes.

Exemple :

/data/mail-pwsh.sh sender@mondomaine.com "recipient1@mondomaine.com;recipient2@mondomaine.com" "Test sujet 1" 'Un Body test</br>test' "/data/mail-pwsh.cod;/data/mail-pwsh.sh"
Lien vers le fichier : cliquez ici Copier le code