Quick Answer: A self-hosted newsletter platform like Mailcheap replaces expensive monthly SaaS subscriptions with raw cloud infrastructure powered by Amazon SES. By hosting a Next.js application connected to MongoDB and Upstash QStash, you reduce sending costs to roughly $0.10 per 1,000 emails while maintaining total ownership of subscriber data and deliverability settings.

Email marketing providers quietly tax your growth. The moment your audience expands past 10,000 readers, platforms like ConvertKit, Mailchimp, or Klaviyo bump your account into tiers costing $100 to $300 every month—regardless of whether you send four broadcasts or zero. Building on a self-hosted newsletter platform bypasses these artificial subscriber penalties entirely. By pairing an open-source application like Marc Lou’s Mailcheap with Amazon Simple Email Service (SES), you pay strictly for the outbound bandwidth you consume.

The Mathematical Case for Leaving Traditional SaaS Providers

The fundamental problem with traditional email services lies in their billing model: they charge for database storage rather than bandwidth. Maintaining a dormant list of 50,000 subscribers on standard SaaS platforms costs upwards of $250 per month. If you send one broadcast per week to those 50,000 readers (200,000 outbound emails monthly), your bill remains fixed at that elevated rate.

Under an infrastructure-as-a-service model using Amazon SES, sending those exact same 200,000 emails costs roughly $20.00. AWS charges a flat baseline of $0.10 per 1,000 emails sent. Storing the contacts in a free-tier MongoDB Atlas cluster costs nothing.

Platform / MetricTraditional SaaS (ConvertKit / Mailchimp)SubstackMailcheap + Amazon SES
50,000 Subscribers (4 Sends/Mo)$250.00 – $350.00 / monthFree (10% cut on paid tiers)~$20.00 / month
Data OwnershipExportable CSV (vendor lock-in)Exportable CSVDirect Database Access (MongoDB)
Deliverability ControlShared IP / Automated WarmupManaged Shared DomainDedicated Custom Identity & Domain Alignment
Technical OverheadZeroMinimalMedium (Requires initial AWS & DNS configuration)

For bootstrapped founders, indie hackers, and content engineers, paying a 1,000% premium for an administrative dashboard makes little financial sense once subscriber lists grow. However, saving money on infrastructure requires understanding how these distributed self-hosted pieces fit together.

That said, there's a real technical trade-off you must understand before migrating.

Architecture Breakdown: Next.js, QStash, and Amazon SES

Mailcheap isn't a bloated monolithic server; it's a lean Next.js application acting as a command center. To avoid the infrastructure headaches of running background workers on serverless hosts, the system delegates heavy lifting to specialized managed microservices.

Here is how the components handle an outbound campaign:

  1. Data Layer (MongoDB Atlas): Stores subscriber lists, campaign drafts, analytics metrics, and suppression records. Using a free or low-cost cluster keeps operational costs at zero until you scale into millions of records.
  2. Background Queue (Upstash QStash): Serverless hosts like Vercel enforce strict execution timeouts (typically 10 to 60 seconds). You cannot send 20,000 emails inside a single HTTP request handler. Mailcheap delegates scheduling and queueing to Upstash QStash. QStash dispatches batch triggers at your designated rate, where one message dispatches 50 emails through worker lambdas.
  3. Sending Engine (Amazon SES): Receives raw API commands from the background workers, handles transport-layer security, applies DKIM signatures, and broadcasts the messages across the web.
  4. Distributed Throttling (Upstash Redis): When hosting on serverless lambdas, in-memory rate limiting fails. Because lambdas spin up and down dynamically, memory state isn't shared across instances. Adding an optional Redis layer ensures signup form rate limits and API calls are strictly enforced globally, blocking malicious bot scripts from flooding your list.

Understanding this flow helps when diagnosing delivery hiccups or configuring setup parameters. This next part trips people up every single time.

Step-by-Step Setup: From AWS Sandbox to Verified Domain

Setting up an Amazon SES newsletter setup requires navigating strict identity verification and security policies. AWS defaults all new accounts to a sandbox environment, restricting sends to 200 emails per 24 hours and allowing deliveries only to explicitly verified internal email addresses.

1. DNS & Identity Alignment

Never send newsletters directly from your apex root domain (example.com). Doing so risks your primary business email reputation if a campaign suffers high spam reports. Instead, register a dedicated subdomain like mail.example.com inside the AWS SES identity dashboard.

To pass strict authentication checks enforced by Gmail and Yahoo bulk sender guidelines, configure these three records at your DNS host:

  • DKIM (DomainKeys Identified Mail): Add the three CNAME records provided by AWS SES to cryptographically sign your outbound messages.
  • Custom MAIL FROM: Set a custom subdomain like bounce.mail.example.com inside SES. Add the corresponding MX and TXT records to align the envelope-sender domain with your main domain, ensuring SPF passes cleanly.
  • DMARC Record: Create a TXT record at _dmarc.example.com containing v=DMARC1; p=none;. This tells recipient mail servers how to handle unauthenticated mail originating from your domain.

2. AWS SNS Event Tracking Configuration

To capture bounces and complaints automatically, you must create an Amazon Simple Notification Service (SNS) topic (e.g., mailcheap-ses-events). Link your SES Configuration Set to dispatch hard bounce, complaint, and delivery events directly to this SNS topic.

A common failure mode occurs when engineers leave the default SNS signature version active. AWS SNS historically signed messages using SHA1, which modern applications reject. You must explicitly update your topic to signature version 2 (SHA256) via the AWS CLI:

aws sns set-topic-attributes \
  --topic-arn arn:aws:sns:us-east-1:123456789012:mailcheap-ses-events \
  --attribute-name SignatureVersion \
  --attribute-value 2

If you skip this CLI command, Mailcheap will fail to verify inbound SNS webhooks, silently dropping bounce processing notifications and exposing your sender reputation to severe damage.

3. Exiting the AWS SES Sandbox

Submit a request for production access via the AWS console. When requesting access, explicitly tell the review team:

  • You exclusively collect contacts via double opt-in (confirmed opt-in).
  • You process bounces and complaints automatically using SNS webhooks.
  • Every outbound message contains a clear, functional RFC 8058 one-click unsubscribe link.

AWS usually approves these requests within 24 hours when given precise technical details.

Here's where most guides go wrong—they assume hit-send and forget. Managing deliverability takes ongoing discipline.

Mastering Deliverability: Bounces, RFC 8058, and Tracking

When running self-hosted email marketing software for developers, you assume direct responsibility for your sender score. Managed platforms obscure deliverability mechanics behind high monthly fees. On SES, you control every variable directly.

The 2% Bounce and 0.08% Complaint Thresholds

Amazon SES maintains zero tolerance for high-risk sending behavior. According to AWS SES Documentation, if your account bounce rate exceeds 5% or your complaint rate exceeds 0.1%, AWS will put your account on probation or pause sending capabilities entirely.

Mailcheap enforces automated safeguard limits directly in the codebase: if an active campaign encounters a bounce rate crossing 2% or a complaint rate passing 0.08%, sending pauses automatically. This conservative buffer protects your AWS infrastructure from catastrophic revocation.

Outbound Send -> SNS Webhook -> Mailcheap Endpoint
                                      |
                     Is Bounce Rate > 2.0% or Complaint > 0.08%?
                                 /         \
                               YES          NO
                                /            \
                   Pause Campaign       Continue Batch

RFC 8058 One-Click Unsubscribe Protocols

Major inbox providers (Gmail, Yahoo, Outlook) require high-volume senders to support native header-based unsubscribes. Mailcheap injects standard List-Unsubscribe and List-Unsubscribe-Post headers into every outgoing email MIME body. This enables email clients to render a prominent "Unsubscribe" button right next to the sender name, allowing users to safely opt out without hitting the spam button.

Custom Domain Tracking Strategy

Most open-source setups rely on shared AWS click-tracking domains. This is a trap. If another AWS customer uses the generic tracking domain to host phishing links, security scanners will flag that URL, causing your emails to drop straight into spam folders. Mailcheap resolves this by proxying open/click tracking endpoints directly through your own application subdomains (APP_URL), shielding your domain reputation from external bad actors.

This raises an important question: is setting up this infrastructure right for everyone?

Self-Hosted vs Managed SaaS: Critical Trade-Offs

While evaluating a Mailcheap Marc Lou review or evaluating open-source codebases, consider your technical capabilities and business scale. Self-hosting isn't universally better; it shifts cost from cash software subscriptions to initial developer effort.

When to Choose Self-Hosted

  • You possess basic web development skills: You are comfortable editing environment variables (.env), adding DNS records, and executing basic terminal commands.
  • You value subscriber ownership: You want your reader database kept safely inside your own isolated MongoDB database rather than stored on third-party SaaS servers.
  • You seek long-term cost efficiency: You prefer paying pennies per send rather than paying hundreds of dollars every month for inactive list storage.

When to Stay on Managed SaaS

  • You need multi-user teams and role permissions: Mailcheap is engineered for single creators or small teams using one administrative account.
  • You require complex, visual automation workflows: If your marketing relies on intricate multi-branch decision trees, behavioral tags, and sales funnel automations, platforms like ConvertKit or ActiveCampaign remain worth their premium pricing.
  • You want zero infrastructure management: If tweaking DNS records or monitoring SNS webhooks stresses you out, a managed product like Substack is a safer choice.

If you want to evaluate a Substack vs self-hosted newsletter migration, test your technical comfort level by deploying Mailcheap to a staging environment first.

Frequently Asked Questions

What is a self-hosted newsletter platform?

A self-hosted newsletter platform is open-source or custom software installed on your own server or cloud infrastructure. Instead of paying a recurring monthly fee based on subscriber volume to a SaaS provider, you manage your dashboard and route email deliveries through low-cost API services like Amazon SES.

How to send cheap email newsletters without high monthly fees?

You can significantly cut newsletter costs by hosting an open-source tool like Mailcheap on a free-tier hosting host like Vercel and connecting it to Amazon SES. This limits your ongoing expenditure strictly to raw delivery costs—approximately $0.10 for every 1,000 emails sent.

Why does Amazon SES pause email sending automatically?

Amazon SES automatically pauses sending privileges if your hard bounce rate exceeds 5% or your complaint rate exceeds 0.1%. These limits protect mailbox providers from spam. Mailcheap builds in extra protection by automatically pausing campaign sends if bounce rates cross 2% or complaints exceed 0.08%.

Can I import existing subscriber lists into Mailcheap?

Yes. Mailcheap includes contact management interfaces featuring search filters, subscriber status toggles, and direct CSV file imports, allowing you to migrate subscriber lists from platforms like Substack, ConvertKit, or Mailchimp without losing subscriber history.

The Path Forward for Developer-Marketers

Transitioning to a self-hosted newsletter platform puts you in complete control of your subscriber list, infrastructure costs, and deliverability performance. By combining Next.js, MongoDB, Upstash QStash, and Amazon SES, you eliminate subscriber storage fees entirely while maintaining high deliverability standards.

Test this setup by deploying the codebase to a staging host, verifying a test subdomain on AWS SES, and sending a broadcast to a small segment of your audience this week. Review our comprehensive breakdown on email deliverability best practices to ensure your DNS records pass full authentication checks before scaling up high-volume sends.