Envoi d'email en Go : guide complet des bibliothèques et outils

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Envoi d'email en Go (Golang) : aperçu des bibliothèques et outils



Go (Golang) est un langage compilé moderne, parfaitement adapté à la création de services backend, de microservices et d'automatisation. L'une des tâches courantes est l'envoi programmatique d'emails. Dans cet article, nous allons détailler les outils standards de Go pour travailler avec SMTP, les bibliothèques tierces populaires, ainsi que des exemples d'envoi d'emails simples et HTML avec pièces jointes.



Le package standard net/smtp



Dans la bibliothèque standard de Go, il existe le package net/smtp qui offre des fonctionnalités de base pour envoyer des emails via un serveur SMTP. Il est simple, mais nécessite la construction manuelle du corps du message (y compris les en-têtes, les types MIME).



Exemple simple d'envoi d'un email texte



package main

import ( "fmt" "net/smtp")

func main() { // Données d'authentification from := "your_email@gmail.com" password := "your_app_password" to := []string{"recipient@example.com"}

// Serveur SMTP (exemple : Gmail) smtpHost := "smtp.gmail.com" smtpPort := "587"

// Corps du message (obligatoire avec les en-têtes) subject := "Subject: Bonjour depuis Go!" body := "Ceci est un email de test envoyé avec net/smtp." message := []byte(subject + "" + body)

// Authentification auth := smtp.PlainAuth("", from, password, smtpHost)

// Envoi err := smtp.SendMail(smtpHost+":"+smtpPort, auth, from, to, message) if err != nil { fmt.Println("Erreur d'envoi :", err) return } fmt.Println("Email envoyé avec succès !")}


Important : Pour Gmail, vous aurez besoin d'un mot de passe d'application, et non de votre mot de passe habituel.



Envoi d'un email HTML et d'un email avec pièces jointes



Le package net/smtp ne sait pas formater automatiquement les messages MIME. Pour les emails HTML ou les pièces jointes, vous devrez construire manuellement les en-têtes Content-Type et encoder les pièces jointes en base64. C'est fastidieux, donc pour les emails complexes, il est préférable d'utiliser des bibliothèques tierces.



Bibliothèques tierces populaires pour l'envoi d'email en Go



Il existe plusieurs bibliothèques matures qui simplifient considérablement le travail :



  • go-gomail/gomail — l'une des plus populaires. Prend en charge le HTML, les pièces jointes, l'incorporation d'images, plusieurs destinataires.
  • jordan-wright/email — une bibliothèque légère avec une API pratique.
  • sendgrid/sendgrid-go — le client officiel pour le service SendGrid (adapté aux envois massifs).


Exemple avec go-gomail



package main

import ( "fmt" "gopkg.in/gomail.v2")

func main() { m := gomail.NewMessage() m.SetHeader("From", "your_email@gmail.com") m.SetHeader("To", "recipient@example.com") m.SetHeader("Subject", "Email HTML avec pièce jointe") m.SetBody("text/html", "<h1>Bonjour !</h1><p>Ceci est un email <b>HTML</b>.</p>") m.Attach("/path/to/file.pdf") // Pièce jointe

d := gomail.NewDialer("smtp.gmail.com", 587, "your_email@gmail.com", "your_app_password")

if err := d.DialAndSend(m); err != nil { fmt.Println("Erreur :", err) return } fmt.Println("Email envoyé !")}


Envoi asynchrone et pool de connexions



Si vous devez envoyer beaucoup d'emails (par exemple, après l'inscription d'utilisateurs), il est important de ne pas bloquer le thread principal. Go gère très bien la concurrence :

Recommendations