E-Mail-Versand mit Go (Golang): Bibliotheken und Codebeispiele

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): vollständiger Überblick über Bibliotheken und Werkzeuge



Im modernen Web-Development bleibt der Versand von E-Mails eine der Kernaufgaben für Benachrichtigungen, Registrierungen, Passwort-Wiederherstellungen und Newsletter. Die Sprache Go (Golang) bietet mehrere effiziente Möglichkeiten zur Integration mit SMTP-Servern. In diesem Artikel analysieren wir die Standardbibliothek net/smtp, die beliebte Drittanbieter-Bibliothek gomail und die erweiterte go-smtp. Sie erfahren, wie Sie einfache Text- und HTML-E-Mails senden, Anhänge hinzufügen und eine sichere Verbindung konfigurieren.



1. Die Standardbibliothek net/smtp



Das Paket net/smtp ist in Go integriert und erfordert keine zusätzliche Installation. Es bietet grundlegende Funktionen zum Verbinden mit einem SMTP-Server, zur Authentifizierung und zum Senden von Nachrichten. Für moderne Anforderungen (HTML, Anhänge, SSL/TLS) ist jedoch mehr Code erforderlich.



Einfaches Beispiel zum Senden einer Text-E-Mail



package main

import ( "fmt" "net/smtp")

func main() { // SMTP-Server-Einstellungen (Beispiel für Gmail) smtpHost := "smtp.gmail.com" smtpPort := "587" from := "your_email@gmail.com" password := "your_app_password" to := []string{"recipient@example.com"}

// Betreff und Nachrichtentext (einfachstes Format) subject := "Subject: Testnachricht aus Go" body := "Hallo! Diese Nachricht wurde mit net/smtp gesendet." msg := []byte(subject + "" + body)

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

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


Wichtig: Für Gmail muss ein App-Passwort (nicht das Hauptpasswort) verwendet und der Zugriff für weniger sichere Apps erlaubt werden. Für andere Dienste (Yandex, Mail.ru) können die Parameter abweichen.



Senden einer HTML-E-Mail mit net/smtp



Um eine HTML-E-Mail zu senden, muss der Header Content-Type explizit angegeben werden:



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"}

// MIME-Header erstellen headers := make(map[string]string) headers["From"] = from headers["To"] = "recipient@example.com" headers["Subject"] = "HTML-E-Mail aus Go" headers["MIME-Version"] = "1.0" headers["Content-Type"] = "text/html; charset=\\"UTF-8\\""

// Nachricht zusammenstellen message := "" for k, v := range headers { message += fmt.Sprintf("%s: %s\\r", k, v) } message += "\\r" + "<h1>Hallo!</h1><p>Dies ist eine <b>HTML</b>-E-Mail.</p>"

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


Der Nachteil von net/smtp ist das Fehlen von Unterstützung für Anhänge und komplexe mehrteilige Nachrichtenstrukturen. Für solche Aufgaben sind spezialisierte Bibliotheken besser geeignet.



2. Die Bibliothek gomail



Gomail ist eine der beliebtesten Drittanbieter-Bibliotheken für den E-Mail-Versand mit Go. Sie bietet eine benutzerfreundliche API, Unterstützung für HTML, Anhänge, das Einbetten von Bildern, SSL/TLS und konfigurierbare Header.



Installation



go get gopkg.in/mail.v2


Beispiel zum Senden einer HTML-E-Mail mit Anhang



package main

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

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

Empfehlungen