E-mails inplannen met scheduled_at
Met de scheduled_at-parameter plan je een e-mail in voor een later tijdstip. Wesender verstuurt de e-mail automatisch op het opgegeven moment.
Hoe werkt het?
- Voeg
scheduled_attoe aan je API-aanroep met een ISO 8601-tijdstempel in UTC - De e-mail wordt aangemaakt maar pas verstuurd op het opgegeven tijdstip
- Je kunt ingeplande e-mails bekijken en annuleren via Dashboard → E-mails → Filter: Gepland
Beperkingen
- Maximale planningshorizon: 30 dagen in de toekomst
- Minder dan 60 seconden in de toekomst: de e-mail wordt direct verstuurd
Basis: e-mail inplannen
await fetch("https://api.wesender.nl/emails", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.WESENDER_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
from: "noreply@mijndomein.nl",
to: ["klant@voorbeeld.nl"],
subject: "Je proefperiode verloopt morgen",
html: "<p>Upgrade nu om toegang te behouden.</p>",
scheduled_at: "2026-06-15T09:00:00Z", // altijd UTC
}),
})
Tijdzones en UTC
Geef de tijd altijd op in UTC. Nederlandse tijdzones:
- Zomertijd (CEST = UTC+2): 09:00 CEST →
2026-06-15T07:00:00Z - Wintertijd (CET = UTC+1): 09:00 CET →
2026-12-15T08:00:00Z
Bereken automatisch vanuit de lokale tijd:
// Morgen om 09:00 Nederlandse tijd (aanname: zomertijd)
const morgen = new Date()
morgen.setDate(morgen.getDate() + 1)
morgen.setHours(7, 0, 0, 0) // 09:00 CEST = 07:00 UTC
const scheduledAt = morgen.toISOString()
Praktisch: 24 uur na aanmelding
const inEenDag = new Date(Date.now() + 24 * 60 * 60 * 1000).toISOString()
await verstuurEmail({
to: gebruiker.email,
subject: "Hoe gaat het met je eerste project?",
html: "<p>Je bent al 24 uur actief. Heb je al een domein ingesteld?</p>",
scheduled_at: inEenDag,
})
Drip-campagne: onboarding e-mailserie
Verstuur een serie onboarding e-mails automatisch na aanmelding:
async function startOnboardingCampagne(email: string) {
const nu = Date.now()
const reeks = [
{
delay: 0,
subject: "Welkom! Zo begin je",
html: "<p>Bedankt voor je aanmelding. Hier zijn je eerste stappen...</p>",
},
{
delay: 1 * 24 * 60 * 60e3, // dag 1
subject: "Tip 1: Stel je domein in",
html: "<p>Een geverifieerd domein vergroot je deliverability aanzienlijk.</p>",
},
{
delay: 3 * 24 * 60 * 60e3, // dag 3
subject: "Tip 2: Verstuur je eerste e-mail",
html: "<p>Klaar om te beginnen? Hier is een quickstart-gids.</p>",
},
{
delay: 7 * 24 * 60 * 60e3, // dag 7
subject: "Je eerste week — hoe bevalt het?",
html: "<p>We horen graag je feedback. Wat kunnen we verbeteren?</p>",
},
]
for (const mail of reeks) {
await verstuurEmail({
to: email,
subject: mail.subject,
html: mail.html,
scheduled_at: new Date(nu + mail.delay).toISOString(),
})
}
}
Tips
- Controleer ingeplande e-mails via Dashboard → E-mails → Gepland
- Je kunt een ingeplande e-mail annuleren via de API:
DELETE /emails/{id} - Combineer met webhooks om vervolgmails in te plannen op basis van gedrag (bijv. niet geopend na dag 3)
Foutoplossing
- E-mail direct verstuurd — het tijdstip lag minder dan 60 seconden in de toekomst
- 422 Unprocessable Entity — controleer of
scheduled_ateen geldige ISO 8601-string in UTC is - E-mail niet verstuurd op tijd — controleer de status in het dashboard; het tijdstip is altijd UTC