WebMarketers Client Email Protocol
Purpose: Isolate client sites from Amazon SES so one compromised site can't tank the whole account's reputation — and so we can swap providers without touching every site.
The Problem
Client mailboxes/sites get compromised → spam goes out through SES → SES flags the account for bad reputation → we're forced to reconfigure email for all 150+ sites at once. This protocol contains the blast radius and gives us fast rotation + fallback.
The Stack
Gravity Forms (wp_mail)
↓
FluentSMTP ──primary──▶ Plunk project (per client) ──▶ Amazon SES (IP-restricted)
│
└──fallback──▶ Brevo / SMTP2GO (DIRECT — bypasses Plunk + SES)
| Layer | Role |
|---|---|
| FluentSMTP | WordPress plugin. Intercepts all wp_mail(), handles routing, fallback, and per-site logging. Free. Replaces PostSMTP. |
| Plunk | Central relay over SES. One project per client (multiple domains per project). Gives per-client isolation, credential rotation, and a kill switch. Exposes standard SMTP (465/587). |
| Amazon SES | Actual delivery. Credentials IP-restricted to our servers via IAM aws:SourceIp. |
| Brevo / SMTP2GO | Fallback provider. Free tier, sits idle until needed. Connected directly, not through Plunk. |
Key Decisions
- Fallback goes direct, not through Plunk. If Plunk or SES is the failure point, the site still sends. Routing fallback through Plunk would take out both paths at once.
-
Form responses stay native. Gravity Forms notifications are
wp_mail(), so they already flow through Plunk over SMTP automatically. No separate API integration needed. - Transactional ≠ marketing. Form receipts (admin notification + visitor auto-response) are transactional. Only promote a submitter into a Plunk contact/automation on sites that actually run nurture campaigns — as a separate, consented marketing path.
Detection & Alerting
Two distinct signals — we need both:
- Failure notification (site-detected) → catches outages (SES down/banned). Triggers the fallback. ✅ already planned.
- Volume/anomaly alerting → catches the real reputation-killer: a hacked site sending spam successfully (returns 250 OK, looks normal). Watch Plunk per-project send spikes and/or SES CloudWatch alarms on send rate + complaint rate. ⚠️ must add.
Reminder: IP whitelisting stops leaked-credential abuse from outside. It does not stop a hacked site sending through its own legit relay — that's what the anomaly alerting is for. Prevention still lives at the source (patching, WAF, form CAPTCHA/rate-limiting).
Per-Client Setup Checklist
- Create a Plunk project for the client; add their domain(s) with DKIM/SPF.
- Point the project's upstream at the shared IP-restricted SES credentials.
- On each client site, install FluentSMTP:
- Primary connection → the client's Plunk SMTP credentials.
- Fallback connection → Brevo or SMTP2GO (direct).
- Enable email logging.
- Confirm Gravity Forms notifications send and appear in the FluentSMTP log.
- Add the site/project to anomaly alerting (send-rate + complaint-rate).
Blast-Radius (optional, recommended)
Split clients across separate SES sub-accounts by risk tier and/or configuration sets per client. One compromised site then degrades a segment, not all 150.