Self-hosted email marketing with full source code. Pay once, own forever. Get AcelleMail — $74 →

Tutorial · 11 min read

How to send 50,000 emails per month for under $5 with AcelleMail + Amazon SES

By AcelleMail Team May 8, 2026 11 min read
tutorial

A pricing breakdown that survives scrutiny: the AcelleMail one-time license, the AWS SES per-1,000-message cost, the EC2 instance footprint. Where the $5/month figure comes from and where it can drift higher.

§1

The claim, with the math

"Self-hosted is cheaper than SaaS at 50K subscribers" is the standing argument on /guide/email-marketing-cost-savings. The pillar guide handles the long-form math at multiple list sizes; this post zooms in on the most-asked single number: 50,000 messages per month — a typical small-to-mid newsletter or SaaS lifecycle volume.

The breakdown into recurring monthly cost:

ComponentMonthly costNote
Amazon SES (50K messages)~$5.00Pay-as-you-go, current AWS rate — verify on aws.amazon.com/ses/pricing
EC2 t4g.small (AcelleMail host)~$12-15Or skip and run on existing infra
Storage / egress~$1-2Modest at this volume
AcelleMail license$0$74 one-time, amortised < $1/month over 7 years

So strictly the SES line is under $5 at 50K (current AWS pricing); the all-in is $18-22 if you also need the EC2 host. The "$5" claim refers specifically to the marginal cost of sending — what your sending volume costs, on top of fixed infrastructure you may already be running. Verify the current SES rate on aws.amazon.com/ses/pricing before quoting. Outbound data transfer costs are charged separately and depend on region.

§2

Where the number drifts higher

Three common patterns push the cost above the headline number:

  1. Sandbox-to-production gap. SES new accounts start in sandbox (200 messages/day, manually verified recipients only). Leaving sandbox is a free request via the SES console — describe your use case, list-hygiene practices, bounce-handling plan. Approval is typically within 24h. Skipping this step keeps you stuck at the sandbox cap regardless of price.
  2. Region selection. SES pricing is region-specific. If your subscribers are concentrated in a region, send from that region to minimise both latency and data-transfer cost. The pricing page lists rates per region.
  3. Rich attachments. SES bills extra per GB of data sent above a free tier per message. For text-only newsletters this is negligible; for PDF / image-heavy transactional mail it can dominate at high volumes. The fix is to host attachments on your CDN and link to them rather than attach.

§3

Step 1 &mdash; install AcelleMail (~10 min on a fresh EC2)

The installation walks the standard LEMP path:

# Ubuntu 22.04 / 24.04 LTS on t4g.small or larger
sudo apt update && sudo apt install -y nginx mysql-server php8.3-fpm php8.3-{cli,mbstring,xml,zip,curl,mysql,gd}

# Download the AcelleMail bundle from CodeCanyon, extract to /var/www/acelle
# Create a MySQL database, run the web installer at https://yourapp.com

The web installer takes seven steps: license validation, DB credentials, mail-from defaults, admin account, SES credentials (or any other vendor), cron-config check, and a final settings sweep. The whole thing is well under 10 minutes if you have the AWS access keys handy.

If you do not want to run your own EC2 host, you can also install AcelleMail on shared hosting (cPanel, Plesk, or any LAMP/LEMP host with PHP 8.3 + MySQL 8) — the cost line then collapses entirely into your existing hosting bill.

§4

Step 2 &mdash; connect Amazon SES (the right way)

In AcelleMail admin, Sending servers → Add sending server → Amazon SES → SMTP. AcelleMail ships three SES drivers under app/SendingServers/Drivers/Vendors/Amazon/: AmazonBaseDriver.php (shared), AmazonSmtpDriver.php (SMTP transport), and AmazonApiDriver.php (HTTPS REST). For new operators the SMTP driver is recommended — it works without IAM-policy fiddling and is identical in deliverability to the API driver.

Endpoint:   email-smtp.us-east-1.amazonaws.com (or your region)
Port:      587 (STARTTLS) or 465 (implicit TLS)
Username:  AKIA…  (SES SMTP credentials, NOT IAM access keys)
Password:  (the secret half from the SMTP credential pair)

SES SMTP credentials are not the same as your AWS IAM access key. Generate them via SES console → "SMTP settings" → "Create SMTP credentials". This creates an IAM user with the minimal ses:SendRawEmail permission and exposes a username/password pair derived from that user's access key.

§5

Step 3 &mdash; publish the seven DNS records

The full walkthrough is in The 7 DNS records every self-hosted email sender needs. The minimum to send via SES at 50K/month volume:

# MX (any reachable inbound mail server)
@        MX 10 mail.yourcompany.com.

# SPF
@        TXT "v=spf1 include:amazonses.com -all"

# DKIM (3 CNAMEs from SES Easy DKIM)
token1._domainkey   CNAME token1.dkim.amazonses.com
token2._domainkey   CNAME token2.dkim.amazonses.com
token3._domainkey   CNAME token3.dkim.amazonses.com

# DMARC (start at p=none, ramp to reject over 4-6 weeks)
_dmarc        TXT "v=DMARC1; p=none; rua=mailto:dmarc@yourcompany.com"

SES verifies the DKIM CNAMEs automatically once they propagate. You will see the verified status in the SES console under "Verified identities" within minutes of publishing.

§6

Step 4 &mdash; leave the SES sandbox

SES production access is the gate between "200 messages/day to verified addresses" and "your account-level daily quota for whoever you want." The request form is short:

  • Use case description. One paragraph — "I run a self-hosted newsletter for {audience} via AcelleMail; volume is ~50K/month."
  • List-hygiene plan. Mention double opt-in, unsubscribe handling, complaint-feedback processing.
  • Compliance with AUP. Tick the box.

AWS approval typically lands within 24 hours. The sandbox-to-production transition is the single most-skipped step new operators trip on; you can install AcelleMail, send fine to the verified test address, and then be confused when sending to real subscribers fails. Always check whether your account is in production access before debugging anything else.

§7

Step 5 &mdash; warm the IP / domain

If you are using SES with shared IPs (the default), you do not need to warm the IP — SES production IPs are pre-warmed pools and you inherit their reputation. What you do need to warm is the From-domain: even on a shared SES IP, mailbox providers track per-domain reputation, so a brand-new domain still goes through a 2-3 week ramp before reaching peak sending.

The standing schedule is in A 6-week IP warmup schedule. Compressed: start at 50/day, double cautiously, target 50K/month over 4-6 weeks. AcelleMail's WarmupStrategy model executes this automatically — configure it on the sending server and the per-day cap is enforced before any campaign runs.

§8

Step 6 &mdash; monitor the deliverability signals

Three places to watch:

  • SES Reputation metrics (in the SES console). Bounce rate must stay under 5% (warn) / 10% (pause). Complaint rate must stay under 0.1% (warn) / 0.5% (pause). Practical working margin: bounce < 2%, complaints < 0.05%.
  • Google Postmaster Tools (postmaster.google.com). Free; surfaces daily spam-rate, IP / domain reputation, authentication-pass rate, and feedback loop deliveries. Sign up the day you publish DNS, not later.
  • AcelleMail Bounce / Complaint dashboard. The webhook receivers (app/SendingServers/Webhooks/BounceReceived.php + ComplaintReceived.php) consume SES SNS events and write rows to BounceLog; the admin dashboard graphs the rate over time. Hard bounces auto-blacklist; soft bounces accumulate.

§9

When self-hosted is the wrong call

Self-hosted at 50K/month is unambiguously cheaper than every SaaS option. But the cost-per-message advantage is not the only axis. Three situations where SaaS is the better choice regardless of price:

  1. You have no operations bandwidth. SES + AcelleMail is low-effort but not zero-effort. SPF / DKIM / DMARC need eyes; warmup needs eyes; bounce-rate spikes need eyes. If "running a server" is not in your team, SaaS solves it for you in dollar terms.
  2. Your audience is global with regional inbox-quirks. Naver in Korea, mail.ru in CIS, QQ in China — each has its own deliverability quirks. SaaS providers with regional presence handle this for you. Self-hosted means you handle it.
  3. You need built-in advanced editor / template marketplace. AcelleMail has a builder and standard templates; the SaaS premium-tier ones are flashier. If your campaigns are visually intricate and the design tooling is the bottleneck, that is a SaaS-wins case.

For everyone else — the technical operator with a 50K-subscriber list and basic ops chops — the math works. The cost line is real and stable; the operational complexity is bounded; the deliverability is identical to SaaS once the seven DNS records are in place. The longer treatment lives in /guide/email-marketing-cost-savings.

Run this on your own infrastructure.

AcelleMail is a one-time-license self-hosted email platform. Full source code, no per-subscriber pricing.

Get AcelleMail — $74 Try Live Demo