Mail Merge

Published on: 8/3/2026

A signed-in user onboards their own SMTP server, uploads a CSV, composes a plain-text email with merge-field autocomplete, previews and test-sends the merge, then fires a background batch that sends one personalized email per row — with live per-recipient progress and a saved record of exactly what was sent and to whom.

Why it exists: Self-serve mail merge without vendor lock-in. You bring your own SMTP, your own data, and your own spreadsheet. No shared sending infrastructure, no rich-text vendor dependencies, and a durable plaintext record of every email that went out.

Stack: Next.js 16, React 19, Clerk auth, Drizzle ORM, SQLite with WAL, AES-256-GCM encryption, background workers, and Docker/Coolify for deployment.

Key features:

  • Per-user SMTP onboarding with live verification
  • CSV upload with automatic column detection
  • Merge-field editor with live preview
  • Test-send before live batch
  • Background worker with idempotent per-recipient sending
  • Per-row attachments with safety checks
  • Campaign history and delivery records

Repository: github.com/robindarlington/mail-merge