A simple API wrapper around SES, built for app developers.
Amazon SES is excellent at delivering email and hard to set up. MailEnv turns the AWS setup into one API key, so you can send your first transactional email without opening the AWS console.
SES was built for cloud infrastructure teams. Not for your sprint.
SES is a building block. It assumes you already run AWS: an IAM strategy, an event pipeline, monitoring, and someone on call. For an agency or a small app team that just needs password resets to arrive, that's weeks of work that doesn't ship product.
A managed Amazon SES wrapper API closes that gap. You keep SES delivery and your own domain reputation. The AWS plumbing becomes someone else's job.
One credential
An API key in the Authorization header instead of IAM users and access key rotation.
Flat JSON
Five flat fields: to, from, subject, message, and email_type. No nested Content, Simple, and Body objects.
Events as webhooks
Signed delivery, bounce, and complaint events instead of SNS topics and envelopes.
Guardrails built in
Suppression and throttling run on every request, not in code you maintain.
What it takes to send with raw SES, and what it takes with MailEnv.
This is the setup a careful team does before sending production mail through its own SES account. None of it is optional if you want deliverability and an account that stays in good standing.
Raw Amazon SES
- 01Create an AWS account and choose an SES region
- 02Write an IAM policy and create a user or role for sending
- 03Store, scope, and rotate the access keys
- 04Create a domain identity in SES
- 05Publish the three Easy DKIM CNAME records
- 06Set up a custom MAIL FROM domain (MX and SPF records)
- 07Publish a DMARC record
- 08Open a support case to request production access
- 09Create a configuration set
- 10Create SNS topics for bounces, complaints, and deliveries
- 11Attach the topics as event destinations
- 12Build an HTTPS endpoint and confirm the SNS subscriptions
- 13Verify SNS message signatures on every notification
- 14Turn on suppression, or build your own table and check it on every send
- 15Set CloudWatch alarms on bounce and complaint rates
MailEnv
-
1
Tell us what you sendA person reviews your account, usually within 24 to 48 hours.
-
2
Add the DNS records we give youSPF, DKIM, DMARC, and MAIL FROM, checked with you before go-live.
-
3
Send with your API keyOne REST call. Events arrive at your webhook.
The same receipt, sent two ways.
On the left, a production-ready send through the SES v2 SDK, plus the pieces it depends on. On the right, the same send through MailEnv.
Raw Amazon SES · @aws-sdk/client-sesv2
import { SESv2Client, SendEmailCommand } from '@aws-sdk/client-sesv2'; import { isSuppressed } from './suppression'; // you build this const ses = new SESv2Client({ region: 'us-east-1', credentials: { accessKeyId: process.env.AWS_ACCESS_KEY_ID, secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY, }, }); // Your table, fed by SNS bounce and complaint notifications if (await isSuppressed(to)) return; try { await ses.send(new SendEmailCommand({ FromEmailAddress: 'billing@acme.com', Destination: { ToAddresses: [to] }, Content: { Simple: { Subject: { Data: subject, Charset: 'UTF-8' }, Body: { Html: { Data: html, Charset: 'UTF-8' }, Text: { Data: text, Charset: 'UTF-8' }, }, }, }, // Set up separately, with SNS event destinations ConfigurationSetName: 'transactional-events', EmailTags: [{ Name: 'type', Value: 'receipt' }], })); } catch (err) { if (err.name === 'TooManyRequestsException') /* back off, retry */; if (err.name === 'SendingPausedException') /* page someone */; throw err; }
MailEnv · one REST call
await fetch('https://pub-api.mailenv.com/api/v1/send-mail', { method: 'POST', headers: { Authorization: API_KEY, 'Content-Type': 'application/json' }, body: JSON.stringify({ to, from, subject, message, email_type: 'tx' }), }); // Suppression, throttling, and bounce handling // run on MailEnv's side.
- No AWS credentials in your app or your CI secrets.
- No suppression table to build. Bad addresses are blocked before they reach SES.
- No SNS plumbing. Events arrive as signed webhooks.
Amazon SES wrapper API questions
Want the full picture of what we run around SES? See the SES Send API.
What is a simple API wrapper around SES?
It's a service that puts one small, developer-friendly HTTP API in front of Amazon SES. You send a JSON request with an API key, and the wrapper handles the SES setup around it: identities, DKIM, event notifications, suppression, and sending limits.
Is MailEnv an Amazon SES wrapper API?
Yes. MailEnv is a managed REST API wrapper for Amazon SES. Mail is delivered by SES, but you never touch the AWS console, IAM, or SNS. You get one API key.
Do I need my own AWS account?
No. You send on MailEnv's established SES infrastructure, so there's no AWS account to create, no IAM policy to write, and no SES sandbox to get out of.
Can I still use my own domain?
Yes. You send from your own domain with your own DKIM keys and DMARC policy. We give you the exact DNS records and confirm alignment before you go live.
How is this different from the AWS SDK?
The SDK gives you a send call. Everything around it, such as credentials, configuration sets, SNS topics, signature checks, suppression, and reputation monitoring, is still yours to build. MailEnv runs that layer for you.
Ship email this afternoon, not next sprint.
Tell us what you send. We'll review your account, help verify your domain, and get you an API key.