Sweego Payload CMS

Envoyer des emails depuis Payload CMS avec Sweego

Payload CMS s’est imposé comme l’un des CMS headless les plus populaires de l’écosystème TypeScript. Code-first, fortement typé, et conçu pour des architectures modernes — c’est un choix naturel pour les équipes qui veulent garder la main sur leur stack.

Par défaut, Payload envoie ses emails système (réinitialisation de mot de passe, invitations, notifications) via Nodemailer. Si vous voulez remplacer ce comportement par une API d’envoi dédiée, Payload expose un système d’adaptateurs email nativement.

Zapal Tech, une agence de développement web spécialisée TypeScript, a développé et open-sourcé un adaptateur officiel pour Sweego : @zapal/payload-email-sweego.

Un grand merci à eux pour cette intégration 🙂

Pourquoi utiliser Sweego pour l’envoi d’emails dans Payload CMS ?

Quand Payload envoie un email, il passe par la couche d’abstraction définie dans votre config. Par défaut, c’est Nodemailer avec un serveur SMTP. Cette approche fonctionne, mais elle impose de gérer un serveur SMTP, des timeouts de connexion, des files d’attente, et une observabilité limitée.

Passer par l’API REST de Sweego apporte plusieurs avantages concrets pour un projet Payload :

  • Délivrabilité maîtrisée : réputation IP dédiée, authentification DKIM/SPF gérée côté Sweego
  • Logs en temps réel : chaque email envoyé est traçable dans le dashboard Sweego
  • Pas de dépendance SMTP : un simple appel HTTPS, pas de port 587 à débloquer dans votre infra
  • Intégration propre : l’adaptateur s’intègre exactement là où Payload le prévoit, sans patch ni monkey-patching

Installation

L’adaptateur est disponible sur npm. Avec pnpm :

pnpm add @zapal/payload-email-sweego

Avec npm ou yarn :

npm install @zapal/payload-email-sweego
# ou
yarn add @zapal/payload-email-sweego

Configuration

1. Ajouter la clé API en variable d’environnement

# .env
SWEEGO_API_KEY=votre_cle_api_sweego

Vous pouvez créer et gérer vos clés API depuis votre dashboard Sweego.

2. Configurer l’adaptateur dans payload.config.ts

import { buildConfig } from 'payload/config'
import { sweegoAdapter } from '@zapal/payload-email-sweego'

export default buildConfig({
  email: sweegoAdapter({
    defaultFromAddress: 'no-reply@votredomaine.com',
    defaultFromName: 'Votre Application',
    apiKey: process.env.SWEEGO_API_KEY || '',
  }),
  // ... reste de votre config Payload
})

C’est tout. Payload routera désormais tous ses emails système via l’API Sweego.

Comment ça fonctionne

L’adaptateur implémente l’interface EmailAdapter de Payload CMS. À chaque envoi d’email déclenché par Payload (mot de passe oublié, invitation d’utilisateur, etc.), l’adaptateur traduit la requête en appel vers le endpoint /send de l’API Sweego avec les paramètres appropriés :

  • channel: "email"
  • provider: "sweego"
  • les champs from, to, subject, et le corps du message

L’authentification se fait via le header Api-Key à chaque requête.

Domaine expéditeur

Le domaine utilisé dans defaultFromAddress doit être vérifié dans votre compte Sweego. Un email envoyé depuis un domaine non vérifié sera rejeté par l’API.

Points de vigilance

Format de l’adresse expéditeur — Payload passe parfois l’adresse from sous la forme "Nom" <email@domain.com>. L’adaptateur gère ce cas, mais assurez-vous que le domaine dans l’adresse email correspond bien à un domaine vérifié dans Sweego.

Ressources