You’ve found Amazon SES, you’re planning to reach more businesses, and a question pops up: can I use it to send cold emails?
If you mean emailing people who haven’t asked to hear from you, SES is not a suitable choice for that campaign. AWS’s production-access process asks you to agree to email only people who explicitly requested your messages. It supports both transactional and marketing email, but choosing “marketing” doesn’t remove that requirement. AWS production-access guide
The good news: you can still build a useful email channel for your business. Start by inviting people to subscribe, then send something they’re glad to open. Let’s walk through the difference—and a friendly way to get started.
What counts as cold email here?#
Picture this: you find a business online, spot its contact address and write a thoughtful introduction. You mention its website, explain your service and keep everything personal.
That might feel very different from a generic email blast. But one detail hasn’t changed: the recipient didn’t ask for your message.
AWS describes unsolicited email as email people haven’t explicitly requested, and its Acceptable Use Policy prohibits unsolicited mass email. A public address, a purchased contact list or a personalized first line doesn’t establish that request. SES sending review FAQ · AWS Acceptable Use Policy
So when you’re choosing how to use SES, ask a simple question: “Where did this person say they wanted this email?” If you can point to a clear signup or request, you have a much better starting point.
Marketing email is welcome—with permission#
“Marketing” isn’t a bad word. A useful newsletter, a product launch someone asked about, or an update from a favorite business can be a welcome part of the week.
Here’s how the situations compare:
| Your email | What happened first? | A good next step |
|---|---|---|
| A password-reset link | Someone requested a reset | Send the link and help them get back in. |
| Your monthly business newsletter | Someone subscribed to that newsletter | Deliver the tips and updates you promised. |
| A sales pitch to a discovered address | You found the address; they didn’t subscribe | Build an opt-in path before adding them to a campaign. |
A business address deserves the same care as any other inbox. And if someone requested a receipt or account message, that alone doesn’t tell you they also want your newsletter.
Provider rules and applicable law are separate considerations. This guide focuses on SES and practical signup design; don’t assume that a legally permitted message automatically meets your provider’s requirements.
Give people a reason to say yes#
An opt-in form is a small invitation: “Would you like more of this?”
Make the answer easy. Tell visitors who you are, what you’ll send and how often they can expect it. Put that promise beside the signup button, where people can actually see it.
You don’t need a complicated form. Here’s an example for a fictional studio:
A little inspiration for your website ✨
Join Studio Notes for two emails a month from North Studio: practical website tips, fresh ideas and occasional updates about our services.
Your email: [email address]
Yes, send me the good stuff
Unsubscribe whenever you like.
That’s clear, friendly and specific. Visitors know what they’re choosing, and you have a promise to keep.
For your own business, the invitation might be a monthly industry roundup, a genuinely useful checklist or an early look at a new product. Choose something your audience would want even if they weren’t ready to buy today.
If the newsletter option sits inside another form, keep it separate and unselected. Someone asking for a quote should be able to request a quote without being quietly added to a promotional list.
Add one little confirmation step#
There are two common signup approaches:
- Single opt-in: someone submits the form, and their subscription becomes active.
- Double opt-in: they submit the form, receive a confirmation email and confirm before the subscription becomes active.
AWS recommends double opt-in to help check that the person owns the address and wants the messages. It can also help with typos. That is a recommendation, separate from the production-access requirement for explicit requests—not a claim that double opt-in is legally mandatory everywhere. AWS sender-reputation guidance
For a public signup form, that extra step is worth considering. Mailat defaults to single opt-in for new lists, and you can choose double opt-in in the list settings. Every form connected to that list follows its confirmation policy. Keep the confirmation short and reassuring:
Subject: One click to join Studio Notes
Hi there! Thanks for signing up for two helpful emails a month from North Studio.
Confirm my subscription
Didn’t request this? No problem—ignore this email and we won’t activate the subscription.
Send this only after an actual signup. Mailing a scraped list to ask everyone to “confirm” doesn’t turn it into an opt-in list.

From signup to a welcome email#
For a list using double opt-in, here’s a simple journey to aim for:
- Make the invitation. A visitor sees your form and a clear explanation of what they’ll receive.
- Save their request. Keep the subscription pending while you wait for confirmation.
- Send the confirmation. Use a single-use link that expires, and keep the email focused on the signup.
- Confirm the choice. Activate the subscription after a valid confirmation. An explicit confirmation action can help avoid accidental signups caused by automated link scanners.
- Say a warm hello. If you want a welcome email, set it up separately and match the promise on your form. Mailat’s signup forms do not send a welcome campaign automatically.
- Make leaving easy. Honor unsubscribe requests, including for emails already waiting in a sending queue.
The wording between those steps matters. After the form, say “Check your inbox to confirm.” After confirmation, say “You’re in—welcome!” Small details make the experience feel thoughtful.
Behind the scenes, add resend limits so repeated submissions don’t flood someone’s inbox. Keep confirmation text under your control rather than copying arbitrary form input into the message.
Create your opt-in form in Mailat#
You can now build this invitation in Mailat’s latest open-source code: publish a signup page to share anywhere, or embed the form on your website. No separate form service is needed. If you already run Mailat, update your installation to the version that includes Signup forms before following along.
Here’s how to make your first one:
- Give your subscribers a home. In Contacts, create a list or choose an existing static list. New lists use single opt-in; choose double opt-in when you want email confirmation.
- Make it yours. Open Signup forms → Create form, select the list, and write your headline, introduction, consent wording and button label. You can add an optional name field and a privacy policy link, too.
- Choose a confirmation sender. For double opt-in, select your verified sending identity. Visitors will receive a confirmation link that expires after 24 hours. They open it and press Confirm my subscription to join.
- Preview, publish, share. Check the live preview, publish the form, then copy its hosted link or website embed code. The embed needs no API key.
- Meet your new readers. Open View signups to see requests and confirmation status. Unpublish the form whenever you want to stop accepting signups.
Each form connects to one list, and you can create several forms for that same list—perhaps one for your blog and another for your newsletter page. The confirmation setting belongs to the list, so its forms stay consistent.
Mailat records the consent wording and signup details, prevents duplicate memberships, and keeps double-opt-in requests out of campaign recipients until confirmation. Public forms also respect unsubscribe and suppression records: signing up again won’t silently reactivate a blocked address. Campaign unsubscribe links stop marketing email from that organization, rather than just one form.
Want to connect the next step to an external workflow? A new list membership emits a contact.subscribed webhook event. You can use it to start your own welcome flow; the form itself does not send a welcome campaign. See the signup forms guide on GitHub for setup, APIs and hosting details.
A form gives people a clear way to ask for your emails. Keep the invitation honest and specific—and remember that single opt-in records a request, while double opt-in also checks access to the address.
Remember what each subscriber asked for#
You don’t need a mountain of personal information. You need a reliable answer to “What did this person choose?”
Keep the signup time, source, list or topic, the wording they saw, and confirmation time where applicable. Record when they unsubscribe, too. Limit access to these records and choose a sensible retention period.
A few clear states make this easier:
| Subscriber status | What it means for your emails |
|---|---|
| Pending | Wait for confirmation before sending campaigns. |
| Subscribed | Send the requested content, subject to delivery restrictions. |
| Unsubscribed | Stop that subscription’s campaigns. |
| Suppressed | Respect the delivery or complaint block. |
If you import contacts, bring their existing consent evidence with them. Finding an address in an old spreadsheet isn’t the same as finding a subscription.
And keep your promise as the list grows. If people joined for a monthly guide, don’t surprise them with daily promotions. Give them a clear choice when your plans change.
Keep your sending setup healthy#
Once people have asked to hear from you, give those emails a solid technical foundation.
Set up SPF, DKIM and DMARC for your sending domain. These help authenticate the sender; DMARC checks alignment with the visible From domain. Authentication doesn’t establish someone’s permission to receive a campaign. SES and DMARC
Handle unsubscribes in your application, alongside bounce and complaint feedback. SES account-level suppression can block configured bounce or complaint reasons within an AWS account and Region. It doesn’t replace your subscription records, and Gmail doesn’t supply complaint data to SES. SES suppression-list guide
Make checking feedback a normal part of your routine. If something changes unexpectedly, investigate before sending more. AWS can place sending under review or pause it when there are problems. SES sending review FAQ
You’re aiming for an email program people enjoy receiving. No signup method or authentication setting can promise inbox placement on its own.
Ready to request SES production access?#
Explain your real setup in plain language: where people subscribe, what you send, and how you handle confirmation, unsubscribes, bounces and complaints. Share your actual website and describe controls you’ve already put in place.
The SES sandbox is Region-specific. Production access allows unverified recipients, but your sending identities still need verification. AWS decides whether to approve a request. SES production-access guide
Before applying, try your own signup journey from start to finish. Does the confirmation arrive? Does the link work? Can you unsubscribe easily? Does that unsubscribe stop a queued campaign? A quick hands-on check can reveal things a settings page won’t.
A few questions you might still have#
What if every cold email is personalized?#
Personalization can make writing more relevant, but it doesn’t create an explicit request. For an SES marketing campaign, start with people who asked to hear from you.
Can I email businesses rather than individuals?#
A company inbox isn’t an automatic opt-in. Look for a clear request for the messages you intend to send, just as you would for any other address.
Does Mailat include hosted and embedded signup forms?#
Yes! The latest Mailat source includes both. You can share a hosted signup page or paste an iframe into your website, with single or double opt-in selected per list. Update your running installation first, then look for Signup forms in the sidebar. The setup guide walks you through it.
Can an opt-in form help me grow my audience?#
Absolutely. Give visitors a worthwhile reason to subscribe and make the invitation easy to understand. Connect the form to confirmation, subscription records and unsubscribe handling so the experience works all the way through.
Where should I put my signup form?#
Try a relevant blog post, a dedicated newsletter page or the end of a helpful guide. Match the invitation to what someone is already reading. A specific “Get next month’s guide” can be much more inviting than a vague “Submit.”
Build your email home with Mailat#
Ready to make email your own? Mailat is free, open-source email software you can self-host. Explore the Mailat GitHub repository, have a look around the documentation, and start shaping your setup.
Prefer a managed home for your inbox? Explore Mailat Cloud plans from $15/month, with one-click deployment after the required account, billing, AWS and domain setup steps. The getting-started guide, AWS setup guide and DNS guide walk you through the essentials.
The open-source software is free; self-hosting has infrastructure and AWS costs, and managed plans have additional AWS usage charges. Check the plan details and setup requirements before you choose.
Start with a useful idea, invite people to join you, and make your next email one they’re happy to see. 💚


