Amazon SES
AWS SES timeout means the client can't reach the SES SMTP endpoint — often EC2's port-25 block. Switch to port 587 or 465 and open those ports in your VPC.
Updated Jul 1, 2026
The short answer
An "AWS SES timeout" means your client couldn't complete a TCP/TLS exchange with the Amazon SES SMTP endpoint (e.g. email-smtp.us-east-1.amazonaws.com) in time. The most common cause is EC2's default block on outbound port 25. Fix it by sending over port 587 (STARTTLS) or 465 (TLS Wrapper), opening those ports in your security group and network ACLs, and confirming outbound internet access.
An "AWS SES timeout" is not an SMTP reply code — it's a client-side connection failure (a TCP connect or read timeout) raised when your application can't complete the handshake with the Amazon SES SMTP endpoint such as email-smtp.us-east-1.amazonaws.com. It is distinct from the SMTP-level 451 Timeout waiting for data from client, which SES returns when an already-open session sits idle too long. This page covers the connection timeout.
Per the Amazon SES SMTP troubleshooting guide, timeouts connecting to the SES SMTP interface come from a small set of network causes:
email-smtp.<region>.amazonaws.com); pointing at the wrong host or a region you aren't set up in produces a timeout.1. Use port 587 or 465 instead of 25. Both are valid for SES and neither is subject to the EC2 port 25 restriction. Use 587 (STARTTLS) or 465 (TLS Wrapper / implicit TLS) — SES also exposes 2587 and 2465 as alternates.
2. Test raw TCP connectivity from the sending host, replacing the port as needed:
telnet email-smtp.us-east-1.amazonaws.com 587
If telnet hangs, the network is blocking the port — the connection never reaches SES.
3. Test the TLS handshake if TCP connects but sending still times out:
openssl s_client -connect email-smtp.us-east-1.amazonaws.com:465 -crlf -quiet
4. Open the ports in your VPC. Allow outbound TCP 587/465 (or 25) in the instance security group, allow the same outbound in the subnet network ACL, and — because network ACLs are stateless — allow inbound TCP on the ephemeral range 1024–65535 so return traffic isn't dropped.
5. Confirm internet egress. A private subnet needs a NAT gateway (with a route) or an SES interface VPC endpoint; a public subnet needs an internet gateway and a public/Elastic IP.
6. Set MTU to 1500 bytes on the sending host if timeouts persist after the network checks pass.
7. Recycle SMTP connections. Don't hold one connection open indefinitely — open a fresh connection after a fixed number of messages or elapsed time, and add retry logic with exponential backoff so transient 4xx/network errors are retried rather than dropped.
If you reach SES through Courier, you don't manage SMTP sockets at all — Courier calls the SES API over HTTPS, sidestepping the port 25 block and ELB connection-rotation issues entirely.
References
FAQ
Amazon EC2 restricts outbound (egress) traffic on port 25 by default for all instances, so connections to the SES SMTP endpoint on port 25 hang and time out. Switch to port 587 (STARTTLS) or 465 (TLS Wrapper), which aren't restricted, or submit an EC2 Request to Remove Email Sending Limitations to unblock port 25.
One API, every provider
Courier connects to your email, SMS, and push providers, handles retries and failover, and surfaces delivery errors in plain language.
Last reviewed Jul 1, 2026. Courier is not affiliated with third-party providers; error behavior may vary by implementation.
© 2026 Courier. All rights reserved.