Transactional and marketing emails properly distinguished
Why it matters
CAN-SPAM §5 defines transactional email (password resets, receipts, security alerts) as exempt from its commercial email requirements — but that exemption disappears the moment promotional content is added to a transactional template. Injecting a 'You might also like' banner into an order confirmation reclassifies the entire message as commercial, requiring unsubscribe compliance that transactional flows typically lack. Beyond compliance, mixing the two in a single code path destroys the deliverability benefit of keeping transactional mail on dedicated IP streams: a complaint on a promotional email poisons deliverability for password resets on the same IP pool.
Severity rationale
Info because the impact is primarily deliverability degradation and potential regulatory reclassification rather than a direct violation — the severity escalates if promotional content is added to transactional templates.
Remediation
Maintain separate functions and separate sending configurations for transactional and marketing email — never route both through the same code path.
// lib/email.ts — explicit type separation
export async function sendTransactionalEmail(opts: { to: string; subject: string; html: string }) {
// No List-Unsubscribe headers; no promotional content in html
return client.send({ from: 'noreply@yourproduct.com', ...opts })
}
export async function sendMarketingEmail(opts: { to: string; subject: string; html: string; unsubUrl: string }) {
// Always includes unsubscribe headers; only called for opted-in subscribers
return client.send({
from: 'hello@yourproduct.com',
headers: { 'List-Unsubscribe': `<${opts.unsubUrl}>`, 'List-Unsubscribe-Post': 'List-Unsubscribe=One-Click' },
...opts,
})
}
If using Postmark, configure separate message streams (Transactional vs. Broadcast). This also gives you separate deliverability metrics to catch issues before they affect your transactional sending reputation.
DetectionPro
The detection method for this pattern is part of AuditBuffet Pro.
The full method (what to look for, pass and fail conditions, and how results get reported) ships inside the Email & SMS Compliance Audit. The pattern definition, severity rationale, and remediation remain openly licensed under CC-BY-4.0.
External references
- external · CAN-SPAM-§5 — CAN-SPAM Act §5 — Applies only to commercial (not transactional) messages; mixing voids transactional exemption
- iso-25010:2011 · maintainability.modularity — ISO 25010 — Maintainability / modularity (separation of email types)
Taxons
History
- 2026-04-18·v1.0.0·Initial import from email-sms-compliance·automated