← All templates

MailCheap on Unbroker

Newsletters where you pay for the emails you send, not for dormant subscribers

Plan requirements

Template container services, databases and persistent volumes require Pro. Resource usage is billed separately. Review the configuration and pricing before deploying. View pricing

Deployment inputs

ADMIN_EMAIL Required
Your email. You sign in to MailCheap with a code sent here, and it can open /admin.
ALLOWED_EMAILS Optional
Who else can sign in, comma-separated addresses and whole domains, e.g. jane@example.com, @example.org.
EMAIL_FROM Required
From address of sign-in codes and alerts, e.g. MailCheap <login@mail.example.com>. Its domain must be verified at Resend or Amazon SES.
RESEND_API_KEY Optional
Resend API key for sign-in codes and alerts. Without it, they go through Amazon SES.
SES_REGION Required
AWS region of your Amazon SES account.
SES_ACCESS_KEY_ID Optional
Access key of the IAM user MailCheap sends through Amazon SES with.
SES_SECRET_ACCESS_KEY Optional
Secret of that access key.
SES_AWS_ACCOUNT_ID Optional
The 12-digit ID of that AWS account.
SES_SNS_TOPIC_ARN Optional
ARN of the SNS topic that receives bounces, complaints and deliveries, subscribed to https://<your-app>/api/webhooks/ses.
QSTASH_TOKEN Optional
Upstash QStash token. QStash runs background sending and scheduling.
QSTASH_CURRENT_SIGNING_KEY Optional
QStash current signing key.
QSTASH_NEXT_SIGNING_KEY Optional
QStash next signing key.
SENDING_ENABLED Required
"true" lets emails reach readers. Leave "false" until your domain and email provider are set up.

Deploy button

Add this to a README or website. It opens this template's deploy form in Unbroker Cloud. Button guide

Deploy on Unbroker
[![Deploy on Unbroker](https://unbroker.cloud/button.svg)](https://app.unbroker.cloud/apps?template=mailcheap)

A newsletter app where you pay your email provider for the emails you send, not a platform for every subscriber on your list. Write an issue, send it to your list and publish it on the web, from the dashboard or from an AI agent through its MCP server and REST API. Imports beehiiv, Substack, Mailchimp, Kit and other CSV exports as they are.

What gets deployed

ServiceImageNotes
MailCheapghcr.io/unbroker-app/mailcheap-containerPublic. The upstream app, built from a pinned commit by mailcheap-container
dbMongoDB 7Internal. Accounts, contacts, campaigns and stats

The session secret and the key of the never-email list are generated for you. Don’t change them later: the first signs everyone out and breaks the links in emails already sent, the second empties the list.

Before you deploy

MailCheap signs you in with a code it emails, so it needs a way to send email from the first minute. Pick one:

Without either, the app runs but nobody can sign in.

After deploy

  1. Open the app’s URL and sign in with ADMIN_EMAIL. Only that address and the ones in ALLOWED_EMAILS can sign in.
  2. To send to readers, follow upstream’s self-hosting guide, steps 4 to 6, with your app’s URL in place of the Vercel one:
    • Amazon SES: production access, an SNS topic subscribed to https://<your-app>/api/webhooks/ses, and an IAM user with the policy the guide lists. Fill in the SES_* variables.
    • Upstash QStash: fill in QSTASH_TOKEN and the two signing keys. QStash calls your app back over the internet to send each batch.
    • Add your sending domain under Domains, create a newsletter, then set SENDING_ENABLED to true.

Until SENDING_ENABLED is true, nothing reaches readers. Sign-in codes and alerts go out either way.

Caveats

Service configuration

More templates

Configuration and instructions from the public template repository. Check the application's license and complete the setup steps before using it in production.