SDK's

PHP

De officiële wesender/wesender Composer-package heeft geen externe dependencies en werkt met PHP 8.0+. Intern gebruikt de SDK alleen ext-curl en ext-json.

github.com/nljerry/wesender-php

Installatie

Composer
composer require wesender/wesender

Initialisatie

client.php
<?php
require_once 'vendor/autoload.php';

use WesenderWesender;

$ws = new Wesender($_ENV['WS_API_KEY']);

E-mail versturen

E-mail versturen
$result = $ws->sendEmail([
    'from'    => 'noreply@joudomein.nl',
    'to'      => 'klant@voorbeeld.nl',
    'subject' => 'Welkom!',
    'html'    => '<p>Bedankt voor je registratie.</p>',
]);

echo $result['id'];    // em_01hw...
echo $result['status']; // queued

Meerdere ontvangers

Array van ontvangers
$ws->sendEmail([
    '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 = base64_encode(file_get_contents('factuur.pdf'));

$ws->sendEmail([
    '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
$results = $ws->sendBatch([
    ['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>'],
]);

foreach ($results as $r) {
    echo $r['id'] . ' ' . $r['status'] . PHP_EOL;
}

Domeinen beheren

Domeinen
// Alle domeinen
$domeinen = $ws->listDomains();

// Domein toevoegen
$domein = $ws->createDomain('joudomein.nl');
print_r($domein['dns_records']); // SPF, DKIM, DMARC

// DNS verifiëren
$resultaat = $ws->verifyDomain($domein['id']);
var_dump($resultaat['spf_ok'], $resultaat['dkim_ok']);

API-sleutels beheren

API-sleutels
// Nieuwe sleutel aanmaken
$sleutel = $ws->createApiKey('Productie-server');
echo $sleutel['token']; // ws_live_... (sla op!)

// Alle sleutels
$sleutels = $ws->listApiKeys();

// Sleutel verwijderen
$ws->deleteApiKey($sleutel['id']);

Foutafhandeling

WesenderException
use WesenderWesenderException;

try {
    $ws->sendEmail(['from' => '...', 'to' => '...', 'subject' => '...', 'html' => '...']);
} catch (WesenderException $e) {
    echo $e->getMessage();   // Domain not verified
    echo $e->getStatusCode(); // 422
}

Laravel-integratie

app/Mail/WelkomstMail.php
<?php
namespace AppMail;

use IlluminateMailMailable;
use WesenderWesender;

class WesenderService
{
    private Wesender $ws;

    public function __construct()
    {
        $this->ws = new Wesender(config('services.wesender.key'));
    }

    public function stuurWelkomstmail(string $naam, string $email): array
    {
        return $this->ws->sendEmail([
            'from'    => config('mail.from.address'),
            'to'      => $email,
            'subject' => "Welkom, {$naam}!",
            'html'    => "<h1>Hoi {$naam}!</h1><p>Bedankt voor je aanmelding.</p>",
        ]);
    }
}

Zonder SDK (curl)

Directe curl
<?php
$payload = json_encode([
    'from'    => 'noreply@joudomein.nl',
    'to'      => 'klant@voorbeeld.nl',
    'subject' => 'Hallo!',
    'html'    => '<p>Via curl.</p>',
]);

$ch = curl_init('https://api.wesender.nl/emails');
curl_setopt_array($ch, [
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => $payload,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $_ENV['WS_API_KEY'],
        'Content-Type: application/json',
    ],
]);
$response = json_decode(curl_exec($ch), true);
echo $response['id'];