Email Marketing
Trackily embarque un ESP complet : listes, autoresponders (sequences), serveurs SMTP, suppression, opt-in / double opt-in, tracking opens/clicks, Send-Time Optimization, et déclencheurs basés sur tes conversions affiliées. Aucun Mailchimp / Klaviyo à payer en parallèle.

Concept
L'email marketing dans Trackily n'est pas un add-on bricolé : c'est un sous-système qui partage la même DB, le même worker, les mêmes tokens MCP et les mêmes scopes que le reste de l'app. Tu manipules les mêmes notions qu'un Mailchimp — liste, subscriber, sequence, step, send — mais avec deux singularités qu'un ESP classique ne peut pas offrir :
- Conversion → enrollment automatique. Quand un postback affiliate
/postbackarrive pour une offre donnée, Trackily peut auto-enrôler l'acheteur dans une liste, qui démarre alors la sequence par défaut (thank-you, cross-sell, ascension). Un ESP classique ne voit jamais tes postbacks. - Landing → liste binding natif. Chaque landing peut être liée à une liste : toute soumission de formulaire enrôle automatiquement, sans ZapierMake/webhook intermédiaire.
Pourquoi c'est intégré
L'argument commercial est simple : tu te débarrasses d'une dépendance externe à 30-200$/mois, tu gardes toutes tes data first-party, et tu peux automatiser des flows que personne d'autre ne peut faire (parce que personne d'autre n'a accès à tes postbacks réseau ni à tes leads issus de prelanders).
L'argument technique est plus subtil : le moteur d'email réutilise la même infrastructure de scheduling que le reste de Trackily. Le email_sends.scheduled_at est lu par le même cron tick que tes campaigns, ton automizer et tes flows. Pas de queue Redis à déployer, pas de worker séparé à monitorer.
Architecture en une image
┌────────────────────────────────────────────────────────┐
│ EMAIL SUBSYSTEM │
└────────────────────────────────────────────────────────┘
┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ email_ │───▶│ email_ │───▶│ email_ │───▶│ email_ │
│ smtp_ │ │ lists │ │ sequences │ │ sequence_ │
│ servers │ │ │ │ │ │ steps │
└─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘
▲ ▲ │
│ │ ▼
│ ┌─────────────┐ ┌─────────────┐
│ │ email_ │ ◀───── schedule ─────│ email_ │
│ │ subscribers│ │ sends │
│ └─────────────┘ └─────────────┘
│ ▲ │
│ │ ▼
┌─────────────┐ │ ┌─────────────┐
│ email_ │ │ │ email_ │
│ suppression│──────────┘ │ events │
└─────────────┘ (block list, │ (open/click)│
cross-list, └─────────────┘
bounces +
complaints)
Les 5 tables racines
| Table | Rôle |
|---|---|
email_smtp_servers |
Relais SMTP (Mailgun, SendGrid, Postmark, SES, Gmail). Quotas, From/Reply-To, mot de passe chiffré AES-256-GCM via SECRETS_MASTER_KEY. |
email_lists |
Liste d'abonnés. Réglages opt-in, tracking, sequence par défaut, override From/Reply-To. |
email_subscribers |
Abonnés. UNIQUE (list_id, lower(email)) empêche les doublons par liste. Status : subscribed, pending_confirm, unsubscribed, complained, bounced. |
email_sequences + email_sequence_steps |
Autoresponders : suite ordonnée de steps déclenchés N minutes/heures/jours après l'enrollment. |
email_sends |
Audit log de TOUT message queué/envoyé. Sert aussi de dedup gate (impossible d'envoyer deux fois le même step au même subscriber). |
email_events |
Opens, clicks, unsubscribes, bounces, complaints. BIGSERIAL — peut grossir vite. |
email_suppression |
Blocklist GLOBALE (cross-list). Un hard bounce ou une complaint passe ici, et plus jamais aucune liste ne pourra ré-enroller cet email. |
Le flow nominal
- Tu crées un serveur SMTP (Mailgun, SES…) dans
Settings → Email — SMTPou via MCPcreate_email_smtp_server. - Tu crées une liste et tu la lies à ce SMTP (
create_email_list). - Tu crées une sequence sur la liste (
create_email_sequence) — la première sequence devient automatiquement ladefault_sequencede la liste. - Tu ajoutes des steps (
add_email_sequence_step) : subject, preheader, body_html, body_text, delay_days/hours/minutes depuis l'enrollment. - Tu enrolles des subscribers — manuellement (
enroll_email_subscriber), via le binding landing→liste, ou via un trigger conversion. - Le worker tourne en continu : pour chaque subscriber actif, il calcule les steps "dus maintenant" et insère des
email_sendsàstatus='queued'. - À chaque tick (env. 30s), le worker prend les sends queued, route via le SMTP de la liste (en respectant les quotas daily/hourly), met à jour
status='sent', et stocke lemessage_idretourné par le MTA. - Quand un destinataire ouvre / clique, un pixel ou un redirect signé loggue dans
email_events. Les bounces / complaints reviennent via webhooks Mailgun/SES. - Hard bounce ou complaint = ajout automatique à
email_suppression→ plus jamais réémis vers cet email, depuis n'importe quelle liste.
Où ça se trouve dans l'admin
L'accordéon Email Marketing dans la sidebar regroupe les cinq pages :
- Lists — créer, éditer, soft-delete. Voir les subscribers d'une liste, le compteur, les sequences attachées.
- Sequences — visual builder de l'autoresponder. Reorder, preview, send-test.
- SMTP Servers — gérer les relays, tester la connexion, voir les compteurs daily/hourly.
- Sends Log — audit des emails (queued / sending / sent / failed / bounced). Filtre par status, liste, email.
- Suppression — view-only de la blocklist globale + ajout manuel via UI ou MCP.
Les conversion triggers ne vivent pas dans la sidebar : ils se configurent depuis la page MCP Autopilot ou la page Email — Lists (sous l'onglet "Triggers" d'une liste donnée).
Variables de templating
Dans subject, preheader, et body_html, ces placeholders sont rendus au moment de l'envoi :
{{first_name}}— premier mot duname, ou la partie avant@de l'email{{name}}—email_subscribers.name{{email}}— adresse{{country}}— country code ISO{{custom.X}}— n'importe quel champ deemail_subscribers.custom_fieldsJSONB{{unsubscribe_url}}— lien one-click (auto-injecté en footer + dansList-Unsubscribeheader){{list_name}}— nom de la liste
Voir aussi
- Lists — gestion des listes, opt-in modes, GDPR
- Sequences — builder d'autoresponder, exemple de welcome series
- SMTP — Mailgun, SendGrid, Postmark, SES, Gmail
- Suppression — pourquoi c'est critique pour la réputation
- Automations — landing→liste, post-purchase, abandoned cart, conversion triggers
- Magic Link — passwordless auth pour les clients
- MCP Autopilot — pilote toutes ces tables depuis Claude / Cursor