E-mail versturen met JavaScript

JavaScript verstuurt e-mail vanuit een server-side runtime met een SMTP-client zoals Nodemailer of met een HTTPS-verzoek naar een e-mail-API.

Browsers blokkeren ruwe TCP-verbindingen met mailservers. Als je een API-sleutel of SMTP-wachtwoord in frontendcode zet, liggen je inloggegevens bovendien open voor iedereen die de ontwikkelaarstools opent.

Waarom kan de browser geen e-mail versturen?

Browsers stellen geen ruwe TCP-sockets beschikbaar aan JavaScript, dus client-side code kan niet de SMTP-verbinding openen die een mailserver vereist. Als je een HTTP e-mail-API rechtstreeks vanuit de browser aanroept, komt je API-sleutel bovendien in de paginabron en het netwerktabblad te staan. De browser verzamelt de formulierinvoer en stuurt die naar je backend; de backend verstuurt de e-mail.

Hoe verstuur je vanuit een Node-backend met SMTP?

Nodemailer is de standaardlibrary voor SMTP in Node. Je configureert een transport eenmalig en roept daarna sendMail aan:

import nodemailer from "nodemailer";

const transporter = nodemailer.createTransport({
  host: "smtp.example.com",
  port: 587,
  secure: false,
  auth: {
    user: process.env.SMTP_USER,
    pass: process.env.SMTP_PASS,
  },
});

await transporter.sendMail({
  from: "you@yourdomain.com",
  to: "recipient@example.org",
  subject: "Your receipt",
  text: "Thanks for your order.",
  html: "<p>Thanks for your order.</p>",
});

Dit werkt goed op een langlopende server. Nodemailer ondersteunt ook bijlagen en lokaal testen van SMTP.

Hoe verstuur je met een HTTP e-mail-API?

Je backend kan ook e-mail versturen door JSON met fetch naar een HTTP e-mail-API te posten. Omdat dit standaard HTTPS gebruikt in plaats van ruwe TCP-sockets, werkt het zowel op langlopende servers als in serverless runtimes:

const res = await fetch("https://us1.platform.bird.com/v1/email/messages", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.BIRD_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    from: "onboarding@messagebird.dev",
    to: ["delivered@messagebird.dev"],
    subject: "Hello from JavaScript",
    html: "<p>It works.</p>",
  }),
});

if (!res.ok) {
  throw new Error(`Send failed: ${res.status}`);
}

Kies de host die bij de regio van je werkruimte past (us1.platform.bird.com voor bk_us1_-sleutels, eu1.platform.bird.com voor bk_eu1_-sleutels). Bewaar de API-sleutel in een server-side omgevingsvariabele, zodat hij nooit naar de client gaat.

Verstuur het met Bird

Om vanuit Node.js of TypeScript te versturen met getypeerde antwoorden en automatisch opnieuw proberen, geef je BIRD_API_KEY door aan de Bird TypeScript-SDK:

import { BirdClient } from "@messagebird/sdk";

const bird = new BirdClient({ apiKey: process.env.BIRD_API_KEY! });

const { data, error } = await bird.email
  .send({
    from: "onboarding@messagebird.dev",
    to: ["delivered@messagebird.dev"],
    subject: "Hello from Node",
    html: "<p>It works.</p>",
  })
  .safe();

Met de onboarding@messagebird.dev-afzender en de delivered@messagebird.dev sandboxontvanger controleer je je setup voordat je een eigen domein configureert. Als je e-mailinhoud als React-componenten bouwt, rendert React Email het component naar de HTML-string die je in html doorgeeft.

Bouw op hetzelfde netwerk.

Een test-API-key is direct beschikbaar. Productietoegang wordt ontgrendeld zodra u een betaalmethode toevoegt en een afzender verifieert.

Start building with Bird in minutes.