─── documentation v1.0

Documentation Mail-Reacher

Tout ce dont tu as besoin pour intégrer Mail-Reacher : l'API REST d'envoi, les templates MJML, le tracking maison des opens et clics, l'intégration Laravel et le Mail-Check de délivrabilité. La documentation évolue au fil des nouvelles features.

Démarrage rapide

En 5 minutes, tu peux envoyer ton premier email transactionnel via Mail-Reacher. Le parcours est volontairement court parce que la valeur est dans le routing multi-provider, pas dans la configuration.

  1. Crée un compte gratuit puis un projet depuis le dashboard.
  2. Branche un provider (AWS SES, Postmark, Mailgun, SendGrid ou un SMTP custom).
  3. Crée un environnement test et un environnement production.
  4. Génère une clé API pour l'environnement test (préfixe mr_test_).
  5. Crée un premier template MJML depuis l'éditeur visuel.
  6. Appelle POST /v1/emails/send avec ta clé.

En environnement test, l'email est simulé et visible dans une inbox interne. En production, il part via ton provider configuré. Le code est strictement identique — seule la clé change.

Concepts

Mail-Reacher s'organise autour de quatre objets que tu retrouves partout dans le dashboard et dans l'API.

Projet

Un projet regroupe ton domaine d'envoi, tes providers, tes templates, tes contacts et tes membres. Tu peux avoir plusieurs projets sur un même compte (idéal pour multi-clients ou multi-apps).

Environnement

Un environnement (test, staging, production) lie un provider à des règles : rate limit, tracking, domaine d'envoi, variables par défaut.

Provider (sender)

Un provider est la connexion vers un service d'envoi (SES, Postmark, etc.). Tu peux avoir plusieurs providers par projet et basculer entre eux sans toucher au code.

Clé API

Une clé est rattachée à un environnement et porte des scopes (emails:send, templates:read…). Le préfixe (mr_test_ ou mr_live_) indique l'environnement.

Authentification

L'API utilise le schéma Bearer token. Passe ta clé dans le header Authorization de chaque requête.

Authorization: Bearer mr_live_xxxxxxxxxxxxxxxx

Préfixes de clés

  • mr_test_… — environnement de test, l'envoi est simulé.
  • mr_live_… — environnement de production, envoi réel.

Scopes

Chaque clé porte des scopes qui limitent les actions autorisées :

scope description
emails:send envoyer un email via l'API
templates:read lire les templates
templates:write créer/modifier les templates
contacts:read lire la base contacts
contacts:write créer/modifier les contacts

Envoyer un email

L'endpoint POST /v1/emails/send accepte un payload JSON et retourne un message_id que tu peux corréler avec les webhooks.

curl https://api.mail-reacher.com/v1/emails/send \
  -H "Authorization: Bearer mr_live_xxxxxxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "to": "user@exemple.com",
    "from": "noreply@ton-domaine.com",
    "subject": "Bienvenue sur l'\''app",
    "template_id": 42,
    "variables": { "prenom": "Marie" }
  }'

Paramètres

champ type requis description
tostring|string[]ouidestinataire(s) — email simple ou tableau
fromstringoui*expéditeur — défaut depuis le sender configuré
subjectstringoui*sujet — défaut depuis le template si template_id
template_idintegernonID du template à utiliser
htmlstringnonHTML inline si pas de template
variablesobjectnonvariables injectées dans le template
reply_tostringnonadresse de réponse
metadataobjectnondonnées arbitraires renvoyées dans les webhooks
tagsstring[]nontags utilisés par le système de désabonnement

Réponse

{
  "message_id": "msg_01HX9Z7K3RVZ8N4P5Q6T2W8X9Y",
  "status": "queued",
  "environment": "production",
  "provider": "aws-ses"
}

Templates MJML

Les templates Mail-Reacher utilisent MJML — un langage qui compile vers du HTML responsive compatible avec les 30+ clients email majeurs (Outlook, Gmail, Apple Mail, Yahoo, Thunderbird…).

Variables dynamiques

Tu peux injecter des variables avec la syntaxe Handlebars classique. Les variables non définies au moment de l'envoi déclenchent une erreur de validation côté API.

<mj-text>
  Bonjour {{ prenom }},
  ton compte est prêt à <a href="{{ lien_activation }}">activer</a>.
</mj-text>

État actif

Un template peut être marqué actif ou inactif. Seuls les templates actifs peuvent être utilisés à l'envoi. L'historique de versions et le rollback sont sur la roadmap publique.

Tracking & événements

Alpha : le système de tracking est implémenté mais en cours de validation. Les comportements et le format de payload peuvent encore évoluer.

Mail-Reacher utilise son propre tracker : un pixel d'ouverture et la réécriture des liens cliquables sont injectés dans les emails au moment de l'envoi. Les événements résultants sont accessibles depuis l'API et le dashboard, indépendamment du provider derrière l'envoi.

Événements

  • queued — l'envoi est accepté par Mail-Reacher
  • sent — l'email a été remis au provider
  • opened — pixel d'ouverture chargé par le destinataire
  • clicked — un lien tracké a été cliqué
  • failed — erreur côté provider à l'envoi

Payload (forward webhook)

Quand un webhook de forward est configuré sur ton projet, chaque événement est envoyé en POST sur l'URL fournie avec le payload suivant :

{
  "event": "opened",
  "message_id": "msg_01HX9Z...",
  "provider": "aws-ses",
  "to": "user@exemple.com",
  "from": "noreply@ton-domaine.com",
  "occurred_at": "2026-05-02T10:14:32Z",
  "metadata": {
    "campaign": "onboarding",
    "user_id": 1234
  }
}

Signature

Chaque requête de forward contient un header X-MailReacher-Signature avec un HMAC-SHA256 du body, signé avec le secret de ton projet. Vérifie-le systématiquement côté app pour rejeter les requêtes non authentiques.

Mail-Check

Le Mail-Check audite la délivrabilité de tes envois en lançant 10 vérifications consolidées en un score normalisé sur 10. Tu peux le déclencher manuellement, programmer des runs récurrents, ou l'automatiser à chaque modification de provider.

  • SPF — présence et validité du record TXT
  • DKIM — vérification de la signature DomainKeys
  • DMARC — policy et alignement
  • Reverse DNS — l'IP source pointe vers le bon nom
  • Blacklists — scan de 20+ listes (Spamhaus, SORBS, Barracuda, UCEProtect…)
  • Headers — From, Reply-To, List-Unsubscribe, Date, Message-ID
  • Contenu — détection de patterns spam classiques
  • TLS — version, chiffrement, validité du certificat
  • MX — record et résolution
  • IPs — IP source, réputation, géolocalisation

Providers supportés

AWS SES

Recommandé pour les gros volumes. Tarifs imbattables, infrastructure Amazon, pool d'IPs partagé ou dédié.

Postmark

Excellente délivrabilité transactionnelle, séparation stricte broadcast/transactionnel, dashboard de qualité.

Mailgun

API mature, validation d'emails intégrée, bonne couverture EU/US.

SendGrid

Très utilisé en SaaS, marketing + transactionnel, stats riches.

SMTP custom

N'importe quel SMTP — ton infra, un provider non-listé, ou un service local.

SDK Laravel

Le SDK Laravel encapsule l'API REST avec une façade MailReacher, l'intégration native avec la queue, et la configuration via .env.

composer require mail-reacher/laravel

Configuration

MAIL_REACHER_KEY=mr_live_xxxxxxxxxxxxxxxx
MAIL_REACHER_QUEUE=emails

Utilisation

use MailReacher\\Facades\\MailReacher;

MailReacher::send([
    'to' => $user->email,
    'template_id' => config('templates.welcome'),
    'variables' => ['prenom' => $user->name],
])->onQueue('emails');

Codes d'erreur

L'API utilise les codes HTTP standards. Le body contient toujours un objet d'erreur avec un code machine-friendly et un message humain.

code signification
400Validation — un champ requis manque ou est mal formé
401Clé API absente, expirée, ou invalide
403La clé n'a pas le scope requis
404Ressource introuvable (template, contact…)
422Conflit logique (ex : template inactif)
429Rate limit dépassé
500Erreur côté Mail-Reacher — réessayer
502Erreur côté provider — Mail-Reacher retry automatiquement

Rate limits

Les limites sont définies par environnement (pas par clé), ce qui permet d'avoir plusieurs clés sur un même environnement sans se marcher dessus.

  • Free tier : 60 envois / minute, 1 000 / mois
  • Pro : 600 envois / minute, 100 000 / mois
  • Business : limites custom

Les headers X-RateLimit-Limit, X-RateLimit-Remaining et X-RateLimit-Reset sont retournés sur chaque réponse.

Prêt à intégrer Mail-Reacher ?

Crée un compte, branche un provider, lance un Mail-Check. Tout est gratuit jusqu'à 1 000 emails/mois.