SDK's

Python

Gebruik de officiële wesender Python-package voor directe integratie zonder externe dependencies — de SDK gebruikt alleen de standaardbibliotheek. Werkt met Python 3.8+.

github.com/nljerry/wesender-python

Installatie

pip
pip install wesender

Initialisatie

client.py
import os
from wesender import Wesender

ws = Wesender(api_key=os.environ["WS_API_KEY"])

E-mail versturen

E-mail versturen
result = ws.send_email(
    from_="noreply@joudomein.nl",
    to="klant@voorbeeld.nl",
    subject="Welkom!",
    html="<p>Bedankt voor je registratie.</p>",
)
print(result["id"], result["status"])  # em_01hw... queued

Meerdere ontvangers

Lijst van ontvangers
ws.send_email(
    from_="nieuwsbrief@joudomein.nl",
    to=["a@voorbeeld.nl", "b@voorbeeld.nl"],
    cc=["manager@bedrijf.nl"],
    subject="Maandelijks rapport",
    html="<p>Zie bijgevoegde informatie.</p>",
)

Bijlagen

PDF meesturen
import base64

with open("factuur.pdf", "rb") as f:
    pdf_b64 = base64.b64encode(f.read()).decode()

ws.send_email(
    from_="facturen@joudomein.nl",
    to="klant@voorbeeld.nl",
    subject="Factuur 2026-0142",
    html="<p>Bijgevoegd vind je jouw factuur.</p>",
    attachments=[{
        "filename":     "factuur-2026-0142.pdf",
        "content":      pdf_b64,
        "content_type": "application/pdf",
    }],
)

Batch versturen

Batch
results = ws.send_batch([
    {"from_": "nl@bedrijf.nl", "to": "a@voorbeeld.nl", "subject": "Hoi A", "html": "<p>A</p>"},
    {"from_": "nl@bedrijf.nl", "to": "b@voorbeeld.nl", "subject": "Hoi B", "html": "<p>B</p>"},
])
for r in results:
    print(r["id"], r["status"])

Domeinen beheren

Domeinen
# Alle domeinen
domeinen = ws.list_domains()

# Domein toevoegen
domein = ws.create_domain("joudomein.nl")
print(domein["dns_records"])  # SPF, DKIM, DMARC

# DNS verifiëren
resultaat = ws.verify_domain(domein["id"])
print(resultaat["spf_ok"], resultaat["dkim_ok"])

API-sleutels beheren

API-sleutels
# Nieuwe sleutel aanmaken
sleutel = ws.create_api_key("Productie-server")
print(sleutel["token"])  # ws_live_... (sla op!)

# Alle sleutels
sleutels = ws.list_api_keys()

# Sleutel verwijderen
ws.delete_api_key(sleutel["id"])

Foutafhandeling

WesenderError
from wesender import Wesender, WesenderError

try:
    ws.send_email(from_="...", to="...", subject="...", html="...")
except WesenderError as e:
    print(e.message, e.status_code)
    # bijv. "Domain not verified", 422

Django-integratie

utils/email.py
from wesender import Wesender
from django.conf import settings

_ws = Wesender(api_key=settings.WESENDER_API_KEY)

def stuur_welkomstmail(naam: str, email: str) -> dict:
    return _ws.send_email(
        from_=settings.DEFAULT_FROM_EMAIL,
        to=email,
        subject=f"Welkom, {naam}!",
        html=f"<h1>Hoi {naam}!</h1><p>Bedankt voor je aanmelding.</p>",
    )

FastAPI-integratie

routers/email.py
from fastapi import APIRouter, BackgroundTasks
from wesender import Wesender
import os

router = APIRouter()
ws = Wesender(os.environ["WS_API_KEY"])

@router.post("/registreer")
async def registreer(naam: str, email: str, bg: BackgroundTasks):
    bg.add_task(ws.send_email,
        from_="noreply@joudomein.nl",
        to=email,
        subject=f"Welkom, {naam}!",
        html=f"<p>Hoi {naam}!</p>",
    )
    return {"ok": True}

Zonder SDK (requests)

Directe requests
import os, requests

requests.post(
    "https://api.wesender.nl/emails",
    headers={"Authorization": f"Bearer {os.environ['WS_API_KEY']}"},
    json={
        "from":    "noreply@joudomein.nl",
        "to":      "klant@voorbeeld.nl",
        "subject": "Hallo!",
        "html":    "<p>Via requests.</p>",
    },
).raise_for_status()