SDK's

Elixir

De officiële wesender Hex-package biedt een complete client voor de Wesender API. Vereist Elixir 1.14+ en Erlang/OTP 25+.

github.com/wesender/wesender-elixir

Installatie

Voeg toe aan mix.exs:

mix.exs
defp deps do
  [
    {:wesender, "~> 1.0"}
  ]
end

Initialisatie

client.exs
ws = Wesender.new(System.fetch_env!("WS_API_KEY"))

E-mail versturen

E-mail versturen
{:ok, result} = Wesender.send_email(ws, %{
  from:    "noreply@joudomein.nl",
  to:      "klant@voorbeeld.nl",
  subject: "Welkom!",
  html:    "<p>Bedankt voor je registratie.</p>"
})

IO.puts result["id"]     # em_01hw...
IO.puts result["status"] # queued

Meerdere ontvangers

Lijst van ontvangers
Wesender.send_email(ws, %{
  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
pdf = File.read!("factuur.pdf") |> Base64.encode()

Wesender.send_email(ws, %{
  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,
    content_type: "application/pdf"
  }]
})

Batch versturen

Batch
{:ok, results} = Wesender.send_batch(ws, [
  %{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>"},
])

Enum.each(results, fn r -> IO.puts("#{r["id"]} #{r["status"]}") end)

Domeinen beheren

Domeinen
# Alle domeinen
{:ok, domeinen} = Wesender.list_domains(ws)

# Domein toevoegen
{:ok, domein} = Wesender.create_domain(ws, "joudomein.nl")
IO.inspect domein["dns_records"] # SPF, DKIM, DMARC

# DNS verifiëren
{:ok, resultaat} = Wesender.verify_domain(ws, domein["id"])
IO.puts "#{resultaat["spf_ok"]} #{resultaat["dkim_ok"]}"

API-sleutels beheren

API-sleutels
# Nieuwe sleutel aanmaken
{:ok, sleutel} = Wesender.create_api_key(ws, "Productie-server")
IO.puts sleutel["token"] # ws_live_... (sla op!)

# Alle sleutels
{:ok, sleutels} = Wesender.list_api_keys(ws)

# Sleutel verwijderen
{:ok, _} = Wesender.delete_api_key(ws, sleutel["id"])

Foutafhandeling

Patroonmatching
case Wesender.send_email(ws, %{from: "...", to: "...", subject: "...", html: "..."}) do
  {:ok, result}    -> IO.puts "Verstuurd: #{result["id"]}"
  {:error, reason} -> IO.puts "Fout: #{inspect(reason)}"
  # bijv. Fout: %{status: 422, message: "Domain not verified"}
end

Phoenix integratie

lib/mijn_app/mailer.ex
defmodule MijnApp.Mailer do
  @ws Wesender.new(System.fetch_env!("WS_API_KEY"))

  def stuur_welkomstmail(naam, email) do
    Wesender.send_email(@ws, %{
      from:    "noreply@joudomein.nl",
      to:      email,
      subject: "Welkom, #{naam}!",
      html:    "<h1>Hoi #{naam}!</h1><p>Bedankt voor je aanmelding.</p>"
    })
  end
end

Zonder SDK (Req)

Directe Req
# mix.exs: {:req, "~> 0.5"}
Req.post!("https://api.wesender.nl/emails",
  auth: {:bearer, System.fetch_env!("WS_API_KEY")},
  json: %{
    from:    "noreply@joudomein.nl",
    to:      "klant@voorbeeld.nl",
    subject: "Hallo!",
    html:    "<p>Via Req.</p>"
  }
)