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 :
Aussi dans la bibliothèque
Validation des données en Go : bibliothèques, exemples et bonnes pratiques
Test en Java : frameworks et outils (JUnit, TestNG, Mockito)
Biometric Kotlin : guide complet avec exemples pratiques
Travailler avec XML en C++ : bibliothèques pugixml, TinyXML-2 et RapidXML