SDK's

.NET / C#

De officiële Wesender NuGet-package biedt een async client voor de Wesender API. Werkt met .NET 6+, ASP.NET Core en dependency injection.

github.com/wesender/wesender-dotnet

Installatie

.NET CLI
dotnet add package Wesender

Initialisatie

Program.cs
using Wesender;

var ws = new WesenderClient(Environment.GetEnvironmentVariable("WS_API_KEY")!);

E-mail versturen

E-mail versturen
var result = await ws.SendEmailAsync(new SendEmailOptions
{
    From    = "noreply@joudomein.nl",
    To      = "klant@voorbeeld.nl",
    Subject = "Welkom!",
    Html    = "<p>Bedankt voor je registratie.</p>",
});

Console.WriteLine($"{result.Id} {result.Status}"); // em_01hw... queued

Meerdere ontvangers

Array van ontvangers
await ws.SendEmailAsync(new SendEmailOptions
{
    From    = "nieuwsbrief@joudomein.nl",
    To      = "a@voorbeeld.nl,b@voorbeeld.nl",
    Subject = "Maandelijks rapport",
    Html    = "<p>Zie bijgevoegde informatie.</p>",
});

Bijlagen

PDF meesturen
var pdf = Convert.ToBase64String(await File.ReadAllBytesAsync("factuur.pdf"));

await ws.SendEmailAsync(new SendEmailOptions
{
    From    = "facturen@joudomein.nl",
    To      = "klant@voorbeeld.nl",
    Subject = "Factuur 2026-0142",
    Html    = "<p>Bijgevoegd vind je jouw factuur.</p>",
    Attachments =
    [
        new Attachment
        {
            Filename    = "factuur-2026-0142.pdf",
            Content     = pdf,
            ContentType = "application/pdf",
        }
    ],
});

Domeinen beheren

Domeinen
// Alle domeinen
var domeinen = await ws.ListDomainsAsync();

// Domein toevoegen
var domein = await ws.CreateDomainAsync("joudomein.nl");
Console.WriteLine(domein.DnsRecords); // SPF, DKIM, DMARC

// DNS verifiëren
var resultaat = await ws.VerifyDomainAsync(domein.Id);
Console.WriteLine($"{resultaat.SpfOk} {resultaat.DkimOk}");

API-sleutels beheren

API-sleutels
// Nieuwe sleutel aanmaken
var sleutel = await ws.CreateApiKeyAsync("Productie-server");
Console.WriteLine(sleutel.Token); // ws_live_... (sla op!)

// Alle sleutels
var sleutels = await ws.ListApiKeysAsync();

// Sleutel verwijderen
await ws.DeleteApiKeyAsync(sleutel.Id);

Foutafhandeling

WesenderException
using Wesender;

try
{
    await ws.SendEmailAsync(new SendEmailOptions
    {
        From = "...", To = "...", Subject = "...", Html = "...",
    });
}
catch (WesenderException ex)
{
    Console.WriteLine(ex.Message);    // Domain not verified
    Console.WriteLine(ex.StatusCode); // 422
}

ASP.NET Core (dependency injection)

Program.cs
using Wesender;

// Registreer als singleton via DI
builder.Services.AddSingleton(
    new WesenderClient(builder.Configuration["WS_API_KEY"]!)
);
EmailService.cs
using Wesender;

public class EmailService(WesenderClient ws)
{
    public async Task StuurWelkomstmail(string naam, string email)
    {
        await ws.SendEmailAsync(new SendEmailOptions
        {
            From    = "noreply@joudomein.nl",
            To      = email,
            Subject = $"Welkom, {naam}!",
            Html    = $"<h1>Hoi {naam}!</h1><p>Bedankt voor je aanmelding.</p>",
        });
    }
}

Zonder SDK (HttpClient)

Directe HttpClient
using System.Net.Http.Json;

using var client = new HttpClient();
client.DefaultRequestHeaders.Add(
    "Authorization", $"Bearer {Environment.GetEnvironmentVariable("WS_API_KEY")}");

var response = await client.PostAsJsonAsync("https://api.wesender.nl/emails", new
{
    from    = "noreply@joudomein.nl",
    to      = "klant@voorbeeld.nl",
    subject = "Hallo!",
    html    = "<p>Via HttpClient.</p>",
});

response.EnsureSuccessStatusCode();