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 require wesender/wesender Initialisatie
<?php
require_once 'vendor/autoload.php';
use WesenderWesender;
$ws = new Wesender($_ENV['WS_API_KEY']); 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
$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 = 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
$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
// 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
// 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
use WesenderWesenderException;
try {
$ws->sendEmail(['from' => '...', 'to' => '...', 'subject' => '...', 'html' => '...']);
} catch (WesenderException $e) {
echo $e->getMessage(); // Domain not verified
echo $e->getStatusCode(); // 422
} Laravel-integratie
<?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)
<?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'];