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 .env toe 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.nl bereikbaar is