E-Mail-Versand mit Go: Vollständiger Leitfaden zu Bibliotheken und Tools

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

E-Mail-Versand mit Go (Golang): Überblick über Bibliotheken und Tools



Go (Golang) ist eine moderne, kompilierte Sprache, die sich hervorragend für die Entwicklung von Backend-Diensten, Microservices und Automatisierung eignet. Eine häufige Aufgabe ist das programmatische Versenden von E-Mails. In diesem Artikel gehen wir detailliert auf die Standardmittel von Go für die Arbeit mit SMTP, beliebte Drittanbieter-Bibliotheken sowie Beispiele zum Versenden einfacher und HTML-E-Mails mit Anhängen ein.



Das Standardpaket net/smtp



In der Standardbibliothek von Go gibt es das Paket net/smtp, das grundlegende Funktionen zum Versenden von E-Mails über einen SMTP-Server bietet. Es ist einfach, erfordert jedoch die manuelle Erstellung des E-Mail-Textkörpers (einschließlich Header, MIME-Typen).



Einfaches Beispiel zum Versenden einer Text-E-Mail



package main

import ( "fmt" "net/smtp")

func main() { // Authentifizierungsdaten from := "your_email@gmail.com" password := "your_app_password" to := []string{"recipient@example.com"}

// SMTP-Server (z.B. Gmail) smtpHost := "smtp.gmail.com" smtpPort := "587"

// E-Mail-Textkörper (mit Headern erforderlich) subject := "Subject: Hallo von Go!" body := "Dies ist eine Test-E-Mail, gesendet mit net/smtp." message := []byte(subject + "" + body)

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

// Senden err := smtp.SendMail(smtpHost+":"+smtpPort, auth, from, to, message) if err != nil { fmt.Println("Fehler beim Senden:", err) return } fmt.Println("E-Mail erfolgreich gesendet!")}


Wichtig: Für Gmail wird ein App-Passwort benötigt, nicht das normale Passwort.



Versenden einer HTML-E-Mail und einer E-Mail mit Anhängen



Das Paket net/smtp kann keine MIME-Nachrichten automatisch erstellen. Für HTML-E-Mails oder Anhänge müssen die Content-Type-Header manuell erstellt und Anhänge in base64 codiert werden. Dies ist umständlich, daher ist es für komplexe E-Mails besser, Drittanbieter-Bibliotheken zu verwenden.



Beliebte Drittanbieter-Bibliotheken für den E-Mail-Versand mit Go



Es gibt mehrere ausgereifte Bibliotheken, die die Arbeit erheblich vereinfachen:



  • go-gomail/gomail — eine der beliebtesten. Unterstützt HTML, Anhänge, Einbettung von Bildern, mehrere Empfänger.
  • jordan-wright/email — eine leichte Bibliothek mit benutzerfreundlicher API.
  • sendgrid/sendgrid-go — der offizielle Client für den SendGrid-Dienst (geeignet für Massenmailings).


Beispiel mit 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", "HTML-E-Mail mit Anhang") m.SetBody("text/html", "<h1>Hallo!</h1><p>Dies ist eine <b>HTML</b>-E-Mail.</p>") m.Attach("/path/to/file.pdf") // Anhang

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

if err := d.DialAndSend(m); err != nil { fmt.Println("Fehler:", err) return } fmt.Println("E-Mail gesendet!")}


Asynchrones Senden und Verbindungspool



Wenn viele E-Mails gesendet werden müssen (z.B. nach der Benutzerregistrierung), ist es wichtig, den Hauptthread nicht zu blockieren. Go kommt hervorragend mit Nebenläufigkeit zurecht:

Empfehlungen