Configurar Amazon SES por SMTP para tu newsletter autoalojada

Para enviar una newsletter autoalojada a través de Amazon SES por SMTP, verificas tu dominio en una región de AWS, publicas los registros de Easy DKIM y MAIL FROM, solicitas el acceso de producción, creas credenciales SMTP en esa misma región e introduces en tu plataforma de newsletter el host email-smtp.<región>.amazonaws.com, el puerto 587 con STARTTLS y esas credenciales. La mayoría de los fallos vienen de mezclar regiones, usar claves de acceso de IAM en lugar de credenciales SMTP o no gestionar los rebotes.
¿Qué necesitas antes de conectar Amazon SES por SMTP?
Necesitas una cuenta de AWS, un dominio cuyo DNS controles, una región de AWS elegida y una aplicación que envíe por SMTP autenticado con TLS. Todo en SES —identidades, estado del sandbox, cuotas, lista de supresión y credenciales SMTP— existe por región, así que elige primero la región y úsala en todas partes.
Para un público europeo las opciones habituales son Fráncfort (eu-central-1), Irlanda (eu-west-1), París (eu-west-3) o Estocolmo (eu-north-1). Revisa la lista de endpoints SMTP antes de decidir: según la referencia de endpoints de AWS, varias regiones donde funciona SES, como Milán y Zúrich, no tienen endpoint SMTP, y la región de España (eu-south-2) tampoco aparece en la lista SMTP. En los ejemplos la región es eu-central-1 y el dominio example.com.
| Ajuste | Valor para SES | Notas |
|---|---|---|
| Host SMTP | email-smtp.eu-central-1.amazonaws.com | Cambia la región; debe coincidir con las credenciales |
| Puerto (STARTTLS) | 587 (también 25, 2587) | Cifrado llamado normalmente «TLS» o «STARTTLS» |
| Puerto (TLS directo) | 465 (también 2465) | Cifrado llamado normalmente «SSL» o «SMTPS» |
| Autenticación | Usuario SMTP + contraseña SMTP | Se crean en SES → SMTP settings y se muestran una sola vez |
| Tamaño máximo del mensaje | 40 MB | Tras la codificación base64, por SMTP o API v2 |
| Destinatarios por mensaje | 50 | Las plataformas de newsletter envían un mensaje por destinatario |
Datos de noviembre de 2026. Fuentes: Conexión al endpoint SMTP de SES, cuotas de SES.
SES solo acepta conexiones cifradas. Si tu servidor está en EC2, el puerto 25 está limitado por defecto: usa 587 o 465. En un VPS de Arsys, IONOS o Hostinger conviene comprobar también que el tráfico saliente por esos puertos no esté bloqueado.
¿Cómo sales del sandbox de Amazon SES?
Envías una solicitud de acceso de producción desde la consola de SES (Account dashboard → Get set up → Request production access) o con la AWS CLI, y AWS da una primera respuesta en un plazo de 96 horas. Hasta entonces solo puedes enviar a direcciones verificadas y al simulador de buzones de SES.
Las reglas del sandbox son estrictas: como máximo 200 mensajes cada 24 horas, como máximo 1 mensaje por segundo, los destinatarios deben estar verificados y las acciones masivas sobre la lista de supresión están desactivadas. El estado del sandbox es por región: tener acceso de producción en Fráncfort no te sirve en Irlanda.
La solicitud pide el tipo de correo (Marketing o Transactional), la URL de tu web, hasta cuatro direcciones de contacto y el idioma de contacto (inglés o japonés), y debes confirmar que solo envías a personas que lo pidieron y que procesas rebotes y quejas. AWS recomienda verificar el dominio antes de pedirlo, porque agiliza la aprobación. Una newsletter es correo de marketing; marcar «Transactional» para parecer menos arriesgado solo crea una incoherencia que el revisor verá.
aws sesv2 put-account-details \
--production-access-enabled \
--mail-type MARKETING \
--website-url https://example.com \
--additional-contact-email-addresses ops@example.com \
--contact-language EN \
--region eu-central-1
# Later: sandbox status, quota and enforcement status
aws sesv2 get-account --region eu-central-1
💡 Consejo: Muestra en la web que indiques en la solicitud cómo consigues las direcciones: un formulario de alta visible con doble opt-in, un enlace de baja en cada correo y una política de privacidad que explique el tratamiento según el RGPD. El revisor valora el caso de uso, y una página que puede abrir responde a casi todas sus preguntas.
¿Qué registros DNS necesita Amazon SES para tu dominio?
SES necesita tres registros CNAME de Easy DKIM para verificar el dominio y firmar tus correos; para una alineación completa añades un subdominio MAIL FROM con un registro MX y uno SPF, además de un registro DMARC en tu dominio remitente. Solo con los registros DKIM tu correo ya pasa DMARC gracias a DKIM.
Easy DKIM
Al crear una identidad de dominio, SES genera tres tokens y muestra tres registros CNAME de la forma token._domainkey.example.com → token.dkim.amazonses.com. A partir de ahí, SES firma cada mensaje de ese dominio con una clave de 2048 bits por defecto, y la firma lleva d=example.com, alineado con tu dirección From. SES puede tardar hasta 72 horas en detectar los cambios de DNS. Un dominio verificado te permite enviar desde cualquier dirección y subdominio sin verificarlos uno a uno (Easy DKIM). Si el panel DNS de tu proveedor añade el dominio al nombre automáticamente, escribe solo la parte anterior.
Dominio MAIL FROM propio
Por defecto, el remitente del sobre (Return-Path) es un subdominio de amazonses.com. SPF pasa, pero para amazonses.com y no para ti, así que no cuenta para DMARC. La solución es un dominio MAIL FROM propio, como bounce.example.com. Debe ser un subdominio que no uses ni para enviar ni para recibir correo, con exactamente un registro MX que apunte a feedback-smtp.<región>.amazonses.com. En «Behavior on MX failure», «Use default MAIL FROM domain» mantiene el envío si el MX falla; «Reject message» lo detiene con el error MailFromDomainNotVerified.
; Easy DKIM: three CNAME records, tokens come from the SES console
tok1._domainkey.example.com. CNAME tok1.dkim.amazonses.com.
tok2._domainkey.example.com. CNAME tok2.dkim.amazonses.com.
tok3._domainkey.example.com. CNAME tok3.dkim.amazonses.com.
; Custom MAIL FROM (envelope sender) on a dedicated subdomain
bounce.example.com. MX 10 feedback-smtp.eu-central-1.amazonses.com.
bounce.example.com. TXT "v=spf1 include:amazonses.com ~all"
; DMARC for the From domain: start with monitoring
_dmarc.example.com. TXT "v=DMARC1; p=none; rua=mailto:dmarc-reports@example.com"
# Create the domain identity in the Region you will send from
aws sesv2 create-email-identity --email-identity example.com --region eu-central-1
# Use bounce.example.com as the MAIL FROM domain
aws sesv2 put-email-identity-mail-from-attributes \
--email-identity example.com \
--mail-from-domain bounce.example.com \
--behavior-on-mx-failure USE_DEFAULT_VALUE \
--region eu-central-1
# Check DKIM and MAIL FROM status
aws sesv2 get-email-identity --email-identity example.com --region eu-central-1
| Cabecera / comprobación | Sin MAIL FROM propio | Con bounce.example.com |
|---|---|---|
| From | news@example.com | news@example.com |
| Return-Path (sobre) | …@…amazonses.com | …@bounce.example.com |
| SPF alineado con From | ✗ No | ✓ Sí (relajado) |
| DKIM d= alineado con From | ✓ Sí (Easy DKIM) | ✓ Sí (Easy DKIM) |
| Resultado DMARC | ✓ Pass por DKIM | ✓ Pass por DKIM y SPF |
Datos de noviembre de 2026, según la documentación de SES sobre MAIL FROM y DMARC.
Las directrices para remitentes de Gmail exigen SPF, DKIM y un registro DMARC a quien envíe más de 5.000 mensajes al día a direcciones de Gmail, con el dominio From alineado con SPF o DKIM; el correo de marketing debe permitir la baja con un clic y la tasa de spam debe mantenerse por debajo del 0,3 %. SES con Easy DKIM cubre la autenticación; las cabeceras de baja y la calidad de la lista son tarea de tu plataforma. Si ya tienes SPF en el dominio raíz para tu proveedor de correo, no tienes que añadir SES ahí: el SPF de SES va en el subdominio MAIL FROM. El panorama completo está en nuestra guía de entregabilidad para remitentes autoalojados (en inglés).
¿Credenciales SMTP o claves de acceso de IAM? Qué va en tu aplicación
Tu plataforma de newsletter necesita credenciales SMTP de SES: un usuario SMTP y una contraseña SMTP creados en SES → SMTP settings → Create SMTP credentials. Un ID de clave de acceso de IAM con su clave secreta en un formulario SMTP termina en 535 Authentication Credentials Invalid.
Por detrás, la consola crea un usuario de IAM en el grupo AWSSESSendingGroupDoNotRename, que permite ses:SendRawEmail. La contraseña se muestra una sola vez: descarga el CSV o guárdala en un gestor de contraseñas en ese momento. Para cambiarla, borras el usuario de IAM y creas credenciales nuevas. La guía de credenciales de SES insiste en dos puntos que explican la mayoría de fallos de inicio de sesión: las credenciales son únicas de cada región y la contraseña SMTP no es la clave de acceso secreta.
También puedes derivar una contraseña SMTP de la clave secreta de un usuario de IAM existente con el algoritmo HMAC-SHA256 que AWS publica junto con un script en Python; el usuario SMTP es entonces el ID de la clave. Las credenciales temporales (STS, roles) no funcionan con SMTP. La política mínima para un usuario de envío dedicado es esta:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "ses:SendRawEmail",
"Resource": "*"
}
]
}
Si quieres restringirla más, cambia "*" por el ARN de tu identidad de dominio. Usa un usuario SMTP por aplicación para poder revocar una contraseña filtrada sin tocar nada más.
Nota: En julio de 2026 AWS añadió una configuración SMTP guiada mediante Mail Manager que crea un endpoint y credenciales descargables. AWS la orienta al correo transaccional y el anuncio no da precios, así que para una newsletter el endpoint clásico descrito aquí sigue siendo la opción más sencilla.
¿Cómo gestionar los rebotes y las quejas de SES?
Activa la lista de supresión a nivel de cuenta para rebotes y quejas, y asegúrate de que tu plataforma de newsletter también recibe cada rebote y cada queja, ya sea mediante el reenvío por correo a un buzón que lea o mediante notificaciones de Amazon SNS a código propio. AWS pone la cuenta en revisión con una tasa de rebote del 5 % o de quejas del 0,1 %.
AWS recomienda quedarse por debajo del 2 % de rebotes y del 0,1 % de quejas. Solo cuentan los rebotes duros a dominios que no has verificado, y SES calcula la tasa sobre un «volumen representativo», no sobre un periodo de calendario, así que no puedes reproducirla exactamente con tus datos: vigila Reputation.BounceRate y Reputation.ComplaintRate en la consola o en CloudWatch.
Las tres vías de notificación
- Reenvío por correo (email feedback forwarding): activado por defecto. Con SMTP, SES reenvía los avisos de rebote y queja a la dirección de la cabecera
Return-Patho, si no la hay, a la dirección MAIL FROM (destino del reenvío). Esa dirección debe estar en tu dominio verificado. Es la vía que usan las plataformas que leen un buzón de rebotes por IMAP. - Amazon SNS: envía notificaciones JSON (rebote, queja, entrega) a un tema por identidad. Puedes suscribir un endpoint HTTPS, pero debe confirmar la suscripción y entender el formato JSON de SES; úsalo si tu plataforma documenta SES/SNS o si escribes un pequeño receptor.
- Publicación de eventos mediante configuration sets: envía eventos más detallados a SNS, CloudWatch o Firehose; útil a gran volumen, pero cada mensaje debe llevar el configuration set.
La lista de supresión de la cuenta es una red de seguridad, no un sustituto. SES mantiene ahí una dirección hasta que la quitas, solo entran los rebotes duros y Gmail no envía datos de quejas a SES: los usuarios de Gmail que pulsan «Denunciar spam» nunca aparecen. Tu propia lista debe marcar igualmente a esos suscriptores como rebotados o dados de baja; si no, cada envío a ellos consume tu cuota diaria.
# Suppress addresses that hard-bounce or complain (account level, per Region)
aws sesv2 put-account-suppression-attributes \
--suppressed-reasons BOUNCE COMPLAINT --region eu-central-1
# What is on the list?
aws sesv2 list-suppressed-destinations --region eu-central-1
¿A qué velocidad puedes enviar y cuánto cuesta Amazon SES?
Con acceso de producción, cada región tiene dos límites —un máximo de destinatarios en una ventana móvil de 24 horas y una velocidad máxima de envío por segundo— y el correo saliente cuesta 0,10 USD por cada 1.000 correos. Los valores dependen de tu solicitud y caso de uso; los ves en la consola o con aws sesv2 get-account.
Las cuotas cuentan destinatarios, no mensajes: un correo a diez direcciones consume diez. Puedes superar la velocidad en ráfagas cortas, pero no de forma sostenida. Si te pasas, SMTP responde 454 Throttling failure: Maximum sending rate exceeded o 454 Throttling failure: Daily message quota exceeded, errores temporales que se reintentan con esperas crecientes. La documentación actual de cuotas de SES describe los aumentos como algo que solicitas, junto con el acceso de producción o más tarde mediante Service Quotas o un caso de soporte, explicando tu volumen, el origen de la lista y la gestión de rebotes. Pídelo unos días antes de un envío grande.
| Concepto | Precio (USD) | Cuándo se aplica |
|---|---|---|
| Correo saliente | 0,10 USD por 1.000 correos | Siempre |
| Datos de adjuntos | 0,12 USD por GB | Solo con adjuntos |
| IP dedicada (estándar) | 24,95 USD por IP al mes | Opcional |
| IP dedicadas (administradas) | 15 USD al mes + 0,08 USD por 1.000 correos (primeros 10 M) | Opcional |
| Virtual Deliverability Manager | 0,07 USD por 1.000 correos (primeros 10 M) | Opcional |
Datos de noviembre de 2026, precios de lista de la página de precios de Amazon SES. AWS factura en USD; el importe en EUR depende del tipo de cambio. Los clientes nuevos de AWS pueden recibir créditos del plan gratuito; consulta las condiciones vigentes en la página.
Ejemplo de cálculo
Una lista de 10.000 suscriptores confirmados con una newsletter semanal son unos 4,33 envíos al mes, alrededor de 43.300 correos. A 0,10 USD por 1.000, son unos 4,33 USD al mes en IP compartida y sin adjuntos. Una IP dedicada estándar lo sube a unos 29,28 USD; a este volumen rara vez compensa, porque una IP dedicada necesita tráfico constante para construir su propia reputación. La comparación con planes SaaS para 10.000, 50.000 y 100.000 contactos está en lo que cuesta de verdad enviar a 10k, 50k y 100k contactos (en inglés).
¿Cómo conectas SES a una plataforma autoalojada y envías una prueba?
Introduce el host SMTP regional, el puerto 587 con STARTTLS (o 465 con TLS), el usuario y la contraseña SMTP y una dirección From de tu dominio verificado; después envía una prueba al simulador de buzones de SES antes de escribir a personas reales. Haz la prueba desde el servidor que enviará, no desde tu portátil.
- Comprueba la ruta de red
Desde el servidor, confirma que el puerto está abierto y que SES ofrece STARTTLS. Un cortafuegos que bloquea el 587 saliente es una causa habitual de timeouts en VPS nuevos.
- Autentícate una vez fuera de la aplicación
Una prueba desde la línea de comandos separa los problemas de credenciales de los de la aplicación.
success@simulator.amazonses.comacepta correo sin afectar a tu reputación;bounce@simulator.amazonses.comycomplaint@simulator.amazonses.comsirven para probar la gestión de avisos. - Configura la plataforma
Mismo host, puerto y credenciales; define la dirección y el nombre del remitente y una velocidad de envío por debajo de tu máximo en SES.
- Envíate un correo y lee las cabeceras
En Gmail abre «Mostrar original» y comprueba
spf=pass,dkim=passconheader.d=example.comydmarc=pass.
# Port reachable and STARTTLS offered? (type QUIT to leave)
openssl s_client -crlf -quiet -starttls smtp \
-connect email-smtp.eu-central-1.amazonaws.com:587
# Full authenticated test with swaks
swaks --server email-smtp.eu-central-1.amazonaws.com --port 587 --tls \
--auth LOGIN --auth-user "$SES_SMTP_USER" --auth-password "$SES_SMTP_PASS" \
--from newsletter@example.com --to success@simulator.amazonses.com \
--header "Subject: SES SMTP test"
Cómo hacerlo en NetSendo
NetSendo conecta Amazon SES como un buzón SMTP normal en Ajustes → Buzones (Settings → Mailboxes): host SMTP, puerto (587 por defecto), cifrado (TLS para STARTTLS en 587, SSL para 465), usuario y contraseña, además de la dirección y el nombre del remitente, un Reply-To opcional, los tipos de mensaje que puede enviar el buzón (campañas, autorespondedores, correos del sistema) y un límite diario opcional. La prueba de conexión envía un breve correo «Connection Test» a la dirección del remitente del buzón, que ya está verificada en SES, así que también funciona en el sandbox. Los tipos de buzón están en la documentación de configuración y la instalación de la instancia en el inicio rápido.
NetSendo no impone límites de envío propios; los que cuentan son las cuotas de SES. Dos ajustes te ayudan a respetarlas: el límite por minuto de cada lista en su pestaña CRON (mantenlo por debajo de tu velocidad de SES × 60) y la gestión de errores SMTP temporales de NetSendo: las respuestas 4xx, como la limitación de velocidad, se reintentan con esperas crecientes, mientras que los errores 5xx permanentes fallan al momento y pasan al procesamiento de rebotes. Para los rebotes, activa en el buzón Bounce Mailbox Monitoring con un buzón IMAP de tu dominio verificado: NetSendo usa entonces esa dirección como remitente del sobre y el reenvío por correo de SES entrega ahí los avisos. Envía una prueba a bounce@simulator.amazonses.com y comprueba que el suscriptor queda marcado como rebotado antes de confiar en ello. La base de suscriptores se queda en tu servidor, lo que ayuda con las obligaciones del RGPD, aunque el cumplimiento depende de cómo lo gestiones todo; AWS, por donde pasan los correos, es un encargado del tratamiento y debe figurar en tu documentación. Esto no es asesoramiento jurídico.
Errores SMTP habituales en Amazon SES y cómo solucionarlos
La mayoría de errores SMTP de SES tienen una de cuatro causas: una identidad sin verificar, un tipo de credenciales equivocado, una región que no coincide o una cuota. Los códigos que empiezan por 4 son temporales y se reintentan; los que empiezan por 5 requieren antes corregir la configuración.
| Respuesta | Causa | Solución |
|---|---|---|
554 Message rejected: Email address is not verified. The following identities failed the check in region … | From/Return-Path sin verificar en esa región o, en el sandbox, un destinatario sin verificar | Verifica el dominio en la región que indica el error; en el sandbox verifica el destinatario o pide acceso de producción |
535 Authentication Credentials Invalid | Clave de IAM usada como usuario SMTP, una errata o credenciales de otra región | Crea credenciales en SES → SMTP settings para la región del host |
530 Authentication required | El cliente no se autenticó | Activa la autenticación SMTP en la aplicación |
454 Throttling failure: Maximum sending rate exceeded | Más mensajes por segundo de los permitidos | Reduce la velocidad; reintenta con espera |
454 Throttling failure: Daily message quota exceeded | Cuota de 24 horas agotada | Espera o pide una cuota mayor; no envíes a direcciones suprimidas |
554 Access denied: User … is not authorized to perform ses:SendRawEmail | El usuario SMTP perdió su política o está limitada a otra identidad | Asigna ses:SendRawEmail mediante el grupo de envío |
421 Too many concurrent SMTP connections | Demasiadas sesiones SMTP en paralelo | Menos workers de cola o conexiones; reintenta |
MailFromDomainNotVerified | Falta el MX del MAIL FROM con el comportamiento «Reject message» | Publica exactamente un registro MX para el subdominio MAIL FROM |
Datos de noviembre de 2026. Textos de respuesta de Amazon SES SMTP issues.
Dos problemas no aparecen como código SMTP. Las conexiones que se quedan colgadas hasta el timeout suelen indicar un puerto saliente bloqueado o, con menos frecuencia, una MTU de red superior a 1500 bytes. Además, las sesiones SMTP largas se cortan cuando SES sustituye las instancias detrás de su balanceador, así que el remitente debe reconectar tras un número fijo de mensajes en lugar de mantener una sesión abierta durante horas.
🎯 Consejos de experto
Pon la región en el host SMTP, la identidad, el perfil de la CLI y el nombre del archivo de credenciales. Mezclar regiones explica buena parte de los errores «verificado pero rechazado» y «credentials invalid».
Una newsletter desde news.example.com separa su reputación de las facturas y los restablecimientos de contraseña del dominio raíz.
Pasa a quarantine o reject solo cuando los informes agregados muestren que todas las fuentes legítimas pasan.
Una alarma de CloudWatch en Reputation.BounceRate al 2 % y Reputation.ComplaintRate al 0,08 % te da margen antes de los umbrales de revisión.
Importar una lista antigua directamente en una cuenta nueva de SES es el camino más rápido hacia una revisión. Envía primero a los suscriptores activos recientes.
Preguntas frecuentes
¿Puedo usar mi clave de acceso de AWS como usuario SMTP en Amazon SES?
No. SES necesita credenciales SMTP creadas en SES → SMTP settings o una contraseña SMTP derivada de la clave secreta con el algoritmo que publica AWS. Usar la clave secreta como contraseña devuelve 535 Authentication Credentials Invalid.
¿Qué puerto uso para la interfaz SMTP de Amazon SES?
El 587 con STARTTLS o el 465 con TLS. También funcionan 25, 2587 y 2465, pero el 25 está limitado por defecto en EC2.
¿Cuánto se tarda en salir del sandbox de Amazon SES?
AWS da una primera respuesta a la solicitud de acceso de producción en un plazo de 96 horas. Puede tardar más si el revisor pide más información sobre tu lista y la gestión de rebotes.
¿Necesito un dominio MAIL FROM propio si ya uso Easy DKIM?
No para pasar DMARC, porque la firma de Easy DKIM ya está alineada con tu dominio From. Un MAIL FROM propio añade alineación SPF y pone tu dominio en el Return-Path.
¿Cuánto cuesta Amazon SES para una newsletter de 10.000 suscriptores?
A 0,10 USD por 1.000 correos, una newsletter semanal a 10.000 suscriptores (unos 43.300 correos al mes) cuesta unos 4,33 USD al mes, sin adjuntos ni IP dedicadas.
¿Por qué SES dice que mi dirección no está verificada si el dominio sí lo está?
La identidad está verificada en otra región distinta del endpoint SMTP al que te conectas, o la cuenta sigue en el sandbox y el destinatario no está verificado. El mensaje de error indica la región comprobada.
Fuentes
- Amazon SES: Obtaining SMTP credentials
- Amazon SES: Request production access
- Amazon SES: Using a custom MAIL FROM domain
- Amazon SES: Sending review process FAQs
- Amazon SES: SMTP issues and response codes
- Amazon SES endpoints and quotas
- Amazon SES pricing
- Google: Email sender guidelines
Gestiona tu newsletter en tu propio servidor
NetSendo conecta Amazon SES como buzón SMTP y tus datos de suscriptores se quedan en tu propia infraestructura.

