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

Lizenz

MIT License – siehe LICENSE.

| Aktualisiert: 11.02.2026