SMTP instellen met Nodemailer
Verstuur e-mails vanuit Node.js of TypeScript via Wesender SMTP — zonder REST API, met de populaire Nodemailer-bibliotheek.
Vereisten
- Een Wesender-account met een geverifieerd domein
- Je SMTP-gegevens uit het dashboard (Instellingen → SMTP)
- Node.js 18 of hoger
- Nodemailer geïnstalleerd
SMTP-verbindingsgegevens
| Instelling | Waarde |
|---|---|
| Host | smtp.wesender.nl |
| Poort | 587 |
| Beveiliging | STARTTLS |
| Gebruikersnaam | je API-key |
| Wachtwoord | je API-key |
Tip: Je API-key vind je in het dashboard onder Instellingen → API-sleutels. Gebruik je API-key als zowel gebruikersnaam als wachtwoord.
Stap 1: Installeren
npm install nodemailer
# TypeScript-types
npm install --save-dev @types/nodemailer
Of met Bun:
bun add nodemailer
Stap 2: Transporter aanmaken
Maak een herbruikbaar transporter-object aan als module-level singleton:
import nodemailer from "nodemailer"
export const transporter = nodemailer.createTransport({
host: "smtp.wesender.nl",
port: 587,
secure: false, // false = STARTTLS op poort 587
auth: {
user: process.env.WESENDER_API_KEY,
pass: process.env.WESENDER_API_KEY,
},
})
Stap 3: Eerste e-mail versturen
const info = await transporter.sendMail({
from: '"Mijn App" <noreply@mijndomein.nl>',
to: "klant@voorbeeld.nl",
subject: "Welkom bij ons platform",
html: "<h1>Welkom!</h1><p>Bedankt voor je aanmelding.</p>",
text: "Welkom! Bedankt voor je aanmelding.",
})
console.log("Verstuurd:", info.messageId)
Omgevingsvariabelen
Zet je API-key in een .env-bestand:
WESENDER_API_KEY=ws_live_xxxxxxxxxxxxxxxx
Beveiligingsregels:
- Gebruik nooit een hard-coded API-key in je broncode
- Voeg
.envtoe aan.gitignore - Gebruik geen
NEXT_PUBLIC_-prefix — de key mag nooit in de browser terechtkomen
Gebruik in Next.js Server Actions
// app/actions/send-welcome.ts
"use server"
import { transporter } from "@/lib/email"
export async function sendWelcomeEmail(to: string, name: string) {
await transporter.sendMail({
from: "noreply@mijndomein.nl",
to,
subject: `Welkom, ${name}!`,
html: `<p>Hoi ${name}, welkom aan boord!</p>`,
})
}
Verbinding testen
Voer dit uit om te controleren of de SMTP-configuratie correct is:
try {
await transporter.verify()
console.log("SMTP-verbinding werkt!")
} catch (err) {
console.error("SMTP-fout:", err)
}
Foutoplossing
- ECONNREFUSED of timeout — poort 587 is geblokkeerd door je firewall of VPS-provider; neem contact op met je hostingpartij
- Authenticatiefout (535) — gebruikersnaam én wachtwoord zijn beide je API-key, niet je e-mailadres of dashboard-wachtwoord
- 'From'-domein geweigerd — het verzenddomein in het
from-adres moet geverifieerd zijn in je Wesender-dashboard - ETIMEDOUT — controleer je internetverbinding en of
smtp.wesender.nlbereikbaar is