{"id":503,"date":"2026-10-21T01:01:40","date_gmt":"2026-10-21T06:31:40","guid":{"rendered":"https:\/\/photonconsole.com\/blog\/?p=503"},"modified":"2026-10-21T08:27:07","modified_gmt":"2026-10-21T13:57:07","slug":"amazon-ses-sending-limits-and-quota-increases-explained","status":"publish","type":"post","link":"https:\/\/photonconsole.com\/blog\/amazon-ses-sending-limits-and-quota-increases-explained\/","title":{"rendered":"Amazon SES Sending Limits and Quota Increases Explained"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Amazon SES is the cheapest way to send email at volume, and the sandbox is the part everyone worries about. Two hundred messages a day, verified recipients only, one message per second \u2014 restrictive enough that getting out of it feels like the milestone.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">It is not the milestone. Getting out of the sandbox takes a form and a few days. Staying out is the part nobody plans for.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Buried in the production access request is an acknowledgement that you have a process for handling bounce and complaint notifications. Most people tick it without building one. SES then enforces thresholds against those exact metrics, and the complaint threshold for putting your account under review is one complaint per thousand emails.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Quick Answer: What Are the Amazon SES Sending Limits?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">There are two sets of limits, and the second set matters far more than the first.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Stage<\/th><th>Recipients<\/th><th>Per 24 hours<\/th><th>Per second<\/th><\/tr><\/thead><tbody><tr><td>Sandbox<\/td><td>Verified addresses and domains only<\/td><td>200 messages<\/td><td>1 message<\/td><\/tr><tr><td>Production<\/td><td>Any recipient<\/td><td>Varies by use case<\/td><td>Varies by use case<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">AWS does not publish a fixed production quota. Its <a href=\"https:\/\/docs.aws.amazon.com\/ses\/latest\/dg\/quotas.html\" target=\"_blank\" rel=\"noopener\">service quotas documentation<\/a> states that both the daily sending quota and the maximum send rate vary based on your specific use case once you leave the sandbox. Your actual figures appear in your own Account dashboard, and they apply <strong>per AWS Region<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The limits that genuinely govern a production SES account are not volume quotas at all. They are reputation thresholds, and exceeding them stops your sending regardless of how much quota you have left.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">The Sandbox, and How to Leave It<\/h2>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img fetchpriority=\"high\" decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/photonconsole.com\/blog\/wp-content\/uploads\/2026\/10\/Photon-Console_-Production-Access-Gate-1024x576.png\" alt=\"The Amazon SES sandbox restrictions and the production access request requirements shown as a gate between development and live sending\" class=\"wp-image-505\" style=\"aspect-ratio:1.7777777777777777;width:1200px;height:auto\" srcset=\"https:\/\/photonconsole.com\/blog\/wp-content\/uploads\/2026\/10\/Photon-Console_-Production-Access-Gate-1024x576.png 1024w, https:\/\/photonconsole.com\/blog\/wp-content\/uploads\/2026\/10\/Photon-Console_-Production-Access-Gate-300x169.png 300w, https:\/\/photonconsole.com\/blog\/wp-content\/uploads\/2026\/10\/Photon-Console_-Production-Access-Gate-768x432.png 768w, https:\/\/photonconsole.com\/blog\/wp-content\/uploads\/2026\/10\/Photon-Console_-Production-Access-Gate-1536x864.png 1536w, https:\/\/photonconsole.com\/blog\/wp-content\/uploads\/2026\/10\/Photon-Console_-Production-Access-Gate.png 1672w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">The sandbox is a gate with a form. What is written on the form is the part that matters later.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">In the sandbox you can send only to verified email addresses and domains, or to the SES mailbox simulator. The caps are 200 messages per 24-hour period and 1 message per second. Account-level suppression bulk actions and the suppression list API are also disabled.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">That last restriction is worth noticing early: the tooling for managing bad addresses is switched off in exactly the phase where you would learn to use it.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">What the production access request asks for<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">From the Account dashboard you choose <strong>Request production access<\/strong>. According to <a href=\"https:\/\/docs.aws.amazon.com\/ses\/latest\/dg\/request-production-access.html\" target=\"_blank\" rel=\"noopener\">AWS&#8217;s own documentation<\/a>, the request requires:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Mail type<\/strong> \u2014 marketing or transactional, based on the majority of your mail<\/li>\n\n\n\n<li><strong>Website URL<\/strong> \u2014 so AWS can understand your content<\/li>\n\n\n\n<li><strong>Additional contacts<\/strong> \u2014 up to four addresses for account communications<\/li>\n\n\n\n<li><strong>Preferred contact language<\/strong> \u2014 English or Japanese<\/li>\n\n\n\n<li><strong>An acknowledgement<\/strong> \u2014 that you only send to individuals who explicitly requested email, and that you have a process for handling bounce and complaint notifications<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">AWS Support gives an initial response within 96 hours, and you cannot edit your details while a review is in progress. Verifying a domain before you submit helps the request move faster.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># The same request from the CLI\naws sesv2 put-account-details \\\n  --production-access-enabled \\\n  --mail-type TRANSACTIONAL \\\n  --website-url https:\/\/example.com \\\n  --additional-contact-email-addresses info@example.com \\\n  --contact-language EN<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Quick Fix<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Production Access Request Is Taking Too Long<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Verify your sending domain before submitting, not after \u2014 AWS notes this speeds approval<\/li>\n\n\n\n<li>Give a real, reachable website URL that describes what the mail is for<\/li>\n\n\n\n<li>Describe your use case specifically; &#8220;transactional email&#8221; alone explains nothing<\/li>\n\n\n\n<li>Expect an initial response within 96 hours, and do not edit details mid-review<\/li>\n\n\n\n<li>Say concretely how you handle bounces and complaints \u2014 vagueness here invites follow-up questions<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">The Acknowledgement Most People Tick Without Reading<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">That final checkbox is the pivot of this whole article. You are stating that you have a process for handling bounce and complaint notifications \u2014 and SES holds you to it afterwards, numerically.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This is the structural difference between SES and a managed email service. SES gives you the sending infrastructure at close to cost. The deliverability work that other providers absorb \u2014 suppressing bad addresses, processing complaints, keeping your metrics clean \u2014 remains yours.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">That is a legitimate trade, and for teams with the engineering capacity it is an excellent one. It only goes wrong when nobody realises a trade was made.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">The Thresholds That Actually Govern Your Account<\/h2>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img decoding=\"async\" width=\"1024\" height=\"683\" src=\"https:\/\/photonconsole.com\/blog\/wp-content\/uploads\/2026\/10\/Photon-Console_-Two-Metrics-One-Decision-1024x683.png\" alt=\"Amazon SES bounce and complaint rate thresholds showing the target, under review and sending paused bands for each metric\" class=\"wp-image-506\" style=\"aspect-ratio:1.7777777777777777;width:1200px;height:auto\" srcset=\"https:\/\/photonconsole.com\/blog\/wp-content\/uploads\/2026\/10\/Photon-Console_-Two-Metrics-One-Decision-1024x683.png 1024w, https:\/\/photonconsole.com\/blog\/wp-content\/uploads\/2026\/10\/Photon-Console_-Two-Metrics-One-Decision-300x200.png 300w, https:\/\/photonconsole.com\/blog\/wp-content\/uploads\/2026\/10\/Photon-Console_-Two-Metrics-One-Decision-768x512.png 768w, https:\/\/photonconsole.com\/blog\/wp-content\/uploads\/2026\/10\/Photon-Console_-Two-Metrics-One-Decision.png 1536w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Two metrics, three bands each. The complaint review threshold is one complaint per thousand emails.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Amazon&#8217;s <a href=\"https:\/\/docs.aws.amazon.com\/ses\/latest\/dg\/faqs-enforcement.html\" target=\"_blank\" rel=\"noopener\">sending review process FAQs<\/a> set out the figures explicitly.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Metric<\/th><th>Target<\/th><th>Account under review<\/th><th>Sending may be paused<\/th><\/tr><\/thead><tbody><tr><td>Bounce rate<\/td><td>Below 2%<\/td><td>5% or greater<\/td><td>10% or greater<\/td><\/tr><tr><td>Complaint rate<\/td><td>Below 0.1%<\/td><td>0.1% or greater<\/td><td>0.5% or greater<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Read the complaint row twice. The target is below 0.1%, and review begins <em>at<\/em> 0.1% \u2014 which is one complaint per thousand delivered emails. On a 50,000-email send, 50 people marking it as spam reaches the review threshold.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For transactional mail that is usually comfortable, because people expect a password reset. For anything that drifts towards marketing \u2014 a feature announcement, a re-engagement nudge, a &#8220;your trial is ending&#8221; sequence \u2014 it is a genuinely tight budget.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Four things about these numbers that are not obvious<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The FAQs include caveats that change how you should monitor these metrics, and they are rarely mentioned anywhere else.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>The bounce rate counts only hard bounces.<\/strong> Specifically, hard bounces to domains you have not verified. Temporary failures and bounces caused by blocked IPs do not count toward it. So your internal bounce figure and SES&#8217;s figure can differ substantially.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>The complaint rate only counts feedback-loop complaints.<\/strong> It reflects complaints received through feedback loops, on mail sent to domains that provide that feedback to SES. Complaints at providers without a feedback loop are invisible in this number \u2014 which means the metric understates how people are actually reacting.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Neither rate uses a fixed time window.<\/strong> SES evaluates against a &#8220;representative volume&#8221; of your typical sending rather than a defined period. You therefore cannot reproduce the number by calculating your rate for the last seven days, and a bad single send does not simply age out on a known schedule.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Serious violations skip the review stage.<\/strong> The FAQs note that for serious violations, SES may pause sending without first placing the account under review. The threshold table is not a guaranteed warning sequence.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Common Mistake<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Building a dashboard that computes your own bounce and complaint rates over the last 30 days and treating it as an early-warning system. It is not measuring the same thing SES measures. Your figure probably includes soft bounces that SES excludes, and almost certainly misses complaints from providers with no feedback loop. Use the reputation metrics SES itself reports in the Account dashboard as the number that matters, and treat your own as supplementary.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Quick Fix<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Your Account Has Been Placed Under Review<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Stop any campaign or bulk send immediately \u2014 the representative volume is still accumulating<\/li>\n\n\n\n<li>Identify the send that moved the metric, then suppress every address it hard-bounced<\/li>\n\n\n\n<li>Purge addresses you cannot evidence consent for, rather than defending them<\/li>\n\n\n\n<li>Reply to AWS with the specific cause and the specific change you have made, not a reassurance<\/li>\n\n\n\n<li>Stand up a second sending path for critical transactional mail now, so a pause does not stop password resets<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">What &#8220;Having a Process&#8221; Actually Requires<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">If you intend to run SES properly, this is the work the acknowledgement commits you to. None of it is difficult; all of it is ongoing.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Subscribe to bounce and complaint notifications.<\/strong> Configure SNS topics and consume them, rather than discovering problems from the dashboard.<\/li>\n\n\n\n<li><strong>Suppress automatically.<\/strong> A hard-bounced address must never be sent to again, and that has to happen without a human deciding.<\/li>\n\n\n\n<li><strong>Act on complaints immediately.<\/strong> A complaint is a withdrawal of consent. Stop sending to that address regardless of what your signup records say.<\/li>\n\n\n\n<li><strong>Validate at the point of capture.<\/strong> Most hard bounces are typos that a check at signup would have caught.<\/li>\n\n\n\n<li><strong>Separate transactional from marketing.<\/strong> One sending identity carrying both means a campaign&#8217;s complaint rate can pause your password resets.<\/li>\n\n\n\n<li><strong>Watch the reputation metrics continuously.<\/strong> By the time you are under review, the damage is already in the representative volume.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Our guide to <a href=\"https:\/\/photonconsole.com\/blog\/transactional-email-webhooks-explained-the-complete-engineering-guide-for-reliable-email-event-processing\/\">transactional email webhooks<\/a> covers consuming these events reliably, and <a href=\"https:\/\/photonconsole.com\/blog\/how-to-reduce-email-bounce-rate-for-saas-applications-a-production-infrastructure-guide\/\">reducing your bounce rate<\/a> covers the hygiene side. On PhotonConsole the suppression list and complaint processing are handled for you, so this list describes work you would not be taking on.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Note<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The separation point deserves emphasis because it is the most common way a healthy SES account gets into trouble. Transactional mail has a naturally low complaint rate; marketing mail does not. Sending both through one identity pools the complaint rate, so a single campaign to a stale list can push the combined figure past 0.1% and put the account that sends your OTP codes under review. If you send both, separate the sending identities \u2014 or separate the providers.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Production Quotas and the Region Trap<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Once you are in production, your daily quota and send rate are set for your account based on your use case, and both are adjustable through a quota increase request. AWS does not publish a standard starting figure, so check your own Account dashboard rather than any article quoting a number.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The detail that catches teams out is that <strong>quotas apply per AWS Region<\/strong>. A generous quota in the region you launched in says nothing about a second region you expand into later, and a multi-region deployment needs the request repeated. Sending identities and verifications are also regional.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">There is no regional equivalent on a managed relay \u2014 PhotonConsole credentials work from any region without a separate quota request, which is worth factoring in if you expect to expand geographically. When you do request an SES increase, the request is strongest when your reputation metrics are good and your stated use case matches what you actually send. Asking for a large increase while sitting near a review threshold is asking the wrong question at the wrong time.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">When SES Stops Being Worth the Effort<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Let us be straightforward about the economics, because this is where most comparisons become dishonest.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>SES is cheaper per email than any managed provider, including this one.<\/strong> On raw send price it is very hard to beat, and if your volume is large and you have engineering capacity to spend on email operations, it is often the correct choice. Nothing in this article argues otherwise.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The question is what the per-email price excludes. With SES you are also buying a job: someone has to build the bounce and complaint pipeline, maintain the suppression logic, monitor reputation metrics, separate sending identities, and respond when the account goes under review. That person has a salary.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Consideration<\/th><th>Amazon SES<\/th><th>Managed relay<\/th><\/tr><\/thead><tbody><tr><td>Price per email<\/td><td>Lowest available<\/td><td>Higher per message<\/td><\/tr><tr><td>Bounce and complaint handling<\/td><td>Yours to build and run<\/td><td>Included<\/td><\/tr><tr><td>Suppression list<\/td><td>Yours to maintain<\/td><td>Managed<\/td><\/tr><tr><td>Reputation enforcement<\/td><td>Thresholds with account pause<\/td><td>Provider manages pool reputation<\/td><\/tr><tr><td>Setup to first production send<\/td><td>Verification plus review, up to several days<\/td><td>Credentials on signup<\/td><\/tr><tr><td>Best fit<\/td><td>High volume with engineering capacity<\/td><td>Teams who would rather not own this<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">The honest decision rule: if a developer would spend more than a few hours a month on email operations, compare that time against the price difference at your actual volume. Below a certain volume the maths favours a managed service clearly; above it, SES wins on cost and you should budget the operational work deliberately rather than by accident.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">If You Move the Sending Path<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Because SES offers an SMTP interface, moving away from it is a credential change rather than a rewrite \u2014 provided you used SMTP rather than the AWS SDK.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Before\nSMTP_HOST=email-smtp.us-east-1.amazonaws.com\nSMTP_PORT=587\nSMTP_USER=YOUR_SES_SMTP_USERNAME\nSMTP_PASS=YOUR_SES_SMTP_PASSWORD\n\n# After\nSMTP_HOST=smtp.photonrelay.com\nSMTP_PORT=587\nSMTP_USER=your_project_api_user\nSMTP_PASS=your_secret_api_key<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">If you used <code>SendEmail<\/code> through the SDK instead, the sending code needs replacing \u2014 which is the practical argument for integrating over SMTP even when a provider offers a native SDK.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Take your suppression list with you. Whatever you have accumulated about addresses that hard-bounced is real deliverability value, and starting a new sending path by mailing those addresses again undoes the move immediately.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>TXT    @                    v=spf1 include:relay.photonconsole.com ~all\nCNAME  photon._domainkey    dkim.photonconsole.com<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">During a parallel run, authorise both in a single SPF record and remove the old include only once the old path is retired. One domain gets one SPF record, and each <code>include<\/code> consumes part of the ten-lookup budget that <a href=\"https:\/\/datatracker.ietf.org\/doc\/html\/rfc7208\" target=\"_blank\" rel=\"noopener\">RFC 7208<\/a> allows.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Receivers including <a href=\"https:\/\/support.google.com\/mail\/answer\/81126\" target=\"_blank\" rel=\"noopener\">Gmail<\/a> expect aligned SPF and DKIM on transactional mail. Our guide to <a href=\"https:\/\/photonconsole.com\/blog\/spf-dkim-dmarc-explained-simply\/\">SPF, DKIM and DMARC<\/a> covers alignment, and the free <a href=\"https:\/\/www.photonconsole.com\/email-deliverability-checker.php\">email deliverability checker<\/a> shows what your domain publishes today.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A <a href=\"https:\/\/www.photonconsole.com\/relay.php\">reliable SMTP provider<\/a> that manages suppression and reputation on your behalf removes the operational commitment rather than the sending capability \u2014 <a href=\"https:\/\/www.photonconsole.com\/pricing.php\">pay-as-you-use pricing<\/a> with 5,000 free emails a month is enough to run the new path alongside SES before deciding anything.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Pro Tips<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Trust the SES dashboard metrics over your own.<\/strong> They are calculated differently, and theirs are the ones that trigger a review.<\/li>\n\n\n\n<li><strong>Separate transactional and marketing identities on day one.<\/strong> Retrofitting this after a review has started is painful.<\/li>\n\n\n\n<li><strong>Treat a complaint as consent withdrawn.<\/strong> Suppress immediately, whatever your records say about signup.<\/li>\n\n\n\n<li><strong>Validate addresses at capture.<\/strong> It is the cheapest bounce-rate reduction available and it happens before you send.<\/li>\n\n\n\n<li><strong>Repeat quota requests per region.<\/strong> Quotas, verifications and identities are all regional.<\/li>\n\n\n\n<li><strong>Verify authentication before any cutover.<\/strong> <a href=\"https:\/\/mxtoolbox.com\/\" target=\"_blank\" rel=\"noopener\">MXToolbox<\/a> checks the combined record, and <a href=\"https:\/\/www.mail-tester.com\/\" target=\"_blank\" rel=\"noopener\">Mail Tester<\/a> scores a real send end to end.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Related Reading<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/photonconsole.com\/blog\/best-amazon-ses-alternatives-in-2026-an-infrastructure-level-comparison-for-engineering-teams\/\">Best Amazon SES alternatives<\/a> \u2014 an infrastructure-level comparison if you have decided to move<\/li>\n\n\n\n<li><a href=\"https:\/\/photonconsole.com\/blog\/sendgrid-free-tier-limits\/\">SendGrid free tier limits<\/a> \u2014 the same decision from a different starting point<\/li>\n\n\n\n<li><a href=\"https:\/\/photonconsole.com\/blog\/how-to-reduce-email-bounce-rate-for-saas-applications-a-production-infrastructure-guide\/\">Reducing email bounce rate<\/a> \u2014 the hygiene work the thresholds demand<\/li>\n\n\n\n<li><a href=\"https:\/\/photonconsole.com\/blog\/email-ip-warming-explained-the-complete-engineering-guide-for-transactional-email-infrastructure\/\">IP warming explained<\/a> for anyone considering a dedicated IP<\/li>\n\n\n\n<li><a href=\"https:\/\/photonconsole.com\/blog\/dedicated-ip-vs-shared-ip-for-transactional-email-which-should-engineering-teams-choose-in-2026\/\">Dedicated versus shared IP<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/photonconsole.com\/blog\/aws-ec2-port-25-blocked\/\">AWS EC2 port 25 blocked<\/a> if your application also runs on EC2<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Frequently Asked Questions<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">What are the Amazon SES sandbox limits?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">You can send only to verified addresses and domains or the mailbox simulator, with a maximum of 200 messages per 24-hour period and 1 message per second.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">How long does SES production access take?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">AWS Support provides an initial response within 96 hours. Verifying your sending domain before submitting helps, and you cannot edit your details while the review is in progress.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">What is the default SES sending quota after leaving the sandbox?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">AWS does not publish a fixed figure \u2014 the documentation says both the daily quota and send rate vary by use case. Check your own Account dashboard, and remember the values are per region.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">What bounce rate will get my SES account suspended?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">A bounce rate of 5% or greater places the account under review, and 10% or greater may pause sending. AWS recommends staying below 2%.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">What complaint rate does SES allow?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Below 0.1% is the target. At 0.1% or greater the account goes under review, and at 0.5% or greater sending may be paused. That review threshold is one complaint per thousand emails.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Does my own bounce rate calculation match SES&#8217;s?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Probably not. SES counts only hard bounces to unverified domains and excludes temporary failures, and its complaint figure only reflects feedback-loop data. It also uses a representative volume rather than a fixed window.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Is SES cheaper than a managed email provider?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Per email, yes, and by a clear margin. The comparison changes once you include the engineering time to build and run bounce handling, suppression and reputation monitoring, which a managed service includes.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Can I use SES for marketing and transactional email together?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">You can, but pooling them means a campaign&#8217;s complaint rate affects the identity sending your password resets. Separate the sending identities, or the providers.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The SES sandbox is a form and a wait. The real limits are the two percentages in Amazon&#8217;s enforcement FAQs: 5% bounce or 0.1% complaint puts your account under review, and 10% or 0.5% may stop it sending altogether. Those figures are enforced against metrics Amazon calculates differently from how you probably calculate them, over a window it does not define, and for serious violations without a warning first.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">That is not a criticism of SES. It is the shape of the product. You get sending infrastructure at close to cost, and in exchange you own the deliverability operation \u2014 which is exactly what the acknowledgement in the production access request says you will do.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The decision is therefore not about price per email, where SES wins. It is about whether owning that operation is a good use of your team. If it is, budget the work explicitly and build the bounce pipeline before you need it. If it is not, a managed <a href=\"https:\/\/www.photonconsole.com\/\">email delivery service<\/a> takes on the suppression, the complaint processing and the pool reputation as part of what you are paying for \u2014 and the switch, if you integrated over SMTP, is four environment variables.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Read More<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/www.photonconsole.com\/email-deliverability-checker.php\">Free Email Deliverability Checker<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.photonconsole.com\/amazon-ses-alternative.php\">PhotonConsole as an Amazon SES Alternative<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/photonconsole.com\/blog\/transactional-email-webhooks-explained-the-complete-engineering-guide-for-reliable-email-event-processing\/\">Transactional Email Webhooks Explained<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/photonconsole.com\/blog\/improve-email-deliverability\/\">How to Improve Email Deliverability<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/photonconsole.com\/blog\/spf-dkim-dmarc-explained-simply\/\">SPF, DKIM and DMARC Explained Simply<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.photonconsole.com\/relay.php\">PhotonRelay: SMTP Relay Service<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.photonconsole.com\/pricing.php\">PhotonConsole Pricing<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Amazon SES is the cheapest way to send email at volume, and the sandbox is the part everyone worries about. Two hundred messages a day, verified recipients only, one message per second \u2014 restrictive enough that getting out of it feels like the milestone. It is not the milestone. Getting out of the sandbox takes [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":504,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[560,5,559],"class_list":["post-503","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-email-deliverability","tag-but-the-real-limits-are-the-bounce-and-complaint-thresholds-here-is-what-triggers-review-and-a-pause","tag-email-deliverability","tag-ses-sandbox-is-200-a-day-and-1-a-second"],"_links":{"self":[{"href":"https:\/\/photonconsole.com\/blog\/wp-json\/wp\/v2\/posts\/503","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/photonconsole.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/photonconsole.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/photonconsole.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/photonconsole.com\/blog\/wp-json\/wp\/v2\/comments?post=503"}],"version-history":[{"count":1,"href":"https:\/\/photonconsole.com\/blog\/wp-json\/wp\/v2\/posts\/503\/revisions"}],"predecessor-version":[{"id":507,"href":"https:\/\/photonconsole.com\/blog\/wp-json\/wp\/v2\/posts\/503\/revisions\/507"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/photonconsole.com\/blog\/wp-json\/wp\/v2\/media\/504"}],"wp:attachment":[{"href":"https:\/\/photonconsole.com\/blog\/wp-json\/wp\/v2\/media?parent=503"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/photonconsole.com\/blog\/wp-json\/wp\/v2\/categories?post=503"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/photonconsole.com\/blog\/wp-json\/wp\/v2\/tags?post=503"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}