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): Bibliotheken und Codebeispiele



Der Versand von E-Mails ist eine der Kernaufgaben jeder Webanwendung: Benutzerregistrierung, Passwortzurücksetzung, Benachrichtigungen und Newsletter. Die Sprache Go (Golang) bietet sowohl Standardwerkzeuge für die Arbeit mit SMTP als auch leistungsstarke Drittanbieter-Bibliotheken, die den Versand von E-Mails mit HTML-Vorlagen, Anhängen und der Unterstützung verschiedener E-Mail-Dienste vereinfachen. In diesem Artikel betrachten wir im Detail, wie man E-Mails mit Go versendet, analysieren beliebte Bibliotheken und geben praktische Codebeispiele.



Standardbibliothek net/smtp



Das Paket net/smtp ist Teil der Go-Standardbibliothek und bietet einen minimalen Funktionsumfang zum Versenden von E-Mails über einen SMTP-Server. Es eignet sich für einfache Textnachrichten, erfordert jedoch die manuelle Erstellung von Kopfzeilen und Nachrichtentext gemäß RFC 5322.



Beispiel für den Versand einer einfachen Text-E-Mail:



package main

import ( "fmt" "net/smtp")

func main() { // Daten für die Verbindung zum SMTP-Server smtpHost := "smtp.example.com" smtpPort := "587" from := "sender@example.com" password := "your_password" to := []string{"recipient@example.com"}

// Nachrichtentext erstellen (mit Kopfzeilen) subject := "Subject: Hallo von Go!" mime := "MIME-version: 1.0;Content-Type: text/plain; charset=\\"UTF-8\\";

" body := "Dies ist eine Test-E-Mail, gesendet mit Go." msg := []byte(subject + mime + body)

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

// Versand 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!")}


Einschränkungen von net/smtp:

  • Keine Unterstützung für Anhänge ohne manuelle Base64-Kodierung.
  • Erfordert eigenständige Formatierung der MIME-Kopfzeilen.
  • Unbequem für den Versand von HTML-E-Mails mit Bildern.


Bibliothek gomail/v2



Eine der beliebtesten Drittanbieter-Bibliotheken für den E-Mail-Versand mit Go ist gomail (Paket gopkg.in/mail.v2). Sie bietet eine benutzerfreundliche API für die Arbeit mit E-Mails: Unterstützung für Anhänge, HTML- und Textteile, Konfiguration der SMTP-Verbindung sowie die Möglichkeit des Versands über SSL/TLS.



Installation:

go get gopkg.in/mail.v2


Beispiel für den Versand einer HTML-E-Mail mit Anhang:



package main

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

func main() { m := mail.NewMessage() m.SetHeader("From", "sender@example.com") m.SetHeader("To", "recipient@example.com") m.SetHeader("Subject", "HTML-E-Mail mit Anhang")

// Alternative Teile: Text und HTML m.SetBody("text/plain", "Wenn Sie diesen Text sehen, unterstützt Ihr Client kein HTML.") m.AddAlternative("text/html", "<h1>Hallo!</h1><p>Dies ist die HTML-Version der E-Mail.</p>")

// Anhang hinzufügen m.Attach("/path/to/file.pdf")

// SMTP-Client konfigurieren d := mail.NewDialer("smtp.example.com", 587, "sender@example.com", "your_password") d.StartTLSPolicy = mail.MandatoryStartTLS

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


Vorteile von gomail:

  • Einfache und intuitive API.
  • Automatische Erstellung von MIME-Kopfzeilen.
  • Unterstützung für Anhänge und eingebettete Bilder (CID).
  • Arbeit mit SSL/TLS und StartTLS.


Bibliothek go-smtp (emersion/go-smtp)



Die Bibliothek go-smtp von emersion ist eine niedrigschwelligere Alternative, die volle Kontrolle über die SMTP-Verbindung bietet. Sie ist nützlich, wenn Sie

Empfehlungen