sendamatic – Go-Client für die Sendamatic-E-Mail-Delivery-API
sendamatic ist eine Go-Bibliothek für den Versand von E-Mails über die Sendamatic-E-Mail-Delivery-API. Die Library bietet einen Fluent-Message-Builder, Context-Support und automatische Base64-Kodierung von Attachments.
Was ist Sendamatic?
Sendamatic ist ein britischer E-Mail-Versanddienst mit Fokus auf Zuverlässigkeit und Zustellbarkeit. Der preisgünstige Service eignet sich besonders für transaktionale E-Mails wie Registrierungsbestätigungen, Bestellbestätigungen oder Passwort-Resets. Die API ist einfach zu nutzen und bietet alle notwendigen Features für professionellen E-Mail-Versand.
Warum diese Library?
Ich nutze Sendamatic für transaktionale E-Mails in meinen Go-Anwendungen und wollte eine typsichere, idiomatische Go-Library anstelle von manuellen HTTP-Aufrufen. Die Library macht den E-Mail-Versand durch die Fluent-API besonders komfortabel und reduziert Boilerplate-Code erheblich.
Installation
go get code.beautifulmachines.dev/jakoubek/sendamatic
Authentifizierung
Sendamatic verwendet API-Keys für die Authentifizierung. Erstellen Sie einen API-Key im Sendamatic-Dashboard unter Einstellungen → API-Keys.
export SENDAMATIC_API_KEY="your-api-key"
Schnellstart
package main
import (
"context"
"fmt"
"log"
"os"
"code.beautifulmachines.dev/jakoubek/sendamatic"
)
func main() {
client := sendamatic.NewClient(os.Getenv("SENDAMATIC_API_KEY"))
msg := sendamatic.NewMessage().
From("sender@example.com", "Sender Name").
To("recipient@example.com", "Recipient Name").
Subject("Test E-Mail").
TextBody("Dies ist eine Test-E-Mail.").
HTMLBody("<p>Dies ist eine <strong>Test-E-Mail</strong>.</p>")
ctx := context.Background()
result, err := client.Send(ctx, msg)
if err != nil {
log.Fatal(err)
}
fmt.Printf("E-Mail gesendet: %s\n", result.MessageID)
}
Features
Fluent Message Builder
Die Library verwendet einen Fluent-Builder für intuitive E-Mail-Erstellung:
msg := sendamatic.NewMessage().
From("sender@example.com", "Sender Name").
To("recipient@example.com", "Recipient Name").
ReplyTo("reply@example.com").
Subject("Wichtige Nachricht").
TextBody("Textversion der E-Mail").
HTMLBody("<p>HTML-Version der E-Mail</p>")
Mehrere Empfänger (CC/BCC)
msg := sendamatic.NewMessage().
From("sender@example.com", "Team").
To("recipient1@example.com", "Person 1").
To("recipient2@example.com", "Person 2").
CC("cc@example.com", "Copy").
BCC("bcc@example.com", "Blind Copy").
Subject("Rundschreiben")
Attachments mit automatischer Base64-Kodierung
Die Library kodiert Attachments automatisch als Base64:
attachment, err := sendamatic.NewAttachment("dokument.pdf", pdfData)
if err != nil {
log.Fatal(err)
}
msg := sendamatic.NewMessage().
From("sender@example.com", "Sender").
To("recipient@example.com", "Recipient").
Subject("Dokument anbei").
TextBody("Siehe Anhang.").
Attachment(attachment)
Custom Headers
Fügen Sie eigene E-Mail-Header hinzu:
msg := sendamatic.NewMessage().
From("sender@example.com", "Sender").
To("recipient@example.com", "Recipient").
Subject("Mit Custom Header").
Header("X-Priority", "1").
Header("X-Mailer", "MyApp/1.0").
TextBody("E-Mail mit benutzerdefinierten Headern")
HTML + Text (Multipart)
Senden Sie beide Versionen für optimale Kompatibilität:
msg := sendamatic.NewMessage().
From("sender@example.com", "Newsletter").
To("subscriber@example.com", "Abonnent").
Subject("Neuer Artikel verfügbar").
TextBody("Lesen Sie unseren neuen Artikel unter: https://example.com/artikel").
HTMLBody(`
<h1>Neuer Artikel verfügbar</h1>
<p>Lesen Sie unseren <a href="https://example.com/artikel">neuen Artikel</a>.</p>
`)
Context-Support
Alle API-Aufrufe unterstützen context.Context für Timeouts und Cancellation:
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()
result, err := client.Send(ctx, msg)
if err != nil {
if ctx.Err() == context.DeadlineExceeded {
log.Println("Timeout beim E-Mail-Versand")
}
log.Fatal(err)
}
Strukturierte Fehlerbehandlung
Die Library gibt detaillierte Fehlerinformationen zurück:
result, err := client.Send(ctx, msg)
if err != nil {
log.Printf("Fehler beim E-Mail-Versand: %v", err)
return
}
log.Printf("E-Mail erfolgreich gesendet: %s", result.MessageID)
Voraussetzungen
- Go 1.21 oder höher
- Sendamatic-Account mit API-Key
Links
- Forgejo: code.beautifulmachines.dev/jakoubek/sendamatic
- GitHub-Mirror: github.com/jakoubek/sendamatic
- Go Package: pkg.go.dev/code.beautifulmachines.dev/jakoubek/sendamatic
Lizenz
MIT License – siehe LICENSE.