Documentation Mail-Reacher
Tout ce dont tu as besoin pour intégrer Mail-Reacher dans ton application : l'API REST d'envoi, les templates MJML, les webhooks normalisés, le SDK Laravel, et le Mail-Check de délivrabilité. Cette doc évolue avec la plateforme — la version actuelle est v1.0.
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.
- Crée un compte gratuit puis un projet depuis le dashboard.
- Branche un provider (AWS SES, Postmark, Mailgun, SendGrid ou un SMTP custom).
- Crée un environnement
testet un environnementproduction. - Génère une clé API pour l'environnement
test(préfixemr_test_). - Crée un premier template MJML depuis l'éditeur visuel.
- Appelle
POST /v1/emails/sendavec 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_xxxxxxxxxxxxxxxxPré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 |
|---|---|---|---|
| to | string|string[] | oui | destinataire(s) — email simple ou tableau |
| from | string | oui* | expéditeur — défaut depuis le sender configuré |
| subject | string | oui* | sujet — défaut depuis le template si template_id |
| template_id | integer | non | ID du template à utiliser |
| html | string | non | HTML inline si pas de template |
| variables | object | non | variables injectées dans le template |
| reply_to | string | non | adresse de réponse |
| metadata | object | non | données arbitraires renvoyées dans les webhooks |
| tags | string[] | non | tags 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.
Webhooks
Mail-Reacher reçoit les webhooks bruts de chaque provider et les normalise dans un schéma unique avant de les forwarder à l'URL que tu configures dans ton projet.
Événements
delivered— l'email a atteint le serveur destinataireopened— le destinataire a ouvert l'email (pixel tracker)clicked— un lien tracké a été cliquébounced— rejet permanent (hard bounce) ou temporaire (soft)complained— le destinataire a marqué comme spamunsubscribed— désabonnement via le lien
Payload
{
"event": "delivered",
"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 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/laravelConfiguration
MAIL_REACHER_KEY=mr_live_xxxxxxxxxxxxxxxx
MAIL_REACHER_QUEUE=emailsUtilisation
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 |
|---|---|
| 400 | Validation — un champ requis manque ou est mal formé |
| 401 | Clé API absente, expirée, ou invalide |
| 403 | La clé n'a pas le scope requis |
| 404 | Ressource introuvable (template, contact…) |
| 422 | Conflit logique (ex : template inactif) |
| 429 | Rate limit dépassé |
| 500 | Erreur côté Mail-Reacher — réessayer |
| 502 | Erreur 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.