SDK's

Go

De officiële Go-module heeft geen externe dependencies en gebruikt alleen de standaardbibliotheek (net/http, encoding/json). Werkt met Go 1.21+.

github.com/nljerry/wesender-go

Installatie

go get
go get github.com/nljerry/wesender-go

Initialisatie

main.go
import (
    wesender "github.com/nljerry/wesender-go"
    "os"
)

ws := wesender.New(os.Getenv("WS_API_KEY"))

E-mail versturen

E-mail versturen
result, err := ws.SendEmail(wesender.SendEmailInput{
    From:    "noreply@joudomein.nl",
    To:      []string{"klant@voorbeeld.nl"},
    Subject: "Welkom!",
    HTML:    "<p>Bedankt voor je registratie.</p>",
})
if err != nil {
    log.Fatal(err)
}
fmt.Println(result.ID, result.Status) // em_01hw... queued

Meerdere ontvangers

Meerdere ontvangers
ws.SendEmail(wesender.SendEmailInput{
    From:    "nieuwsbrief@joudomein.nl",
    To:      []string{"a@voorbeeld.nl", "b@voorbeeld.nl"},
    CC:      []string{"manager@bedrijf.nl"},
    Subject: "Maandelijks rapport",
    HTML:    "<p>Zie bijgevoegde informatie.</p>",
})

Bijlagen

PDF meesturen
import (
    "encoding/base64"
    "os"
)

data, _ := os.ReadFile("factuur.pdf")
pdf := base64.StdEncoding.EncodeToString(data)

ws.SendEmail(wesender.SendEmailInput{
    From:    "facturen@joudomein.nl",
    To:      []string{"klant@voorbeeld.nl"},
    Subject: "Factuur 2026-0142",
    HTML:    "<p>Bijgevoegd vind je jouw factuur.</p>",
    Attachments: []wesender.Attachment{{
        Filename:    "factuur-2026-0142.pdf",
        Content:     pdf,
        ContentType: "application/pdf",
    }},
})

Batch versturen

Batch
results, err := ws.SendBatch([]wesender.SendEmailInput{
    {From: "nl@bedrijf.nl", To: []string{"a@voorbeeld.nl"}, Subject: "Hoi A", HTML: "<p>A</p>"},
    {From: "nl@bedrijf.nl", To: []string{"b@voorbeeld.nl"}, Subject: "Hoi B", HTML: "<p>B</p>"},
})
for _, r := range results {
    fmt.Println(r.ID, r.Status)
}

Domeinen beheren

Domeinen
// Alle domeinen
domeinen, err := ws.ListDomains()

// Domein toevoegen
domein, err := ws.CreateDomain("joudomein.nl")
fmt.Printf("%+v
", domein.DNSRecords) // SPF, DKIM, DMARC

// DNS verifiëren
resultaat, err := ws.VerifyDomain(domein.ID)
fmt.Println(resultaat.SPFOk, resultaat.DKIMOk)

API-sleutels beheren

API-sleutels
// Nieuwe sleutel aanmaken
sleutel, err := ws.CreateAPIKey("Productie-server")
fmt.Println(sleutel.Token) // ws_live_... (sla op!)

// Alle sleutels
sleutels, err := ws.ListAPIKeys()

// Sleutel verwijderen
err = ws.DeleteAPIKey(sleutel.ID)

Foutafhandeling

WesenderError
result, err := ws.SendEmail(wesender.SendEmailInput{...})
if err != nil {
    var wsErr *wesender.Error
    if errors.As(err, &wsErr) {
        fmt.Printf("Status: %d, Melding: %s
", wsErr.StatusCode, wsErr.Message)
        // bijv. Status: 422, Melding: Domain not verified
    }
    return err
}

Concurrent versturen

Goroutines
var wg sync.WaitGroup
emails := []string{"a@nl.nl", "b@nl.nl", "c@nl.nl"}

for _, to := range emails {
    wg.Add(1)
    go func(addr string) {
        defer wg.Done()
        ws.SendEmail(wesender.SendEmailInput{
            From:    "noreply@joudomein.nl",
            To:      []string{addr},
            Subject: "Hallo!",
            HTML:    "<p>Verstuurd via goroutine.</p>",
        })
    }(to)
}
wg.Wait()

Zonder SDK (net/http)

Directe http
body := strings.NewReader(`{
  "from":    "noreply@joudomein.nl",
  "to":      "klant@voorbeeld.nl",
  "subject": "Hallo!",
  "html":    "<p>Via net/http.</p>"
}`)

req, _ := http.NewRequest("POST", "https://api.wesender.nl/emails", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("WS_API_KEY"))
req.Header.Set("Content-Type", "application/json")
http.DefaultClient.Do(req)