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 github.com/nljerry/wesender-go Initialisatie
import (
wesender "github.com/nljerry/wesender-go"
"os"
)
ws := wesender.New(os.Getenv("WS_API_KEY")) 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
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
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
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
// 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
// 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
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
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)
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)