Envoi d'email en Go (Golang) : bibliothèques et exemples de code

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 complet des bibliothèques et outils



Dans le développement web moderne, l'envoi d'emails reste l'une des tâches clés pour les notifications, les inscriptions, la réinitialisation de mots de passe et les newsletters. Le langage Go (Golang) propose plusieurs méthodes efficaces pour l'intégration avec les serveurs SMTP. Dans cet article, nous analyserons la bibliothèque standard net/smtp, la bibliothèque tierce populaire gomail et la bibliothèque avancée go-smtp. Vous apprendrez à envoyer des emails texte simples et HTML, à ajouter des pièces jointes et à configurer une connexion sécurisée.



1. Bibliothèque standard net/smtp



Le paquet net/smtp est intégré à Go et ne nécessite aucune installation supplémentaire. Il fournit des fonctions de base pour se connecter à un serveur SMTP, s'authentifier et envoyer des messages. Cependant, pour répondre aux exigences modernes (HTML, pièces jointes, SSL/TLS), vous devrez écrire plus de code.



Exemple simple d'envoi d'un email texte



package main

import ( "fmt" "net/smtp")

func main() { // Paramètres du serveur SMTP (exemple pour Gmail) smtpHost := "smtp.gmail.com" smtpPort := "587" from := "your_email@gmail.com" password := "your_app_password" to := []string{"recipient@example.com"}

// Sujet et corps du message (format le plus simple) subject := "Subject: Message de test depuis Go" body := "Bonjour ! Ce message a été envoyé avec net/smtp." msg := []byte(subject + "" + body)

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

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


Important : Pour Gmail, vous devez utiliser un mot de passe d'application (pas le mot de passe principal) et autoriser l'accès aux applications moins sécurisées. Pour d'autres services (Yandex, Mail.ru), les paramètres peuvent différer.



Envoi d'un email HTML via net/smtp



Pour envoyer un email HTML, vous devez spécifier explicitement l'en-tête Content-Type :



package main

import ( "fmt" "net/smtp")

func main() { smtpHost := "smtp.gmail.com" smtpPort := "587" from := "your_email@gmail.com" password := "your_app_password" to := []string{"recipient@example.com"}

// Construction des en-têtes MIME headers := make(map[string]string) headers["From"] = from headers["To"] = "recipient@example.com" headers["Subject"] = "Email HTML depuis Go" headers["MIME-Version"] = "1.0" headers["Content-Type"] = "text/html; charset=\\"UTF-8\\""

// Assemblage du message message := "" for k, v := range headers { message += fmt.Sprintf("%s: %s\\r", k, v) } message += "\\r" + "<h1>Bonjour !</h1><p>Ceci est un email <b>HTML</b>.</p>"

auth := smtp.PlainAuth("", from, password, smtpHost) err := smtp.SendMail(smtpHost+":"+smtpPort, auth, from, to, []byte(message)) if err != nil { fmt.Println("Erreur :", err) }}


L'inconvénient de net/smtp est l'absence de support pour les pièces jointes et les structures de message multipart complexes. Pour de telles tâches, il est préférable d'utiliser des bibliothèques spécialisées.



2. Bibliothèque gomail



Gomail est l'une des bibliothèques tierces les plus populaires pour l'envoi d'emails en Go. Elle offre une API pratique, le support du HTML, des pièces jointes, de l'incorporation d'images, de SSL/TLS et d'en-têtes personnalisables.



Installation



go get gopkg.in/mail.v2


Exemple d'envoi d'un email HTML avec pièce jointe



package main

import ( "crypto/tls" "fmt" gomail "gopkg.in/mail.v2")

func main() { m := gomail.NewMessage(

Recommendations