Your app
Any SMTP client, any framework.
sendMail() toEight stages, one endpoint, every event logged. Below is the full journey — how one line of SMTP code becomes a verified, ISP-routed, provider-diversified send with a reply that comes back as a parsed contact.
sendMail() and their inbox.Verified, routed, delivered — then replies harvested for contacts you would otherwise lose.
Any SMTP client, any framework.
smtp.sendrules.net, 587 STARTTLS + 465 implicit.
Every recipient scored in the DATA phase.
Pick a strategy. Fail over automatically.
Your accounts. Your reputation. Your quota.
Gmail, Yahoo, Outlook, Apple, or anywhere else.
Turns OOO replies into contact lists — new colleagues, referrals, forwarded contacts.
Everything logged, signed, and searchable.
Any SMTP client, any framework.
smtp.sendrules.net, 587 STARTTLS + 465 implicit.
Every recipient scored in the DATA phase.
Pick a strategy. Fail over automatically.
Your accounts. Your reputation. Your quota.
Gmail, Yahoo, Outlook, Apple, or anywhere else.
Turns OOO replies into contact lists — new colleagues, referrals, forwarded contacts.
Everything logged, signed, and searchable.
Point any SMTP client at smtp.sendrules.neton 587 (STARTTLS) or 465 (implicit TLS). AUTH LOGIN or AUTH PLAIN. Real Let’s Encrypt cert — no self-signed workarounds. Every credential can be scoped to a CIDR list so a leaked password from outside your infrastructure cannot authenticate.
import nodemailer from "nodemailer";
const t = nodemailer.createTransport({
host: "smtp.sendrules.net",
port: 587,
secure: false, // STARTTLS negotiated in-band
auth: {
user: process.env.SENDRULES_USER, // per rule
pass: process.env.SENDRULES_PASS,
},
});
await t.sendMail({
from: "[email protected]",
to: "[email protected]",
subject: "Your order #1042 is on its way",
html: renderOrderEmail(order),
});Before the message ever leaves for a provider, every recipient is scored — inline, in the SMTP DATA phase itself, on a two-second budget. Bad addresses never spend your ESP quota. Risky ones are flagged. The policy is per-rule, so you can reject on outbound cold email and only flag on transactional.
Every rule picks a strategy. The rule editor tells you which ISPs your attached providers cover — and warns before you save if there’s a Yahoo-shaped gap.
Rotate through every attached provider evenly. Simple, predictable, hard to hurt yourself with.
Assign a percentage per provider. 70% through SES, 25% through Postmark, 5% through the fallback.
Try provider one; if it errors, try provider two; and so on. The classical failover pattern.
Uniform-random pick — useful for A/B testing two providers on identical traffic.
First delivery to a recipient pins a sender. Every follow-up uses that same sender — reply-rate stays clean.
Resolve the recipient's live MX record. Gmail buyer → your Gmail-friendly provider; Yahoo → your Yahoo-friendly one.
sendrules holds your provider credentials sealed with AES-256-GCM per tenant, but never bills you for the mail — the send goes through your account with your provider. When one provider rate-limits or errors, the next attached provider picks up automatically.
We resolve the recipient’s live MX record, so “[email protected]” that fronts on Google Workspace is correctly routed as a Gmail recipient. Every provider webhook is normalized into the same event shape — delivered, bounced, complained, deferred — with the underlying provider preserved for drilldown.
Ten to twenty percent of campaign replies are autoresponders — and most of them carry the exact contact info you were trying to reach: “I’m on leave until Monday, please contact [email protected] for procurement questions.” sendrules parses every one, harvests every address, captures every named field, and drops the result into a list you can trigger a webhook from or download as CSV.
Thanks for your note — I’m on parental leave until 15 January 2026. For procurement, please reach [email protected]. Legal + contracts: [email protected] (direct: +44 20 7946 0123).
{
"event": "parser.contact",
"list": "acme-warm",
"email": "[email protected]",
"fields": {
"role": "procurement",
"return_date": "2026-01-15"
},
"source_msg": "01f9...abcd",
"ts": "2026-11-04T08:14:32Z"
}Seven filtered activity inboxes. Row-level sparklines. Period-comparison cards. Share links that make any filtered slice a public read-only URL. Behind it all: a normalized event stream your webhooks subscribe to, signed with HMAC-SHA256 and replayable from the UI.
Free plan — 5,000 messages/month, every feature on this page included. Attach one provider and watch the flow light up in the Activity view.