Comment envoyer un e-mail avec PowerShell

Nous connaissons l'applet de commande Send-MailMessage lors de l'envoi d'e-mails via PowerShell. Malheureusement, l’applet de commande Send-MailMessage est obsolète et son utilisation n’est plus recommandée. Alors, quelle est l’alternative Send-MailMessage ? La réponse est Send-MailKitMessage. Dans cet article, vous apprendrez comment envoyer des e-mails avec PowerShell.

L’applet de commande Send-MailMessage est obsolète

LeEnvoyer un message électroniqueL'applet de commande est populaire pour envoyer un message électronique via PowerShell. Malheureusement, l'applet de commande Send-MailMessage est obsolète et vous ne devez plus l'utiliser.

Note:L'applet de commande Send-MailMessage est obsolète. Cette applet de commande ne garantit pas des connexions sécurisées aux serveurs SMTP. Bien qu’il n’existe aucun remplacement immédiat disponible dans PowerShell, nous vous recommandons de ne pas utiliser Send-MailMessage.

Maintenant qu'aucun remplacement n'est disponible dans les applets de commande PowerShell par défaut, existe-t-il un module que nous pouvons installer et utiliser pour envoyer des e-mails à partir de PowerShell ? Oui, il y en a. LeEnvoyer-MailKitMessageLe module est un excellent remplacement pour l’applet de commande Send-MailMessage.

Configurer le relais SMTP

Lisez les articles ci-dessous si vous souhaitez configurer un relais SMTP :

  • Configurer le relais SMTP anonyme dans Exchange Server
  • Configurer le relais SMTP Office 365

Installer le module Send-MailKitMessage

Pour installer le module Send-MailKitMessage sur votre système, suivez les étapes ci-dessous.

1. Définir la politique d'exécution de Windows PowerShell

Par défaut, nous ne pouvons pas installer de scripts. Pour exiger que tous les scripts PowerShell que vous téléchargez sur Internet soient signés par un éditeur de confiance, exécutez PowerShell en tant qu'administrateur et exécutez l'applet de commande.

Set-ExecutionPolicy RemoteSigned

Important:Fermez et rouvrez la fenêtre Windows PowerShell élevée pour que les modifications s'appliquent.

2. Installez le module PowerShellGet

Exécutez PowerShell en tant qu'administrateur. Exécutez la commandeModule d'installation PowershellGet -Force. Lorsqu'on vous demande d'installer le fournisseur NuGet, appuyez surOuiet suivez avecEntrer.

Install-Module PowershellGet -Force

Si vous obtenez une erreur indiquant qu’il est impossible d’installer, lisez l’article Impossible d’installer le fournisseur NuGet pour PowerShell.

3. Installez le module Send-MailKitMessage

Installez leModule Send-MailKitMessage.

Install-Module -Name Send-MailKitMessage -Force

Maintenant que le module est installé, regardons quelques exemples d'envoi d'e-mails avec PowerShell.

Paramètres Send-MailKitMessage

Vous pouvez utiliser les paramètres ci-dessous lorsque vous utilisez le module Send-MailKitMessage.

# Use secure connection if available ([bool], optional)
$UseSecureConnectionIfAvailable = $true

# Authentication ([System.Management.Automation.PSCredential], optional)
$Credential = [System.Management.Automation.PSCredential]::new("Username", (Read-Host -Prompt "Enter password" -AsSecureString))

# SMTP server ([string], required)
$SMTPServer = "SMTPServer"

# Port ([int], required)
$Port = "PortNumber"

# Sender ([MimeKit.MailboxAddress] https://www.mimekit.net/docs/html/T_MimeKit_MailboxAddress.htm, required)
$From = [MimeKit.MailboxAddress]"SenderEmailAddress"

# Recipient list ([MimeKit.InternetAddressList] https://www.mimekit.net/docs/html/T_MimeKit_InternetAddressList.htm, required)
$RecipientList = [MimeKit.InternetAddressList]::new()
$RecipientList.Add([MimeKit.InternetAddress]"Recipient1EmailAddress")

# CC list ([MimeKit.InternetAddressList] https://www.mimekit.net/docs/html/T_MimeKit_InternetAddressList.htm, optional)
$CCList = [MimeKit.InternetAddressList]::new()
$CCList.Add([MimeKit.InternetAddress]"CCRecipient1EmailAddress")

# BCC list ([MimeKit.InternetAddressList] https://www.mimekit.net/docs/html/T_MimeKit_InternetAddressList.htm, optional)
$BCCList = [MimeKit.InternetAddressList]::new()
$BCCList.Add([MimeKit.InternetAddress]"BCCRecipient1EmailAddress")

# Subject ([string], optional)
$Subject = [string]"Subject"

# Text body ([string], optional)
$TextBody = [string]"TextBody"

# HTML body ([string], optional)
$HTMLBody = [string]"HTMLBody"

# Attachment list ([System.Collections.Generic.List[string]], optional)
$AttachmentList = [System.Collections.Generic.List[string]]::new()
$AttachmentList.Add("Attachment1FilePath")

# Splat parameters
$Parameters = @{
    "UseSecureConnectionIfAvailable" = $UseSecureConnectionIfAvailable    
    "Credential"                     = $Credential
    "SMTPServer"                     = $SMTPServer
    "Port"                           = $Port
    "From"                           = $From
    "RecipientList"                  = $RecipientList
    "CCList"                         = $CCList
    "BCCList"                        = $BCCList
    "Subject"                        = $Subject
    "TextBody"                       = $TextBody
    "HTMLBody"                       = $HTMLBody
    "AttachmentList"                 = $AttachmentList
}

# Send message
Send-MailKitMessage @Parameters

Envoyer un e-mail avec des exemples PowerShell

Voici quelques modèles que vous pouvez utiliser pour envoyer des e-mails avec PowerShell.

Les paramètres suivants sont requis :

  • Serveur SMTP
  • Port
  • Depuis
  • Liste des destinataires

Envoyer un e-mail au destinataire

Cet exemple envoie un message électronique d'un expéditeur à un destinataire.

# SMTP server ([string], required)
$SMTPServer = "mail.exoip.com"

# Port ([int], required)
$Port = "25"

# Sender ([MimeKit.MailboxAddress] https://www.mimekit.net/docs/html/T_MimeKit_MailboxAddress.htm, required)
$From = [MimeKit.MailboxAddress]"[email protected]"

# Recipient list ([MimeKit.InternetAddressList] https://www.mimekit.net/docs/html/T_MimeKit_InternetAddressList.htm, required)
$RecipientList = [MimeKit.InternetAddressList]::new()
$RecipientList.Add([MimeKit.InternetAddress]"[email protected]")

# Subject ([string], optional)
$Subject = [string]"This is the subject"

# Text body ([string], optional)
$TextBody = [string]"This is the text body"

# Splat parameters
$Parameters = @{
    "SMTPServer"    = $SMTPServer
    "Port"          = $Port
    "From"          = $From
    "RecipientList" = $RecipientList
    "Subject"       = $Subject
    "TextBody"      = $TextBody
}

# Send message
Send-MailKitMessage @Parameters

Voici à quoi cela ressemble dans la boîte de réception du destinataire.

Envoyer un email avec pièce jointe

Cet exemple envoie un e-mail avec une pièce jointe à plusieurs destinataires.

# SMTP server ([string], required)
$SMTPServer = "mail.exoip.com"

# Port ([int], required)
$Port = "25"

# Sender ([MimeKit.MailboxAddress] https://www.mimekit.net/docs/html/T_MimeKit_MailboxAddress.htm, required)
$From = [MimeKit.MailboxAddress]"[email protected]"

# Recipient list ([MimeKit.InternetAddressList] https://www.mimekit.net/docs/html/T_MimeKit_InternetAddressList.htm, required)
$RecipientList = [MimeKit.InternetAddressList]::new()
$RecipientList.Add([MimeKit.InternetAddress]"[email protected]")
$RecipientList.Add([MimeKit.InternetAddress]"[email protected]")

# Subject ([string], optional)
$Subject = [string]"Sending the Attachment"

# Text body ([string], optional)
$TextBody = [string]"See the CSV file attachment."

# Attachment list ([System.Collections.Generic.List[string]], optional)
$AttachmentList = [System.Collections.Generic.List[string]]::new()
$AttachmentList.Add("C:tempFile.csv")

# Splat parameters
$Parameters = @{
    "SMTPServer"     = $SMTPServer
    "Port"           = $Port
    "From"           = $From
    "RecipientList"  = $RecipientList
    "Subject"        = $Subject
    "TextBody"       = $TextBody
    "AttachmentList" = $AttachmentList
}

# Send message
Send-MailKitMessage @Parameters

Voici à quoi cela ressemble dans la boîte de réception du destinataire.

Envoyer un e-mail à la liste de diffusion

Cet exemple envoie un message électronique à une liste de diffusion avec des destinataires supplémentaires dans les champs CC et BCC.

# SMTP server ([string], required)
$SMTPServer = "mail.exoip.com"

# Port ([int], required)
$Port = "25"

# Sender ([MimeKit.MailboxAddress] https://www.mimekit.net/docs/html/T_MimeKit_MailboxAddress.htm, required)
$From = [MimeKit.MailboxAddress]"[email protected]"

# Recipient list ([MimeKit.InternetAddressList] https://www.mimekit.net/docs/html/T_MimeKit_InternetAddressList.htm, required)
$RecipientList = [MimeKit.InternetAddressList]::new()
$RecipientList.Add([MimeKit.InternetAddress]"[email protected]")

# CC list ([MimeKit.InternetAddressList] https://www.mimekit.net/docs/html/T_MimeKit_InternetAddressList.htm, optional)
$CCList = [MimeKit.InternetAddressList]::new()
$CCList.Add([MimeKit.InternetAddress]"[email protected]")

# BCC list ([MimeKit.InternetAddressList] https://www.mimekit.net/docs/html/T_MimeKit_InternetAddressList.htm, optional)
$BCCList = [MimeKit.InternetAddressList]::new()
$BCCList.Add([MimeKit.InternetAddress]"[email protected]")

# Subject ([string], optional)
$Subject = [string]"To all the members"

# Text body ([string], optional)
$TextBody = [string]"Check out the magic."

# Splat parameters
$Parameters = @{
    "SMTPServer"     = $SMTPServer
    "Port"           = $Port
    "From"           = $From
    "RecipientList"  = $RecipientList
    "CCList"         = $CCList
    "BCCList"        = $BCCList
    "Subject"        = $Subject
    "TextBody"       = $TextBody
}

# Send message
Send-MailKitMessage @Parameters

Voici à quoi cela ressemble dans la boîte de réception du destinataire.

Envoyer un e-mail via une connexion sécurisée (TLS)

Transport Layer Security (TLS) est un protocole qui crypte les messages électroniques pour des raisons de sécurité et de confidentialité.

Cet exemple envoie un e-mail provenant d'un expéditeur qui doit s'authentifier auprès d'un destinataire via une connexion sécurisée (TLS).

# Use secure connection if available ([bool], optional)
$UseSecureConnectionIfAvailable = $true

# Authentication ([System.Management.Automation.PSCredential], optional)
$Credential = [System.Management.Automation.PSCredential]::new("[email protected]", (Read-Host -Prompt "Enter password" -AsSecureString))

# SMTP server ([string], required)
$SMTPServer = "mail.exoip.com"

# Port ([int], required)
$Port = "587"

# Sender ([MimeKit.MailboxAddress] https://www.mimekit.net/docs/html/T_MimeKit_MailboxAddress.htm, required)
$From = [MimeKit.MailboxAddress]"[email protected]"

# Recipient list ([MimeKit.InternetAddressList] https://www.mimekit.net/docs/html/T_MimeKit_InternetAddressList.htm, required)
$RecipientList = [MimeKit.InternetAddressList]::new()
$RecipientList.Add([MimeKit.InternetAddress]"[email protected]")

# Subject ([string], optional)
$Subject = [string]"Sending with Port 587"

# Text body ([string], optional)
$TextBody = [string]"Sending the message on Port 587 (TLS)"

# Splat parameters
$Parameters = @{
    "UseSecureConnectionIfAvailable" = $UseSecureConnectionIfAvailable
    "Credential"                     = $Credential
    "SMTPServer"                     = $SMTPServer
    "Port"                           = $Port
    "From"                           = $From
    "RecipientList"                  = $RecipientList
    "Subject"                        = $Subject
    "TextBody"                       = $TextBody
}

# Send message
Send-MailKitMessage @Parameters

C'est ça!

Plus de lecture :Envoyer des messages Telegram à partir d'un script PowerShell

Conclusion

Vous avez appris à envoyer des e-mails avec PowerShell à l'aide du module Send-MailKitMessage. C'est un excellent remplacement pour l'applet de commande Send-MailMessage, qui n'est plus utilisée. Installez le module et ajustez vos scripts, ou utilisez-le pour tester votre flux de courrier SMTP sortant.

Avez-vous apprécié cet article ? Vous aimerez peut-être également Comment configurer Microsoft 365 pour accepter uniquement le courrier provenant d'un filtre anti-spam tiers. N'oubliez pas de nous suivre et de partager cet article.

Related Posts