Comment envoyer des e-mails sur Vercel

Sur Vercel, envoyez des e-mails via une HTTP API d'e-mail en Node.js ou Edge, ou attendez SMTP dans les fonctions Node.js.

Une HTTP API d'e-mail fonctionne dans les runtimes Node.js et Edge de Vercel et constitue le chemin recommandé par Vercel. SMTP peut fonctionner en Node.js si vous attendez l'envoi dans les limites d'exécution de la fonction. Il ne peut pas s'exécuter en Edge, qui ne dispose pas des modules TCP de Node.

Qu'exige SMTP sur Vercel ?

Dans une fonction Node.js, attendez l'envoi SMTP avant de renvoyer votre réponse afin que l'échange se termine avant l'arrêt de la fonction. L'envoi doit se terminer dans la limite de durée de la fonction. Vercel autorise les connexions SMTP sortantes sur les ports 465 et 587 ; le port 25 est bloqué. Edge ne dispose pas du module net de Node.js, les bibliothèques SMTP ne peuvent donc pas ouvrir de connexion TCP.

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)DisponibleNon disponibles
Démarrage à froidPlus lentPlus rapide
Bibliothèques SMTPAttendre dans la limite de duréeNe 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 ?

Oui, dans les fonctions Node.js : attendez l'envoi avant de renvoyer la réponse, et terminez dans la limite de durée de la fonction. Nodemailer ne peut pas s'exécuter en Edge car le runtime ne dispose pas du module net de Node.

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.