Email

Comment envoyer des e-mails sur Vercel

Sur Vercel, vous envoyez des e-mails via un appel HTTP API, pas via SMTP. Vercel exécute votre code dans des fonctions serverless et edge, et ces environnements d'exécution sont conçus pour le traitement de requêtes HTTP de courte durée, pas pour des sockets TCP maintenus ouverts. Le runtime Edge en particulier ne dispose pas du module Node net, ce qui empêche une bibliothèque SMTP d'ouvrir une connexion. Une requête HTTPS vers une API e-mail s'intègre parfaitement dans ce modèle. Voici la configuration Next.js.

Pourquoi SMTP ne fonctionne-t-il pas bien sur Vercel ?

Les fonctions serverless sont conçues pour démarrer rapidement, traiter une requête et s'arrêter. Maintenir ouverte une connexion SMTP (avec son handshake en plusieurs étapes) va à l'encontre de ce principe, et la fonction peut être gelée ou arrêtée en pleine conversation. Le runtime Edge est encore plus strict : il exécute un environnement web standard sans les modules réseau de Node, donc les bibliothèques comme Nodemailer qui dépendent de net et tls ne fonctionneront pas du tout. Envoyer via HTTPS contourne les deux problèmes, car fetch est exactement ce que ces environnements d'exécution sont conçus pour faire.

Comment envoyer un e-mail depuis un Route Handler Next.js ?

Créez un Route Handler à app/api/send/route.ts. Il lit la clé API depuis une variable d'environnement et appelle la API e-mail. Avec le Bird Node SDK :

// app/api/send/route.ts
import { BirdClient } from "@messagebird/sdk";

export const runtime = "nodejs";

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

export async function POST(request: Request) {
  const { to } = await request.json();

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

  if (error) {
    return Response.json({ error: error.message }, { status: 502 });
  }

  return Response.json({ id: data.id });
}

Définissez BIRD_API_KEY dans les variables d'environnement du projet Vercel pour qu'elle soit disponible à l'exécution et jamais committée. L'adresse sandbox delivered@bird.dev accepte toujours le courrier, ce qui rend le premier déploiement facile à vérifier.

Runtime Edge ou runtime Node ?

La ligne export const runtime détermine lequel exécute votre handler. Comme SDK et fetch fonctionnent tous les deux dans l'un ou l'autre, vous pouvez choisir en fonction de vos autres besoins :

Runtime NodeRuntime Edge
Par défautOuiOpt-in
API Node (net, fs)DisponiblesNon disponibles
Démarrage à froidPlus lentPlus rapide
Bibliothèques SMTPFonctionnent, mais peu fiables en serverlessNe fonctionnent pas
HTTP e-mail API (fetch)FonctionneFonctionne

Si vous ne faites qu'appeler une API HTTP, le runtime Edge vous offre des démarrages à froid plus rapides. Si vous dépendez d'un package exclusif à Node ailleurs dans le handler, restez sur Node. Dans les deux cas, l'envoi d'e-mail est le même appel basé sur fetch.

Envoyer avec Bird

Le handler ci-dessus utilise déjà l'extrait de code canonique. La structure est la même partout où vous exécutez du JavaScript :

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

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

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

Si vous construisez vos corps d'e-mail sous forme de composants, React Email les convertit en HTML attendu par cet appel. Pour une vue d'ensemble de l'organisation du code e-mail, consultez envoyer des e-mails avec JavaScript.

FAQ

Puis-je utiliser Nodemailer sur Vercel ?

Sur le runtime Node, il se charge, mais maintenir ouverte une connexion SMTP est peu fiable sur des fonctions serverless de courte durée. Sur le runtime Edge, il ne peut pas fonctionner, car le module Node net n'existe pas. Un appel HTTP API évite les deux problèmes.

Où stocker ma clé API sur Vercel ?

Dans les variables d'environnement du projet, définies dans le tableau de bord Vercel ou via CLI. Le handler la lit avec process.env, ce qui la garde sur le serveur et hors de votre dépôt.

Runtime Edge ou Node pour envoyer des e-mails ?

Les deux fonctionnent pour un appel HTTP API. Edge offre des démarrages à froid plus rapides ; Node est nécessaire si votre handler utilise aussi des packages exclusifs à Node.

Vercel et une API e-mail HTTP forment un duo naturel. La présentation du produit e-mail et le guide d'envoi d'e-mails couvrent le reste du sujet.

Le trafic en pointe et la récupération de l'arriéré déterminent la capacité d'envoi dont votre application a besoin auprès d'un service d'e-mail transactionnel.

Développez sur le même réseau.

Une clé API de test est disponible immédiatement. La production est activée dès que vous ajoutez un moyen de paiement et vérifiez un expéditeur.

Votre prochaine idée.
Prête à se connecter.