

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Configurar el envío de correo electrónico con Amazon SES
<a name="send-email"></a>

Puede enviar un email con Amazon Simple Email Service (Amazon SES) mediante la consola de Amazon SES, la interfaz Simple Mail Transfer Protocol (SMTP) de Amazon SES o la API de Amazon SES. Normalmente, la consola se utiliza para enviar correos electrónicos de prueba y para administrar su actividad de envío. Para enviar correos electrónicos masivos, se utiliza la interfaz de SMTP o la API. Para obtener información acerca de los precios de email de Amazon SES, consulte [Precios de Amazon SES](https://aws.amazon.com/ses/pricing).
+ Si desea utilizar un paquete de software, una aplicación o un lenguaje de programación habilitado para SMTP a fin de enviar email a través de Amazon SES o integrar Amazon SES con su servidor de email actual, utilice la interfaz de SMTP de Amazon SES. Para obtener más información, consulte [Envío de correo electrónico mediante programación con la interfaz de SMTP de Amazon SES](send-using-smtp-programmatically.md).
+ Si desea llamar a Amazon SES mediante solicitudes HTTP sin procesar, utilice la API de Amazon SES. Para obtener más información, consulte [Uso de la API de Amazon SES para enviar correo electrónico](send-email-api.md).

**importante**  
Cuando envíe un email a varios destinatarios (los destinatarios “To”, “CC” y “BCC”) y la llamada a Amazon SES devuelva un error, se rechaza todo el email y ninguno de los destinatarios recibirá el email. Por lo tanto, recomendamos que envíe un correo electrónico a un destinatario cada vez.

# Uso de la interfaz de SMTP de Amazon SES para enviar correo electrónico
<a name="send-email-smtp"></a>

Para enviar email de producción a través de Amazon SES, puede utilizar la interfaz de Simple Mail Transfer Protocol (SMTP) o la API de Amazon SES. Para obtener más información acerca de la API de Amazon SES, consulte [Uso de la API de Amazon SES para enviar correo electrónico](send-email-api.md). En esta sección, se describe la interfaz de SMTP.

Amazon SES envía correo electrónico a través de SMTP, que es el protocolo de correo electrónico más común en Internet. Puede enviar correo electrónico a través de Amazon SES con una amplia variedad de software y lenguajes de programación habilitados para SMTP para conectarse a la interfaz de SMTP de Amazon SES. En esta sección, se explica cómo obtener las credenciales de SMTP de Amazon SES, cómo enviar email a través de la interfaz de SMTP y cómo configurar varios servidores de correo electrónico y programas de software para utilizar Amazon SES con el fin de enviar correo electrónico.

Para obtener soluciones a problemas comunes que podría encontrar al utilizar Amazon SES a través de la interfaz SMTP, consulte [Problemas de SMTP de Amazon SES](troubleshoot-smtp.md). 

## Requisitos para enviar correo electrónico a través de SMTP
<a name="send-email-smtp-requirements"></a>

Para enviar correo electrónico a través de la interfaz de SMTP de Amazon SES, necesita lo siguiente:
+ La dirección del punto de enlace SMTP. Para obtener una lista de puntos de enlace de SMTP de Amazon SES, consulte [Conexión a un punto de enlace de SMTP de Amazon SES](smtp-connect.md).
+ El número de puerto de la interfaz de SMTP. El número de puerto varía según el método de conexión. Para obtener más información, consulte [Conexión a un punto de enlace de SMTP de Amazon SES](smtp-connect.md).
+ Un nombre de usuario y contraseña de SMTP. Las credenciales de SMTP son exclusivas para cada región de AWS . Si tiene previsto utilizar la interfaz de SMTP para enviar correo electrónico en varias regiones de AWS , necesita credenciales de SMTP para cada región.
**importante**  
Sus credenciales SMTP no son idénticas a sus claves de AWS acceso ni a las credenciales que utiliza para iniciar sesión en la consola Amazon SES. Para obtener información acerca de cómo generar sus credenciales de SMTP, consulte [Obtención de las credenciales de SMTP de Amazon SES](smtp-credentials.md).
+ Software cliente que permite las comunicaciones mediante Transport Layer Security (TLS). Para obtener más información, consulte [Conexión a un punto de enlace de SMTP de Amazon SES](smtp-connect.md).
+ Una dirección de correo electrónico verificada con Amazon SES. Para obtener más información, consulte [Identidades verificadas en Amazon SES](verify-addresses-and-domains.md).
+ Mayores cuotas de envío, si desea enviar grandes cantidades de correo electrónico. Para obtener más información, consulte [Administración de sus límites de envío de Amazon SES](manage-sending-quotas.md).

## Métodos para enviar correo electrónico a través de SMTP
<a name="send-email-methods"></a>

Puede enviar correo electrónico a través de SMTP mediante cualquiera de los métodos siguientes:
+ Si desea configurar cualquier software habilitado para SMTP con el fin de enviar correo electrónico a través de la interfaz de SMTP de Amazon SES, consulte [Envío de correo electrónico a través de Amazon SES mediante paquetes de software](send-email-smtp-software-package.md).
+ Para programar una aplicación para enviar correo electrónico a través de Amazon SES, consulte [Envío de correo electrónico mediante programación con la interfaz de SMTP de Amazon SES](send-using-smtp-programmatically.md).
+ Para configurar su servidor de correo electrónico existente para enviar todo el correo saliente a través de Amazon SES, consulte [Integración de Amazon SES con su servidor de correo electrónico existente](send-email-smtp-existing-server.md).
+ Para interactuar con la interfaz de SMTP de Amazon SES mediante la línea de comandos, lo que puede resultar útil para hacer pruebas, consulte [Prueba de la conexión a la interfaz SMTP de Amazon SES mediante la línea de comandos](send-email-smtp-client-command-line.md).

Para ver una lista de códigos de respuesta de SMTP, consulte [Códigos de respuesta de SMTP devueltos por Amazon SES.](troubleshoot-smtp.md#troubleshoot-smtp-response-codes).

## Información de correo electrónico que se debe facilitar
<a name="smtp-parameters"></a>

Cuando acceda a Amazon SES a través de la interfaz de SMTP, la aplicación cliente de SMTP creará el mensaje, por lo que la información que es necesario proporcionar depende de la aplicación que se utilice. Como mínimo, el intercambio SMTP entre un cliente y un servidor requiere los elementos siguientes: 
+ Dirección de origen
+ Dirección de destino
+ Datos del mensaje

Si utiliza la interfaz de SMTP y tiene habilitado el reenvío de retroalimentación, las notificaciones de rebotes, reclamaciones y entrega se envían a la dirección "MAIL FROM". No se utiliza ninguna dirección "Reply-To" que especifique.



# Obtención de las credenciales de SMTP de Amazon SES
<a name="smtp-credentials"></a>

Necesita las credenciales de SMTP de Amazon SES para acceder a la interfaz de SMTP de SES.

Las credenciales que utiliza para enviar correos electrónicos a través de la interfaz SMTP de SES son exclusivas de cada AWS región. Si utiliza la interfaz de SMTP de SES para enviar correo electrónico en más de una región, deberá generar un conjunto de credenciales de SMTP para cada región que tenga previsto usar.

Su contraseña SMTP es diferente de su clave de acceso AWS secreta. Para obtener más información acerca de las credenciales, consulte [Tipos de credenciales de Amazon SES](send-email-concepts-credentials.md).

**nota**  
Para obtener una lista de los puntos de conexión de SMTP disponibles actualmente, consulte [Puntos de conexión SMTP](https://docs.aws.amazon.com/general/latest/gr/ses.html#ses_smtp_endpoints) en *Referencia general de AWS*. 

## Obtención de credenciales de SMTP de SES con la consola de SES
<a name="smtp-credentials-console"></a>

**Requisito**  
Un usuario de IAM puede crear credenciales de SMTP de SES, pero la política de usuario puede concederle permiso para utilizar el propio IAM, dado que las credenciales de SMTP de SES se crean mediante IAM. La política de IAM debe permitirle realizar las siguientes acciones de IAM: `iam:ListUsers`, `iam:CreateUser`, `iam:CreateAccessKey` e `iam:PutUserPolicy`. Si intenta crear las credenciales SMTP de SES mediante la consola y su usuario de IAM no tiene estos permisos, aparecerá un error que indica que su cuenta *«no está autorizada para realizar iam*:». ListUsers

**importante**  
Las acciones de IAM mencionadas anteriormente tienen el nivel de acceso de [Administración de permisos](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_understand-policy-summary-access-level-summaries.html#access_policies_access-level), que es el nivel de IAM más alto porque permite conceder o modificar permisos de recursos en el servicio. Por lo tanto, para mejorar la seguridad de su AWS cuenta, se recomienda encarecidamente que restrinja o supervise periódicamente estas políticas, que incluyen la clasificación de los niveles de acceso a la gestión de permisos.

**Para crear sus credenciales de SMTP**

1. Inicie sesión en la consola Amazon SES Consola de administración de AWS y ábrala en [https://console.aws.amazon.com/ses/](https://console.aws.amazon.com/ses/).

1. Elija **SMTP settings** (Configuración de SMTP) en el panel de navegación de la izquierda. Se abrirá la página **Simple Mail Transfer Protocol (SMTP) settings** (Configuración del protocolo simple de transferencia de correo [SMTP]).

1. Elija **Create SMTP Credentials** (Crear credenciales SMTP) en la esquina superior derecha. Se abrirá la consola de IAM.

1. (Opcional) Si necesita ver, editar o eliminar los usuarios de SMTP que ya ha creado, elija **Manage my existing SMTP credentials** (Administrar mis credenciales de SMTP existentes) en la esquina inferior derecha. Se abrirá la consola de IAM. Los detalles para administrar las credenciales de SMTP se proporcionan siguiendo estos procedimientos.

1. En **Crear usuario para SMTP**, escriba un nombre para el usuario de SMTP en el campo **Nombre de usuario**. También puede utilizar el valor predeterminado que se proporciona en este campo. Cuando haya terminado, elija **Crear usuario** en la esquina inferior derecha.

1. Seleccione **Mostrar** en la *Contraseña SMTP*: las credenciales de SMTP se muestran en la pantalla.

1. Elija **Descargar archivo .csv** para descargar estas credenciales o cópielas y almacénelas en un lugar seguro, ya que no podrá ver ni guardar las credenciales después de haber cerrado este cuadro de diálogo.

1. Elija **Volver a la consola de SES**.

Puede ver una lista de las credenciales de SMTP que ha creado mediante este procedimiento en la consola de IAM en **Access management** (Administración de accesos) y elegir **Users** (Usuarios) seguido de la barra de búsqueda para encontrar a todos los usuarios a los que ha asignado credenciales de SMTP.

También puede utilizar la consola de IAM para eliminar usuarios de SMTP existentes. Para obtener más información sobre cómo eliminar usuarios, consulte [Administración de usuarios de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_manage.html) en la *Guía de introducción de IAM*.

Si desea cambiar la contraseña de SMTP, elimine el usuario de SMTP existente en la consola de IAM. A continuación, para generar un nuevo conjunto de credenciales de SMTP, realice los procedimientos anteriores.

## Obtener las credenciales SMTP de SES mediante la conversión de las credenciales existentes AWS
<a name="smtp-credentials-convert"></a>

Si tiene un usuario que ha configurado mediante la interfaz de IAM, puede derivar las credenciales SMTP de SES del usuario a partir de sus credenciales. AWS 

**importante**  
No utilice AWS credenciales temporales para obtener las credenciales SMTP. La interfaz de SMTP de SES no es compatible con las credenciales de SMTP que se han generado a partir de credenciales de seguridad temporales. 

**Procedimiento para permitir que el usuario de IAM pueda enviar correo electrónico a través de la interfaz de SMTP de SES**

1. Obtenga las credenciales SMTP del usuario a partir de sus AWS credenciales mediante el algoritmo que se proporciona en esta sección y siga estos procedimientos.

   Como se parte de las AWS credenciales, el nombre de usuario de SMTP es el mismo que el ID de la clave de AWS acceso, por lo que solo necesita generar la contraseña de SMTP.

1. Inicie sesión en la consola de IAM Consola de administración de AWS y ábrala en. [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)

1. En **Administración del acceso**, elija **Políticas** y, a continuación, **Crear política**.

1. En el **Editor de políticas**, seleccione **JSON** y borre todos los ejemplos de código del editor.

1. Pegue la siguiente política de permisos en el editor:

------
#### [ JSON ]

****  

   ```
   {
   "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
   "Effect": "Allow",
               "Action": "ses:SendRawEmail",
               "Resource": "*"
           }
       ]
   }
   ```

------

1. Seleccione **Siguiente** y escriba `AmazonSesSendingAccess` en el campo **Nombre de política**. A continuación, seleccione **Crear política**.

1. En **Administración del acceso**, elija **Grupos de usuarios** y, a continuación, **Crear grupo**.

1. En el campo **Nombre del grupo de seguridad**, escriba `AWSSESSendingGroupDoNotRename`.

1. Agregue usuarios de SMTP al grupo. Para ello, selecciónelos en la tabla **Agregar usuarios al grupo**.

1. Asocie la política `AmazonSesSendingAccess` creada anteriormente. Para ello, selecciónela en la tabla **Asociar políticas de permisos** y, a continuación, **Crear grupo de usuarios**.

Para obtener más información sobre el uso de SES con IAM, consulte [Identity and Access Management en Amazon SES](control-user-access.md).

**nota**  
Aunque puede generar credenciales de SMTP de SES para cualquier usuario de IAM, le recomendamos que cree un usuario de IAM independiente cuando genere las credenciales de SMTP. Para obtener información acerca de por qué es una práctica recomendable crear usuarios para fines específicos, acceda a [Prácticas recomendadas de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/IAMBestPractices.html).

El siguiente pseudocódigo muestra el algoritmo que convierte una clave de acceso AWS secreta en una contraseña SMTP de SES.

```
 1. // Modify this variable to include your AWS secret access key
 2. key = "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY";
 3.             
 4. // Modify this variable to refer to the AWS Region that you want to use to send email.
 5. region = "us-west-2";
 6.             
 7. // The values of the following variables should always stay the same.
 8. date = "11111111";
 9. service = "ses";
10. terminal = "aws4_request";
11. message = "SendRawEmail";
12. version = 0x04;
13. 
14. kDate = HmacSha256(date, "AWS4" + key);
15. kRegion = HmacSha256(region, kDate);
16. kService = HmacSha256(service, kRegion);
17. kTerminal = HmacSha256(terminal, kService);
18. kMessage = HmacSha256(message, kTerminal);
19. signatureAndVersion = Concatenate(version, kMessage);
20. smtpPassword = Base64(signatureAndVersion);
```

Algunos lenguajes de programación incluyen bibliotecas que puede utilizar para convertir una clave de acceso secreta de IAM en una contraseña de SMTP. Esta sección incluye un ejemplo de código que puede utilizar para convertir una clave de acceso AWS secreta en una contraseña SMTP de SES mediante Python.

**nota**  
En el siguiente ejemplo, se utilizan **f-strings** que se introdujeron en Python 3.6; si usa una versión anterior, no funcionarán.
En el siguiente ejemplo, la lista de SMTP\$1REGIONS es simplemente un ejemplo: la lista real de regiones podría ser más corta o más larga en función de las regiones a las que vaya a enviar correos electrónicos, ya que necesitará credenciales SMTP para cada Región de AWS.

------
#### [ Python ]

```
#!/usr/bin/env python3

import hmac
import hashlib
import base64
import argparse

SMTP_REGIONS = [
    "us-east-2",  # US East (Ohio)
    "us-east-1",  # US East (N. Virginia)
    "us-west-2",  # US West (Oregon)
    "ap-south-1",  # Asia Pacific (Mumbai)
    "ap-northeast-2",  # Asia Pacific (Seoul)
    "ap-southeast-1",  # Asia Pacific (Singapore)
    "ap-southeast-2",  # Asia Pacific (Sydney)
    "ap-northeast-1",  # Asia Pacific (Tokyo)
    "ca-central-1",  # Canada (Central)
    "eu-central-1",  # Europe (Frankfurt)
    "eu-west-1",  # Europe (Ireland)
    "eu-west-2",  # Europe (London)
    "eu-south-1",  # Europe (Milan)
    "eu-north-1",  # Europe (Stockholm)
    "sa-east-1",  # South America (Sao Paulo)
    "us-gov-west-1",  # AWS GovCloud (US)
    "us-gov-east-1",  # AWS GovCloud (US)
]

# These values are required to calculate the signature. Do not change them.
DATE = "11111111"
SERVICE = "ses"
MESSAGE = "SendRawEmail"
TERMINAL = "aws4_request"
VERSION = 0x04


def sign(key, msg):
    return hmac.new(key, msg.encode("utf-8"), hashlib.sha256).digest()


def calculate_key(secret_access_key, region):
    if region not in SMTP_REGIONS:
        raise ValueError(f"The {region} Region doesn't have an SMTP endpoint.")

    signature = sign(("AWS4" + secret_access_key).encode("utf-8"), DATE)
    signature = sign(signature, region)
    signature = sign(signature, SERVICE)
    signature = sign(signature, TERMINAL)
    signature = sign(signature, MESSAGE)
    signature_and_version = bytes([VERSION]) + signature
    smtp_password = base64.b64encode(signature_and_version)
    return smtp_password.decode("utf-8")


def main():
    parser = argparse.ArgumentParser(
        description="Convert a Secret Access Key to an SMTP password."
    )
    parser.add_argument("secret", help="The Secret Access Key to convert.")
    parser.add_argument(
        "region",
        help="The AWS Region where the SMTP password will be used.",
        choices=SMTP_REGIONS,
    )
    args = parser.parse_args()
    print(calculate_key(args.secret, args.region))


if __name__ == "__main__":
    main()
```

Para obtener la contraseña de SMTP mediante este script, guarde el código anterior como `smtp_credentials_generate.py`. A continuación, en la línea de comandos, ejecute el comando siguiente:

```
python path/to/smtp_credentials_generate.py wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY us-east-1
```

En el comando anterior, haga lo siguiente.
+ *path/to/*Sustitúyala por la ruta a la ubicación en la que la `smtp_credentials_generate.py` guardaste.
+ Reemplace *wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY* con la clave de acceso secreta que desea convertir en una contraseña de SMTP.
+ *us-east-1*Sustitúyalas por la AWS región en la que desee utilizar las credenciales SMTP.

Cuando este script se ejecuta correctamente, el único resultado es la contraseña de SMTP.

------

## Migración de un usuario de SMTP de una política insertada existente a una política de grupo (recomendación de seguridad)
<a name="migrate-inline-policy-to-group"></a>

**importante**  
Si ha creado las credenciales de SMTP de SES antes del 6 de septiembre de 2024, a su usuario de SMTP se le han asociado una política insertada y una etiqueta. En SES, se están dejando de usar las políticas insertadas y la recomendación de seguridad es que todo el mundo haga lo mismo.

Antes de migrar a un usuario de SMTP de una política insertada existente a una política de grupo, primero debe crear un grupo de usuarios de IAM con la política de permisos de SES para sustituir a la política insertada. Si ya ha creado el grupo de usuarios de IAM, o bien este se ha creado automáticamente para las credenciales de SMTP que creó a partir del 6 de septiembre de 2024, puede ir directamente al *paso 10* del procedimiento siguiente.

**Migración de una política insertada existente a un grupo administrado**

1. Inicie sesión en la consola de IAM Consola de administración de AWS y ábrala en. [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)

1. En **Administración del acceso**, elija **Políticas** y, a continuación, **Crear política**.

1. En el **Editor de políticas**, seleccione **JSON** y borre todos los ejemplos de código del editor.

1. Pegue la siguiente política de permisos en el editor:

------
#### [ JSON ]

****  

   ```
   {
   "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
   "Effect": "Allow",
               "Action": "ses:SendRawEmail",
               "Resource": "*"
           }
       ]
   }
   ```

------

1. Seleccione **Siguiente** y escriba `AmazonSesSendingAccess` en el campo **Nombre de política**. A continuación, seleccione **Crear política**.

1. En **Administración del acceso**, elija **Grupos de usuarios** y, a continuación, **Crear grupo**.

1. En el campo **Nombre del grupo de seguridad**, escriba `AWSSESSendingGroupDoNotRename`.

1. Agregue usuarios de SMTP al grupo. Para ello, selecciónelos en la tabla **Agregar usuarios al grupo**.

1. Asocie la política `AmazonSesSendingAccess` creada anteriormente. Para ello, selecciónela en la tabla **Asociar políticas de permisos** y, a continuación, **Crear grupo de usuarios**.

   Ahora que ya ha creado el grupo de usuarios de IAM con la política de permisos de SES, puede migrar a un usuario de SMTP de la política insertada actual a esta política de grupo, tal y como se explica en los pasos restantes.

1. En **Administración del acceso**, elija **Usuarios** y, a continuación, seleccione el usuario de SMTP que desee migrar.

1. Seleccione la pestaña **Grupos** y haga clic en **Agregar usuario a los grupos**.

1. Seleccione el grupo `AWSSESSendingGroupDoNotRename` y, a continuación, **Agregar usuario a los grupos**.

1. Seleccione la pestaña **Permisos** y confirme que hay dos filas con `AmazonSesSendingAccess` en la columna **Nombre de la política**, una con *Inline* y otra con *Grupo de `AWSSESSendingGroupDoNotRename`* en la columna **Adjuntado a través de**.

1. Seleccione solo la fila que contiene `AmazonSesSendingAccess` en la columna **Nombre de la política** e *Inline* en la columna **Adjuntado a través de**. A continuación, seleccione **Quitar** y elija **Quitar política** para confirmar.

   Compruebe que la fila cuya columna **Adjuntado a través de** contiene *Grupo `AWSSESSendingGroupDoNotRename`* sigue estando presente.

1. Seleccione la pestaña **Etiquetas** y, a continuación, **Administrar etiquetas**.

1. Seleccione **Eliminar** junto a la fila que contiene *InvokedBy*las columnas **Clave** y *SESConsole***Valor** y, a continuación, **Guardar cambios**.

**importante**  
La política `AmazonSesSendingAccess` (ya sea insertada, de grupo o ambas) debe permanecer asociada al usuario de SMTP para garantizar que el envío no se vea afectado. Solo debe borrar la política insertada después de haber asociado la política de grupo al usuario. 

# Conexión a un punto de enlace de SMTP de Amazon SES
<a name="smtp-connect"></a>

Para enviar email mediante la interfaz de SMTP de Amazon SES, tiene que conectar su aplicación a un punto de enlace de SMTP. Para obtener una lista completa de los puntos de conexión de SMTP de Amazon SES, consulte [Puntos de conexión y cuotas de Amazon Simple Email Service](https://docs.aws.amazon.com/general/latest/gr/ses.html) en la *Referencia general de AWS*.

El punto de enlace de SMTP de Amazon SES requiere que todas las conexiones se cifren con Transport Layer Security (TLS). (Tenga en cuenta que TLS se denomina en ocasiones con el nombre de su protocolo predecesor, SSL). Amazon SES admite dos mecanismos para establecer la conexión cifrada por TLS: STARTTLS y TLS Wrapper. Consulte la documentación de su software para determinar si es compatible con STARTTLS, TLS Wrapper o ambos.

De forma predeterminada, Amazon Elastic Compute Cloud (Amazon EC2) limita de manera controlada el tráfico de correo electrónico en el puerto 25. Para evitar tiempos de espera al enviar correo electrónico a través del punto de enlace de SMTP desde EC2, envíe una [Solicitud de eliminación de limitaciones de envío de correo electrónico](https://aws-portal.amazon.com/gp/aws/html-forms-controller/contactus/ec2-email-limit-rdns-request) para eliminar la limitación. También puede enviar correo electrónico mediante otro puerto o utilizar un [punto de enlace de Amazon VPC](send-email-set-up-vpc-endpoints.md).

En caso de problemas con la conexión SMTP, consulte [Problemas de SMTP](troubleshoot-smtp.md).

## STARTTLS
<a name="smtp-connect-starttls"></a>

STARTTLS es un medio para actualizar una conexión sin cifrar a una conexión cifrada. Existen versiones de STARTTLS para diversos protocolos; la versión de SMTP se define en [RFC 3207](https://www.ietf.org/rfc/rfc3207.txt).

Para configurar una conexión STARTTLS, el cliente de SMTP se conecta con el punto de enlace de SMTP de Amazon SES en el puerto 25, 587 o 2587, emite un comando EHLO y espera a que el servidor anuncie que es compatible con la extensión de SMTP STARTTLS. A continuación, el cliente emite el comando STARTTLS, iniciando la negociación de TLS. Cuando se completa la negociación, el cliente emite un comando EHLO sobre la nueva conexión cifrada y la sesión de SMTP continúa con normalidad.

## TLS Wrapper
<a name="smtp-connect-tlswrapper"></a>

TLS Wrapper (también conocido como SMTPS o protocolo Handshake) es un medio de iniciar una conexión cifrada sin establecer primero una conexión sin cifrar. Con TLS Wrapper, el punto de enlace de SMTP de Amazon SES no realiza la negociación de TLS: es responsabilidad del cliente conectarse al punto de enlace mediante TLS y seguir utilizando TLS para toda la conversación. TLS Wrapper es un protocolo más antiguo, pero muchos clientes siguen siendo compatibles.

Para configurar una conexión de TLS Wrapper, el cliente de SMTP se conecta al punto de enlace de SMTP de Amazon SES en el puerto 465 o 2465. El servidor presenta su certificado, el cliente emite un comando EHLO y la sesión de SMTP continúa con normalidad.

# Envío de correo electrónico a través de Amazon SES mediante paquetes de software
<a name="send-email-smtp-software-package"></a>

Existe una serie de paquetes de software comerciales y de código abierto que admiten el envío de correo electrónico a través de SMTP. Estos son algunos ejemplos:
+ Plataformas de blog
+ Agregadores RSS
+ Software de administración de listas
+ Sistemas de flujo de trabajo

Puede configurar cualquier software habilitado para SMTP de este tipo para enviar correo electrónico a través de la interfaz de SMTP de Amazon SES. Para obtener instrucciones sobre cómo configurar SMTP para un determinado paquete de software, consulte la documentación de dicho software.

El siguiente procedimiento muestra cómo configurar el envío de Amazon SES en JIRA, una conocida solución de seguimiento de problemas. Con esta configuración, JIRA puede notificar a los usuarios por correo electrónico cuando haya un cambio en el estado de un problema de software.

**Para configurar JIRA con el fin de enviar correo electrónico mediante Amazon SES**

1. Con su navegador web, inicie sesión en JIRA con credenciales de administrador.

1. En la ventana del navegador, elija **Administration**.

1. En el menú **System**, elija **Mail**.

1. En la página **Mail administration**, elija **Mail Servers**.

1. Elija **Configure new SMTP mail server**.

1. En el formulario **Add SMTP Mail Server**, rellene los campos siguientes:

   1. **Name**: un nombre descriptivo para este servidor.

   1. **From address (Dirección desde)**: la dirección desde la que se enviará el correo electrónico. Antes de enviar correo electrónico a través de Amazon SES, tendrá que verificar esta dirección. Para obtener más información sobre la verificación, consulte [Identidades verificadas en Amazon SES](verify-addresses-and-domains.md).

   1. **Email prefix**: una cadena que JIRA añade a cada línea de asunto antes del envío.

   1. **Protocol**: elija **SMTP**.
**nota**  
Si no puede conectarse a Amazon SES mediante esta configuración, pruebe **SECURE\$1SMTP**.

   1. **Host Name (Nombre de host)**: consulte [Conexión a un punto de enlace de SMTP de Amazon SES](smtp-connect.md) para ver un listado de puntos de enlace de SMTP de Amazon SES. Por ejemplo, si desea utilizar el punto de enlace de Amazon SES en la región EE. UU. Oeste (Oregón), el nombre del host sería *email-smtp.us-west-2.amazonaws.com*.

   1. **SMTP Port (Puerto SMTP)**: 25, 587 o 2587 (para conectarse utilizando STARTTLS) o 465 o 2465 (para conectarse utilizando TLS Wrapper).

   1. **TLS**: seleccione esta casilla de verificación.

   1. **User Name (Nombre de usuario)**: su nombre de usuario de SMTP.

   1. **Password**: su contraseña de SMTP.

   En la imagen siguiente se muestra la configuración de TLS Wrapper.  
![\[Configuración de correo electrónico de SMTP para JIRA\]](http://docs.aws.amazon.com/es_es/ses/latest/dg/images/SMTP_jira.png)

1. Elija **Test Connection**. Si el correo electrónico de prueba que envía JIRA a través de Amazon SES llega correctamente, su configuración está completa.

# Envío de correo electrónico mediante programación con la interfaz de SMTP de Amazon SES
<a name="send-using-smtp-programmatically"></a>

Para enviar un correo electrónico a través de la interfaz de SMTP de Amazon SES, puede utilizar un lenguaje de programación, servidor de email o aplicación habilitados para SMTP. Antes de comenzar, complete las tareas de [Configuración de Amazon Simple Email Service](setting-up.md). También tiene que obtener la siguiente información: 
+ Sus credenciales de SMTP de Amazon SES, que le permitirán conectarse al punto de conexión de SMTP de Amazon SES. Para obtener las credenciales de SMTP de Amazon SES, consulte [Obtención de las credenciales de SMTP de Amazon SES](smtp-credentials.md). 
**importante**  
Sus credenciales SMTP son diferentes de las suyas AWS . Para obtener más información acerca de las credenciales, consulte [Tipos de credenciales de Amazon SES](send-email-concepts-credentials.md).
+ La dirección del punto de enlace SMTP. Para obtener una lista de puntos de enlace de SMTP de Amazon SES, consulte [Conexión a un punto de enlace de SMTP de Amazon SES](smtp-connect.md).
+ El número de puerto de la interfaz de SMTP de Amazon SES, que depende del método de conexión. Para obtener más información, consulte [Conexión a un punto de enlace de SMTP de Amazon SES](smtp-connect.md).

## Ejemplos de código
<a name="send-email-smtp-code-examples"></a>

Puede acceder a la interfaz de SMTP de Amazon SES mediante un lenguaje de programación habilitado para SMTP. Usted proporciona el nombre de host y el número de puerto de SMTP de Amazon SES junto con sus credenciales de SMTP y, a continuación, utiliza las funciones de SMTP genéricas del lenguaje de programación para enviar el correo electrónico.

De forma predeterminada, Amazon Elastic Compute Cloud (Amazon EC2) restringe el tráfico de correo electrónico en el puerto 25. Para evitar tiempos de espera al enviar correo electrónico a través del punto de enlace de SMTP desde Amazon EC2, puede solicitar que se eliminen estas restricciones. Para obtener más información, consulte [¿Cómo elimino la restricción del puerto 25 de mi instancia o AWS Lambda función de Amazon EC2](https://aws.amazon.com/premiumsupport/knowledge-center/ec2-port-25-throttle/)? en el Centro de AWS conocimiento.

En los ejemplos de código de esta sección para Java y PHP se utiliza el puerto 587 para evitar este problema. 

**nota**  
En este tutorial, debe enviarse un correo electrónico a usted mismo para poder verificar si lo recibe. Para seguir experimentando o realizar pruebas de carga, utilice el simulador de buzón de correo de Amazon SES. Los correos electrónicos que envíe al simulador de buzón de correo no se contabilizan en su cuota de envío ni en sus tasas de rebotes y reclamos. Para obtener más información, consulte [Uso del simulador de buzón de correo de forma manual](send-an-email-from-console.md#send-email-simulator).

**Seleccione un lenguaje de programación para ver el ejemplo para dicho idioma:**

**aviso**  
Amazon SES no recomienda el uso de credenciales estáticas. Consulte [AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html) para obtener información sobre cómo eliminar las credenciales con codificación rígida del código fuente con el fin de mejorar su posición de seguridad. Este tutorial se proporciona exclusivamente para probar la interfaz de SMTP de Amazon SES en un entorno que no sea de producción.

------
#### [ Java ]

En este ejemplo, se utiliza el [IDE de Eclipse](http://www.eclipse.org/) y la [JavaMail API](https://github.com/javaee/javamail/releases) para enviar correos electrónicos a través de Amazon SES mediante la interfaz SMTP.

Antes de realizar el procedimiento siguiente, complete las tareas descritas en [Configuración de Amazon Simple Email Service](setting-up.md).

**Para enviar un correo electrónico a través de la interfaz de SMTP de Amazon SES con Java**

1. En un navegador web, vaya a la [JavaMail GitHub página.](https://github.com/javaee/javamail/releases) En **Activos**, selecciona **javax.mail.jar** para descargar la versión más reciente de. JavaMail
**importante**  
Este tutorial requiere JavaMail la versión 1.5 o posterior. Estos procedimientos se probaron con la JavaMail versión 1.6.1.

1. **En un navegador web, vaya a la [ GitHub página de activación de Yakarta](https://github.com/eclipse-ee4j/jaf/releases) y, en Activation [Framework 1.2.1 Final Release, descargue JavaBeans jakarta.activation.jar](https://github.com/eclipse-ee4j/jaf/releases/tag/1.2.1)**

1. Cree un proyecto en Eclipse realizando los pasos siguientes:

   1. Inicie Eclipse.

   1. En Eclipse, elija **File**, elija **New** y, a continuación, elija **Java Project**.

   1. En el cuadro de diálogo **Create a Java Project**, escriba un nombre de proyecto y, a continuación, elija **Next**.

   1. En el cuadro de diálogo **Java Settings**, elija la pestaña **Libraries**.

   1. ******Seleccione **Classpath** y añada los dos archivos jar externos javax.mail.jar y jakarta.activation.jar mediante el botón Agregar archivo externo. JARs******

   1. **Selecciona JARs** Añadir externo.

   1. Navegue hasta la carpeta en la que realizó la descarga JavaMail. Elija el archivo `javax.mail.jar` y, a continuación, elija **Open**.

   1. En el cuadro de diálogo **Java Settings**, elija **Finish**.

1. En Eclipse, en la ventana **Package Explorer**, amplíe su proyecto.

1. En su proyecto, haga clic con el botón derecho en el directorio **src**, elija **New** y, a continuación, elija **Class**.

1. En el cuadro de diálogo **New Java Class**, en el campo **Name**, escriba `AmazonSESSample` y, a continuación, elija **Finish**.

1. Sustituya todo el contenido de **Amazon SESSample .java** por el siguiente código:

   ```
     1. import java.util.Properties;
     2. 
     3. import javax.mail.Message;
     4. import javax.mail.Session;
     5. import javax.mail.Transport;
     6. import javax.mail.internet.InternetAddress;
     7. import javax.mail.internet.MimeMessage;
     8. 
     9. public class AmazonSESSample {
    10. 
    11.     // Replace sender@example.com with your "From" address.
    12.     // This address must be verified.
    13.     static final String FROM = "sender@example.com";
    14.     static final String FROMNAME = "Sender Name";
    15.     
    16.     // Replace recipient@example.com with a "To" address. If your account 
    17.     // is still in the sandbox, this address must be verified.
    18.     static final String TO = "recipient@example.com";
    19.     
    20.     // Replace smtp_username with your Amazon SES SMTP user name.
    21.     static final String SMTP_USERNAME = "smtp_username";
    22.       
    23.     // The name of the Configuration Set to use for this message.
    24.     // If you comment out or remove this variable, you will also need to
    25.     // comment out or remove the header below.
    26.     static final String CONFIGSET = "ConfigSet";
    27.     
    28.     // Amazon SES SMTP host name. This example uses the US West (Oregon) region.
    29.     // See https://docs.aws.amazon.com/ses/latest/DeveloperGuide/regions.html#region-endpoints
    30.     // for more information.
    31.     static final String HOST = "email-smtp.us-west-2.amazonaws.com";
    32.     
    33.     // The port you will connect to on the Amazon SES SMTP endpoint. 
    34.     static final int PORT = 587;
    35.     
    36.     static final String SUBJECT = "Amazon SES test (SMTP interface accessed using Java)";
    37.     
    38.     static final String BODY = String.join(
    39.             System.getProperty("line.separator"),
    40.             "<h1>Amazon SES SMTP Email Test</h1>",
    41.             "<p>This email was sent with Amazon SES using the ", 
    42.             "<a href='https://github.com/javaee/javamail'>Javamail Package</a>",
    43.             " for <a href='https://www.java.com'>Java</a>."
    44.         );
    45. 
    46.     public static void main(String[] args) throws Exception {
    47. 
    48.         // Create a Properties object to contain connection configuration information.
    49.         Properties props = System.getProperties();
    50.         props.put("mail.transport.protocol", "smtp");
    51.         props.put("mail.smtp.port", PORT); 
    52.         props.put("mail.smtp.starttls.enable", "true");
    53.         props.put("mail.smtp.auth", "true");
    54. 
    55.         // Create a Session object to represent a mail session with the specified properties. 
    56.         Session session = Session.getDefaultInstance(props);
    57. 
    58.         // Create a message with the specified information. 
    59.         MimeMessage msg = new MimeMessage(session);
    60.         msg.setFrom(new InternetAddress(FROM,FROMNAME));
    61.         msg.setRecipient(Message.RecipientType.TO, new InternetAddress(TO));
    62.         msg.setSubject(SUBJECT);
    63.         msg.setContent(BODY,"text/html");
    64.         
    65.         // Add a configuration set header. Comment or delete the 
    66.         // next line if you are not using a configuration set
    67.         msg.setHeader("X-SES-CONFIGURATION-SET", CONFIGSET);
    68.             
    69.         // Create a transport.
    70.         Transport transport = session.getTransport();
    71. 
    72.         // Get the password 
    73.         String SMTP_PASSWORD = fetchSMTPPasswordFromSecureStorage();
    74.                     
    75.         // Send the message.
    76.         try
    77.         {
    78.             System.out.println("Sending...");
    79.             
    80.             // Connect to Amazon SES using the SMTP username and password you specified above.
    81.             transport.connect(HOST, SMTP_USERNAME, SMTP_PASSWORD);
    82.             
    83.             // Send the email.
    84.             transport.sendMessage(msg, msg.getAllRecipients());
    85.             System.out.println("Email sent!");
    86.         }
    87.         catch (Exception ex) {
    88.             System.out.println("The email was not sent.");
    89.             System.out.println("Error message: " + ex.getMessage());
    90.         }
    91.         finally
    92.         {
    93.             // Close and terminate the connection.
    94.             transport.close();
    95.         }
    96.     }
    97. 
    98.     static String fetchSMTPPasswordFromSecureStorage() {
    99.         /* IMPLEMENT THIS METHOD */
   100.         // For example, you might fetch it from a secure location or AWS Secrets Manager: https://aws.amazon.com/secrets-manager/
   101.     }
   102. }
   ```

1. En **Amazon SESSample .java**, sustituya las siguientes direcciones de correo electrónico por sus propios valores:
**importante**  
Las direcciones de correo electrónico distinguen entre mayúsculas y minúsculas. Asegúrese de que las direcciones sean exactamente las mismas que las que haya verificado.
   + *sender@example.com*— Sustitúyala por tu dirección de correo electrónico «De». Debe verificar esta dirección antes de ejecutar este programa. Para obtener más información, consulte [Identidades verificadas en Amazon SES](verify-addresses-and-domains.md).
   + *recipient@example.com*— Sustitúyala por tu dirección de correo electrónico «Para». Si su cuenta está todavía en el entorno de pruebas, debe verificar esta dirección antes de utilizarla. Para obtener más información, consulte [Solicitud de acceso de producción (salida del entorno de pruebas de Amazon SES)](request-production-access.md).

1. En **Amazon SESSample .java**, sustituya lo siguiente por sus propios valores:
   + *smtp\$1username*— Sustitúyala por la credencial de tu nombre de usuario de SMTP. Tenga en cuenta que la credencial de nombre de usuario de SMTP es una cadena de 20 letras y números, no un nombre inteligible.
   + *smtp\$1password*— Implementar ``fetchSMTPPasswordFromSecureStorage`` para obtener la contraseña.

1. (Opcional) Si desea utilizar un punto de enlace SMTP de Amazon SES en Región de AWS otro lugar que no sea*email-smtp.us-west-2.amazonaws.com*, cambie el valor de la variable `HOST` por el punto de enlace que desee utilizar. Para ver una lista de las regiones donde Amazon SES está disponible, consulte [Amazon Simple Email Service (Amazon SES)](https://docs.aws.amazon.com/general/latest/gr/rande.html#ses_region) en la *Referencia general de AWS*.

1. (Opcional) Si desea utilizar un conjunto de configuración al enviar este correo electrónico, cambie el valor de la variable *ConfigSet* por el nombre del conjunto de configuración. Para obtener más información acerca de los conjuntos de configuración, consulte [Uso de conjuntos de configuración en Amazon SES](using-configuration-sets.md).

1. Guarde **Amazon SESSample .java.**

1. Para crear el proyecto, elija **Project** y, a continuación, elija **Build Project**. (Si esta opción está deshabilitada, entonces es posible que tenga habilitada la creación automática).

1. Para iniciar el programa y enviar el correo electrónico, elija **Run** y, a continuación, vuelva a elegir **Run**.

1. Revise la salida. Si el correo electrónico se ha enviado correctamente, la consola muestra un mensaje que confirma que el *correo electrónico se ha enviado*. De lo contrario, muestra un mensaje de error.

1. Inicie sesión en el cliente de correo electrónico de la dirección del destinatario. Ahí podrá ver el mensaje que ha enviado.

------
#### [ PHP  ]

En este ejemplo, se usa la PHPMailer clase para enviar correos electrónicos a través de Amazon SES mediante la interfaz SMTP. 

Antes de realizar el procedimiento siguiente, debe completar las tareas descritas en [Configuración de Amazon Simple Email Service](setting-up.md). Además de configurar Amazon SES, debe completar los requisitos previos que se indican a continuación para enviar correo electrónico con PHP:

**Requisitos previos:**
+ **Instale PHP**: PHP está disponible en [http://php.net/downloads.php](https://php.net/downloads.php). Después de instalar PHP, agregue la ruta a PHP en sus variables de entorno para que pueda ejecutar PHP desde cualquier símbolo del sistema.
+ **Instale el administrador de dependencias de Composer**: después de instalar el administrador de dependencias de Composer, puede descargar e instalar la PHPMailer clase y sus dependencias. Para instalar Composer, siga las instrucciones de instalación que se encuentran en [https://getcomposer.org/download](https://getcomposer.org/download).
+ **Instale la PHPMailer clase**: después de instalar Composer, ejecute el siguiente comando para instalarlo: PHPMailer 

  ```
  path/to/composer require phpmailer/phpmailer
  ```

  En el comando anterior, *path/to/* sustitúyalo por la ruta en la que instaló Composer.

**Para enviar un correo electrónico a través de la interfaz de SMTP de Amazon SES con PHP**

1. Cree un archivo denominado **amazon-ses-smtp-sample.php.** Abra el archivo con un editor de texto y pegue el código siguiente:

   ```
    1. <?php
    2. 
    3. // Import PHPMailer classes into the global namespace
    4. // These must be at the top of your script, not inside a function
    5. use PHPMailer\PHPMailer\PHPMailer;
    6. use PHPMailer\PHPMailer\Exception;
    7. 
    8. // If necessary, modify the path in the require statement below to refer to the
    9. // location of your Composer autoload.php file.
   10. require 'vendor/autoload.php';
   11. 
   12. // Replace sender@example.com with your "From" address.
   13. // This address must be verified with Amazon SES.
   14. $sender = 'sender@example.com';
   15. $senderName = 'Sender Name';
   16. 
   17. // Replace recipient@example.com with a "To" address. If your account
   18. // is still in the sandbox, this address must be verified.
   19. $recipient = 'recipient@example.com';
   20. 
   21. // Replace smtp_username with your Amazon SES SMTP user name.
   22. $usernameSmtp = 'smtp_username';
   23. 
   24. // Specify a configuration set. If you do not want to use a configuration
   25. // set, comment or remove the next line.
   26. $configurationSet = 'ConfigSet';
   27. 
   28. // If you're using Amazon SES in a region other than US West (Oregon),
   29. // replace email-smtp.us-west-2.amazonaws.com with the Amazon SES SMTP
   30. // endpoint in the appropriate region.
   31. $host = 'email-smtp.us-west-2.amazonaws.com';
   32. $port = 587;
   33. 
   34. // The subject line of the email
   35. $subject = 'Amazon SES test (SMTP interface accessed using PHP)';
   36. 
   37. // The plain-text body of the email
   38. $bodyText =  "Email Test\r\nThis email was sent through the
   39.     Amazon SES SMTP interface using the PHPMailer class.";
   40. 
   41. // The HTML-formatted body of the email
   42. $bodyHtml = '<h1>Email Test</h1>
   43.     <p>This email was sent through the
   44.     <a href="https://aws.amazon.com/ses">Amazon SES</a> SMTP
   45.     interface using the <a href="https://github.com/PHPMailer/PHPMailer">
   46.     PHPMailer</a> class.</p>';
   47. 
   48. $mail = new PHPMailer(true);
   49. 
   50. try {
   51.     // Specify the SMTP settings.
   52.     $mail->isSMTP();
   53.     $mail->setFrom($sender, $senderName);
   54.     $mail->Username   = $usernameSmtp;
   55.     $mail->Password   = fetchSMTPPasswordFromSecureStorage();
   56.     $mail->Host       = $host;
   57.     $mail->Port       = $port;
   58.     $mail->SMTPAuth   = true;
   59.     $mail->SMTPSecure = 'tls';
   60.     $mail->addCustomHeader('X-SES-CONFIGURATION-SET', $configurationSet);
   61. 
   62.     // Specify the message recipients.
   63.     $mail->addAddress($recipient);
   64.     // You can also add CC, BCC, and additional To recipients here.
   65. 
   66.     // Specify the content of the message.
   67.     $mail->isHTML(true);
   68.     $mail->Subject    = $subject;
   69.     $mail->Body       = $bodyHtml;
   70.     $mail->AltBody    = $bodyText;
   71.     $mail->Send();
   72.     echo "Email sent!" , PHP_EOL;
   73. } catch (phpmailerException $e) {
   74.     echo "An error occurred. {$e->errorMessage()}", PHP_EOL; //Catch errors from PHPMailer.
   75. } catch (Exception $e) {
   76.     echo "Email not sent. {$mail->ErrorInfo}", PHP_EOL; //Catch errors from Amazon SES.
   77. }
   78. function fetchSMTPPasswordFromSecureStorage() {
   79. /* IMPLEMENT THIS METHOD */
   80. // For example, you might fetch it from a secure location or AWS Secrets Manager: https://aws.amazon.com/secrets-manager/
   81. }
   82. 
   83. ?>
   ```

1. En **amazon-ses-smtp-sample.php**, sustituya lo siguiente por sus propios valores:
   + *sender@example.com*— Sustitúyala por una dirección de correo electrónico que hayas verificado con Amazon SES. Para obtener más información, consulte [Identidades verificadas](verify-addresses-and-domains.md). Las direcciones de email en Amazon SES distinguen entre mayúsculas y minúsculas. Asegúrese de que la dirección que introduce sea exactamente la misma que la que haya verificado.
   + *recipient@example.com*— Sustitúyala por la dirección del destinatario. Si su cuenta está todavía en el entorno de pruebas, debe verificar esta dirección antes de utilizarla. Para obtener más información, consulte [Solicitud de acceso de producción (salida del entorno de pruebas de Amazon SES)](request-production-access.md). Asegúrese de que la dirección que introduce sea exactamente la misma que la que haya verificado.
   + *smtp\$1username*— Sustitúyala por la credencial de nombre de usuario de SMTP, que obtuvo en la página de [configuración de SMTP](https://console.aws.amazon.com/ses/home?#smtp-settings:) de la consola Amazon SES. Esto **no** es lo mismo que el ID de clave de acceso de AWS . Tenga en cuenta que la credencial de nombre de usuario de SMTP es una cadena de 20 letras y números, no un nombre inteligible.
   + *smtp\$1password*— Impleméntela ``fetchSMTPPasswordFromSecureStorage`` para obtener la contraseña.
   + (Opcional)*ConfigSet*: si desea utilizar un conjunto de configuraciones al enviar este correo electrónico, sustituya este valor por el nombre del conjunto de configuraciones. Para obtener más información acerca de los conjuntos de configuración, consulte [Uso de conjuntos de configuración en Amazon SES](using-configuration-sets.md).
   + (Opcional)*email-smtp.us-west-2.amazonaws.com*: si desea utilizar un punto de enlace SMTP de Amazon SES en una región que no sea EE. UU. Oeste (Oregón), sustitúyalo por el punto de enlace SMTP de Amazon SES en la región que desee utilizar. Para obtener una lista de los puntos de conexión URLs SMTP Regiones de AWS en los que Amazon SES está disponible, consulte [Amazon Simple Email Service (Amazon SES](https://docs.aws.amazon.com/general/latest/gr/rande.html#ses_region)) en el. *Referencia general de AWS*

1. Guarde **amazon-ses-smtp-sample.php.**

1. Para ejecutar el programa, abra una línea de comandos en el mismo directorio que **amazon-ses-smtp-sample.php** y, a continuación, escriba. **php amazon-ses-smtp-sample.php**

1. Revise la salida. Si el correo electrónico se ha enviado correctamente, la consola muestra un mensaje que confirma que el *correo electrónico se ha enviado*. De lo contrario, muestra un mensaje de error.

1. Inicie sesión en el cliente de correo electrónico de la dirección del destinatario. Ahí podrá ver el mensaje que ha enviado.

------

# Integración de Amazon SES con su servidor de correo electrónico existente
<a name="send-email-smtp-existing-server"></a>

Si actualmente administra su propio servidor de correo electrónico, puede utilizar el punto de enlace de SMTP de Amazon SES para enviar todo su correo electrónico saliente a Amazon SES. No es necesario modificar sus clientes de correo electrónico y las aplicaciones existentes; la transición a Amazon SES pasará desapercibida para ellos.

Varios agentes de transferencia de correo (MTAs) admiten el envío de correo electrónico a través de repetidores SMTP. En esta sección se proporciona una guía general sobre cómo configurar algunos de los más populares MTAs para enviar correos electrónicos mediante la interfaz SMTP de Amazon SES.

El punto de enlace de SMTP de Amazon SES requiere que todas las conexiones se cifren con Transport Layer Security (TLS).

**Topics**
+ [Integración de Amazon SES con Postfix](postfix.md)
+ [Integración de Amazon SES con Sendmail](send-email-sendmail.md)
+ [Integración de Amazon SES con SMTP de IIS de Microsoft Windows Server](send-email-windows-server.md)

# Integración de Amazon SES con Postfix
<a name="postfix"></a>

Postfix es una alternativa al agente de transferencia de mensajes (MTA) de Sendmail de uso extendido. Para obtener más información acerca de Postfix, visite [http://www.postfix.org](http://www.postfix.org). Los procedimientos de este tema funcionarán con Linux, macOS o Unix.

**nota**  
Postfix es una aplicación de terceros y no está desarrollada ni respaldada por Amazon Web Services. Los procedimientos de esta sección se proporcionan únicamente con fines informativos y están sujetos a cambios sin previo aviso.

## Requisitos previos
<a name="send-email-postfix-prereqs"></a>

Debe realizar las siguientes tareas para poder completar los procedimientos de esta sección:
+ Desinstale la aplicación Sendmail, si está instalada en su sistema. El procedimiento para completar este paso varía en función del sistema operativo que use.
**importante**  
A continuación de las referencias a *enviar correo* consulte el comando Postfix `sendmail`, no se debe confundir con la aplicación Sendmail.
+ Instale Postfix. El procedimiento para completar este paso varía en función del sistema operativo que use.
+ Instale un paquete de autenticación SASL. El procedimiento para completar este paso varía en función del sistema operativo que use. Por ejemplo, si utiliza un sistema RedHat basado, debe instalar el `cyrus-sasl-plain` paquete. Si utiliza un sistema basado en Debian o Ubuntu, debe instalar el paquete `libsasl2-modules`.
+ Verifique la dirección de correo electrónico o el dominio que usará para enviar correo electrónico. Para obtener más información, consulte [Creación de una identidad de dirección de correo electrónico](creating-identities.md#verify-email-addresses-procedure).
+ Si una cuenta sigue estando en el entorno de pruebas, solo puede enviar correo electrónico a direcciones de correo electrónico verificadas. Para obtener más información, consulte [Solicitud de acceso de producción (salida del entorno de pruebas de Amazon SES)](request-production-access.md).

## Configuración de Postfix
<a name="send-email-postfix"></a>

Realice los procedimientos siguientes para configurar su servidor de correo electrónico para enviar correo electrónico a través de Amazon SES con Postfix.

**Para configurar Postfix**

1. En la línea de comando, escriba el comando siguiente:

   ```
   sudo postconf -e "relayhost = [email-smtp.us-west-2.amazonaws.com]:587" \
   "smtp_sasl_auth_enable = yes" \
   "smtp_sasl_security_options = noanonymous" \
   "smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd" \
   "smtp_use_tls = yes" \
   "smtp_tls_security_level = secure" \
   "smtp_tls_note_starttls_offer = yes"
   ```
**nota**  
Si utiliza Amazon SES en una AWS región que no sea EE. UU. Oeste (Oregón), sustituya *email-smtp.us-west-2.amazonaws.com* el comando anterior por el punto de enlace SMTP de la región correspondiente. Para obtener más información, consulte [Regiones y Amazon SES](regions.md).

1. En un editor de texto, abra el archivo `/etc/postfix/master.cf`. Busque la entrada siguiente:

   ```
   -o smtp_fallback_relay=
   ```

   Si encuentra esta entrada, coméntela colocando un signo de almohadilla (`#`) al principio de la línea. Guarde y cierre el archivo.

   De lo contrario, si esta entrada no existe, continúe con el paso siguiente.

1. En un editor de texto, abra el archivo `/etc/postfix/sasl_passwd`. Si el archivo no existe todavía, créelo.

1. Añada la línea siguiente a `/etc/postfix/sasl_passwd`:

   ```
   [email-smtp.us-west-2.amazonaws.com]:587 SMTPUSERNAME:SMTPPASSWORD
   ```
**nota**  
Sustituya *SMTPUSERNAME* y por sus *SMTPPASSWORD* credenciales de inicio de sesión de SMTP. Sus credenciales de inicio de sesión de SMTP no son las mismas que su ID de clave de acceso y su clave de acceso secreta de AWS . Para obtener más información acerca de las credenciales, consulte [Obtención de las credenciales de SMTP de Amazon SES](smtp-credentials.md).  
Si utiliza Amazon SES en una AWS región distinta de EE. UU. Oeste (Oregón), *email-smtp.us-west-2.amazonaws.com* sustitúyalo en el ejemplo anterior por el punto de enlace SMTP de la región correspondiente. Para obtener más información, consulte [Regiones y Amazon SES](regions.md).

   Guarde y cierre `sasl_passwd`.

1. En el símbolo del sistema, escriba el siguiente comando para crear un archivo de base de datos hashmap que contenga sus credenciales de SMTP:

   ```
   sudo postmap hash:/etc/postfix/sasl_passwd
   ```

1. (Opcional) Los archivos `/etc/postfix/sasl_passwd` y `/etc/postfix/sasl_passwd.db` que ha creado en los pasos anteriores no están cifrados. Dado que estos archivos contienen sus credenciales de SMTP, le recomendamos que modifique la propiedad y los permisos de los archivos para restringir el acceso a ellos. Para restringir el acceso a estos archivos:

   1. Escriba el siguiente comando en el símbolo del sistema para cambiar la propiedad de los archivos:

      ```
      sudo chown root:root /etc/postfix/sasl_passwd /etc/postfix/sasl_passwd.db
      ```

   1. En el símbolo del sistema, escriba el comando siguiente para cambiar los permisos de los archivos, de forma que solo el usuario raíz pueda leerlos o escribir en ellos:

      ```
      sudo chmod 0600 /etc/postfix/sasl_passwd /etc/postfix/sasl_passwd.db
      ```

1. Indique a Postfix dónde debe buscar el certificado de entidad de certificación (se necesita para verificar el certificado del servidor de Amazon SES). El comando que utilice en este paso variará en función de su sistema operativo.
   + Si utiliza Amazon Linux, Red Hat Enterprise Linux o una distribución relacionada, escriba el comando siguiente: 

     ```
     sudo postconf -e 'smtp_tls_CAfile = /etc/ssl/certs/ca-bundle.crt'
     ```
   + Si utiliza Ubuntu o una distribución relacionada, escriba el comando siguiente:

     ```
     sudo postconf -e 'smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt'
     ```
   + Si utiliza macOS, puede generar el certificado desde el llavero del sistema. Para generar el certificado, escriba el comando siguiente en la línea de comandos:

     ```
     sudo security find-certificate -a -p /System/Library/Keychains/SystemRootCertificates.keychain | sudo tee /etc/ssl/certs/ca-bundle.crt > /dev/null
     ```

     Una vez generado el certificado, escriba el comando siguiente:

     ```
     sudo postconf -e 'smtp_tls_CAfile = /etc/ssl/certs/ca-bundle.crt'
     ```

1. Escriba el comando siguiente para iniciar el servidor Postfix (o para volver a cargar la configuración si el servidor ya se está ejecutando):

   ```
   sudo postfix start; sudo postfix reload
   ```

1. Envíe un correo electrónico de prueba escribiendo lo siguiente en una línea de comandos y pulsando Intro después de cada línea. *sender@example.com*Sustitúyala por la dirección de correo electrónico del remitente. La dirección desde debe verificarse para su uso con Amazon SES. *recipient@example.com*Sustitúyala por la dirección de destino. Si la cuenta está todavía en el entorno de pruebas, la dirección del destinatario también se debe verificar. Por último, la última línea del mensaje debe contener un único punto (.) sin ningún otro contenido.

   ```
   sendmail -f sender@example.com recipient@example.com
   From: Sender Name <sender@example.com>
   Subject: Amazon SES Test                
   This message was sent using Amazon SES.                
   .
   ```

1. Compruebe el buzón de correo asociado a la dirección del destinatario. Si el correo electrónico no llega, busque en la carpeta de correo no deseado. Si sigue sin encontrar el correo electrónico, compruebe el registro de correo del sistema que ha utilizado para enviarlo (normalmente se encuentra en `/var/log/maillog`) para obtener más información.

## Ejemplo de uso avanzado
<a name="send-email-postfix-advanced"></a>

Este ejemplo muestra cómo enviar un correo electrónico que utiliza un [conjunto de configuración](using-configuration-sets.md) y que utiliza la codificación multiparte de MIME para enviar una versión en texto sin formato y una versión HTML del mensaje, junto con un archivo adjunto. También incluye una [etiqueta de enlace](faqs-metrics.md#sending-metric-faqs-clicks-q5), que se puede utilizar para categorizar eventos de clic. El contenido del correo electrónico se especifica en un archivo externo para que no tenga que escribir los comandos manualmente en la sesión de Postfix.

**Para enviar correo electrónico MIME multiparte utilizando Postfix**

1. En un editor de texto, cree un nuevo archivo denominado `mime-email.txt`.

1. En el archivo de texto, pegue el contenido siguiente, reemplazando los valores en rojo por los valores adecuados para su cuenta:

   ```
   X-SES-CONFIGURATION-SET: ConfigSet
   From:Sender Name <sender@example.com>
   Subject:Amazon SES Test
   MIME-Version: 1.0
   Content-Type: multipart/mixed; boundary="YWVhZDFlY2QzMGQ2N2U0YTZmODU"
   
   --YWVhZDFlY2QzMGQ2N2U0YTZmODU
   Content-Type: multipart/alternative; boundary="3NjM0N2QwMTE4MWQ0ZTg2NTYxZQ"
   
   --3NjM0N2QwMTE4MWQ0ZTg2NTYxZQ
   Content-Type: text/plain; charset=UTF-8
   Content-Transfer-Encoding: quoted-printable
   
   Amazon SES Test
   
   This message was sent from Amazon SES using the SMTP interface.
   
   For more information, see:
   http://docs.aws.amazon.com/ses/latest/DeveloperGuide/send-email-smtp.html
   
   --3NjM0N2QwMTE4MWQ0ZTg2NTYxZQ
   Content-Type: text/html; charset=UTF-8
   Content-Transfer-Encoding: quoted-printable
   
   <html>
     <head>
   </head>
     <body>
       <h1>Amazon SES Test</h1>
         <p>This message was sent from Amazon SES using the SMTP interface.</p>
         <p>For more information, see
         <a ses:tags="samplekey0:samplevalue0;samplekey1:samplevalue1;" 
         href="http://docs.aws.amazon.com/ses/latest/DeveloperGuide/send-email-smtp.html">
         Using the Amazon SES SMTP Interface to Send Email</a> in the <em>Amazon SES
         Developer Guide</em>.</p>
     </body>
   </html>
   --3NjM0N2QwMTE4MWQ0ZTg2NTYxZQ--
   --YWVhZDFlY2QzMGQ2N2U0YTZmODU
   Content-Type: application/octet-stream
   MIME-Version: 1.0
   Content-Transfer-Encoding: base64
   Content-Disposition: attachment; filename="customers.txt"
   
   SUQsRmlyc3ROYW1lLExhc3ROYW1lLENvdW50cnkKMzQ4LEpvaG4sU3RpbGVzLENh
   bmFkYQo5MjM4OSxKaWUsTGl1LENoaW5hCjczNCxTaGlybGV5LFJvZHJpZ3VleixV
   bml0ZWQgU3RhdGVzCjI4OTMsQW5heWEsSXllbmdhcixJbmRpYQ==
   --YWVhZDFlY2QzMGQ2N2U0YTZmODU--
   ```

   Guarde y cierre el archivo.

1. En la línea de comando, escriba el comando siguiente. *sender@example.com*Sustitúyala por tu dirección de correo electrónico y *recipient@example.com* sustitúyela por la dirección de correo electrónico del destinatario.

   ```
   sendmail -f sender@example.com recipient@example.com < mime-email.txt
   ```

   Si el comando se ejecuta correctamente, sale sin proporcionar ninguna salida.

1. Compruebe en su bandeja de entrada si hay correo electrónico. Si el mensaje no se ha entregado, compruebe el registro de correo del sistema.

# Integración de Amazon SES con Sendmail
<a name="send-email-sendmail"></a>

Sendmail se lanzó a principios de los años ochenta y desde entonces se ha mejorado continuamente. Se trata de un agente de transferencia de mensajes (MTA) flexible y configurable con una gran comunidad de usuarios. Sendmail fue adquirida por Proofpoint en 2013, pero Proofpoint sigue ofreciendo una versión de código abierto de Sendmail. Puede descargar la [versión de código abierto de Sendmail](https://www.proofpoint.com/us/open-source-email-solution) en el sitio web de Proofpoint o a través de los administradores de paquetes de la mayoría de las distribuciones de Linux.

El procedimiento de esta sección muestra cómo configurar Sendmail para enviar correo electrónico a través de Amazon SES. Este procedimiento se ha probado en un servidor con Ubuntu 18.04.2 LTS.

**nota**  
Sendmail es una aplicación de terceros y no está desarrollada ni respaldada por Amazon Web Services. Los procedimientos de esta sección se proporcionan únicamente con fines informativos y están sujetos a cambios sin previo aviso.

## Requisitos previos
<a name="send-email-sendmail-prerequisites"></a>

Antes de completar el procedimiento de esta sección, debe realizar los pasos que se describen a continuación:
+ Instale el paquete de Sendmail en su servidor. 
**nota**  
En función de la distribución del sistema operativo que utilice, es posible que también tenga que instalar los siguientes paquetes: `sendmail-cf`, `m4` y `cyrus-sasl-plain`.
+ Verifique una identidad para utilizarla como la dirección del remitente ("From"). Para obtener más información, consulte [Creación de una identidad de dirección de correo electrónico](creating-identities.md#verify-email-addresses-procedure).

  Si su cuenta sigue estando en el entorno de pruebas de Amazon SES, también debe verificar las direcciones a las que va a enviar correo electrónico. Para obtener más información, consulte [Solicitud de acceso de producción (salida del entorno de pruebas de Amazon SES)](request-production-access.md).

Si utiliza Amazon SES para enviar correo electrónico desde una instancia de Amazon EC2, también debe realizar los pasos que se describen a continuación:
+ Es posible que tenga que asignar una dirección IP elástica a la instancia de Amazon EC2 para que los proveedores de correo electrónico acepten sus mensajes de correo electrónico. Para obtener más información, consulte [Direcciones IP elásticas de Amazon EC2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html) en la *Guía del usuario de Amazon EC2*.
+ De forma predeterminada, Amazon Elastic Compute Cloud (Amazon EC2) restringe el tráfico de correo electrónico en el puerto 25. Para evitar tiempos de espera al enviar correo electrónico a través del punto de enlace de SMTP desde Amazon EC2, puede solicitar que se eliminen estas restricciones. Para obtener más información, consulte [¿Cómo elimino la restricción del puerto 25 de mi instancia o AWS Lambda función de Amazon EC2](https://aws.amazon.com/premiumsupport/knowledge-center/ec2-port-25-throttle/)? en el Centro de AWS conocimiento.

  Como alternativa, puede modificar el procedimiento de esta sección para utilizar el puerto 587 en lugar del puerto 25.

## Configuración de Sendmail
<a name="send-email-sendmail-procedure"></a>

Realice los pasos de esta sección para configurar Sendmail con el fin de enviar correo electrónico mediante Amazon SES.

**importante**  
El procedimiento de esta sección supone que desea utilizar Amazon SES en el oeste de EE. UU. (Oregón) Región de AWS. Si desea utilizar una región diferente, sustituya todas las instancias de *email-smtp.us-west-2.amazonaws.com* de este procedimiento por el punto de enlace de SMTP de la región que desee. Para obtener una lista de los puntos de conexión URLs SMTP Regiones de AWS en los que Amazon SES está disponible, consulte [Amazon Simple Email Service (Amazon SES](https://docs.aws.amazon.com/general/latest/gr/rande.html#ses_region)) en el. *Referencia general de AWS*

**Para configurar Sendmail**

1. En un editor de archivos, abra el archivo `/etc/mail/authinfo`. Si el archivo no existe, créelo.

   Añada la siguiente línea a*/etc/mail/authinfo*:

   ```
   AuthInfo:email-smtp.us-west-2.amazonaws.com "U:root" "I:smtpUsername" "P:smtpPassword" "M:PLAIN"
   ```

   En el ejemplo anterior, realice los siguientes cambios:
   + *email-smtp.us-west-2.amazonaws.com*Sustitúyalo por el punto de conexión SMTP de Amazon SES que desee utilizar.
   + *smtpUsername*Sustitúyalo por tu nombre de usuario SMTP de Amazon SES.
   + *smtpPassword*Sustitúyala por tu contraseña SMTP de Amazon SES.
**nota**  
Sus credenciales de inicio de sesión en SMTP son diferentes de su ID de clave de AWS acceso y clave de acceso secreta. Para obtener más información sobre cómo obtener sus credenciales de inicio de sesión de SMTP, consulte [Obtención de las credenciales de SMTP de Amazon SES](smtp-credentials.md).

   Cuando termine, guarde `authinfo`.

1. En la línea de comandos, escriba el siguiente comando para generar el archivo `/etc/mail/authinfo.db`:

   ```
   sudo sh -c 'makemap hash /etc/mail/authinfo.db < /etc/mail/authinfo'
   ```

1. En la línea de comandos, escriba el siguiente comando para poder transmitir al punto de enlace de SMTP de Amazon SES.

   ```
   sudo sh -c 'echo "Connect:email-smtp.us-west-2.amazonaws.com RELAY" >> /etc/mail/access'
   ```

   En el comando anterior, *email-smtp.us-west-2.amazonaws.com* sustitúyala por la dirección del punto de conexión SMTP de Amazon SES que deseas usar.

1. En la línea de comandos, escriba el siguiente comando para regenerar*/etc/mail/access*.db:

   ```
   sudo sh -c 'makemap hash /etc/mail/access.db < /etc/mail/access'
   ```

1. En la línea de comandos, escriba el siguiente comando para crear copias de seguridad de los archivos `sendmail.mc` y `sendmail.cf`:

   ```
   sudo sh -c 'cp /etc/mail/sendmail.cf /etc/mail/sendmail_cf.backup && cp /etc/mail/sendmail.mc /etc/mail/sendmail_mc.backup'
   ```

1. Añada las siguientes líneas al archivo*/etc/mail/sendmail.mc* antes de cualquier definición. `MAILER()`

   ```
   define(`SMART_HOST', `email-smtp.us-west-2.amazonaws.com')dnl
   define(`RELAY_MAILER_ARGS', `TCP $h 25')dnl
   define(`confAUTH_MECHANISMS', `LOGIN PLAIN')dnl
   FEATURE(`authinfo', `hash -o /etc/mail/authinfo.db')dnl
   MASQUERADE_AS(`example.com')dnl
   FEATURE(masquerade_envelope)dnl
   FEATURE(masquerade_entire_domain)dnl
   ```

   En el texto anterior, haga lo siguiente:
   + *email-smtp.us-west-2.amazonaws.com*Sustitúyalo por el punto de conexión SMTP de Amazon SES que desee utilizar.
   + *example.com*Sustitúyalo por el dominio que quieres usar para enviar correos electrónicos.

   Cuando termine, guarde el archivo.
**nota**  
Amazon EC2 restringe las comunicaciones a través del puerto 25 de forma predeterminada. Si utiliza Sendmail en una instancia de Amazon EC2, debe completar la [Solicitud para eliminar los límites de envío de correo electrónico](https://aws-portal.amazon.com/gp/aws/html-forms-controller/contactus/ec2-email-limit-rdns-request).

1. En la línea de comandos, escriba el siguiente comando para poder escribir en *sendmail.cf*:

   ```
   sudo chmod 666 /etc/mail/sendmail.cf
   ```

1. En la línea de comandos, escriba el siguiente comando para volver a generar *sendmail.cf*:

   ```
   sudo sh -c 'm4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf'
   ```
**nota**  
Si detecta errores como "Command not found" y "No such file or directory", asegúrese de que los paquetes `sendmail-cf` y `m4` están instalados en el sistema.

1. En la línea de comandos, escriba el siguiente comando para restablecer los permisos de *sendmail.cf* a solo lectura:

   ```
   sudo chmod 644 /etc/mail/sendmail.cf
   ```

1. En la línea de comandos, escriba el siguiente comando para reiniciar Sendmail:

   ```
   sudo /etc/init.d/sendmail restart
   ```

   *Según la versión de Linux o Sendmail, si lo anterior no funciona, pruebe lo siguiente:*

   ```
   sudo su service sendmail restart
   ```

1. Siga los pasos que se describen a continuación para enviar un correo electrónico de prueba:

   1. En la línea de comandos, escriba el comando siguiente:

      ```
      /usr/sbin/sendmail -vf sender@example.com recipient@example.com
      ```

      *sender@example.com*Sustitúyelo por tu dirección de correo electrónico de origen. *recipient@example.com*Sustitúyala por la dirección de destino. Cuando haya terminado, pulse Enter.

   1. Escriba el siguiente contenido del mensaje. Pulse Enter al final de cada línea.

      ```
      From: sender@example.com
      To: recipient@example.com
      Subject: Amazon SES test email
      
      This is a test message sent from Amazon SES using Sendmail.
      ```

      Cuando haya terminado de escribir el contenido del correo electrónico, pulse Ctrl\$1D para enviarlo.

1. Compruebe el cliente de correo electrónico del destinatario para el correo electrónico. Si no puede encontrar el correo electrónico, busque en la carpeta de correo no deseado. Si continúa sin poder encontrar el email, consulte el registro de Sendmail en su servidor de email. El registro suele estar ubicado en*/var/log/mail.log* o*/var/log/maillog*. 

# Integración de Amazon SES con SMTP de IIS de Microsoft Windows Server
<a name="send-email-windows-server"></a>

Puede configurar el servidor SMTP de IIS de Microsoft Windows Server para enviar correo electrónico a través de Amazon SES. Estas instrucciones se escribieron con Microsoft Windows Server 2022 en una instancia de Amazon EC2. Puede utilizar la misma configuración en Microsoft Windows Server 2016.

**nota**  
Windows Server es una aplicación de terceros y no está desarrollada ni respaldada por Amazon Web Services. Los procedimientos de esta sección se proporcionan únicamente con fines informativos y están sujetos a cambios sin previo aviso.

**Para integrar el servidor SMTP de IIS de Microsoft Windows Server con Amazon SES**

1. En primer lugar, configure Microsoft Windows Server 2022 siguiendo las instrucciones siguientes.

   1. En la [Consola de administración de Amazon EC2](https://console.aws.amazon.com/ec2/home), lance una nueva instancia base de Amazon EC2 para Microsoft Windows Server 2022.

   1. Conéctese a la instancia e inicie sesión en ella mediante el Escritorio remoto, según las instrucciones de [Introducción a las instancias de Amazon EC2 para Windows](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/EC2Win_GetStarted.html).

   1. Lanzar el panel de Server Manager.

   1. Instale el rol **Web Server**. Asegúrese de incluir las **herramientas de compatibilidad de administración de IIS 10** (una opción situada en la casilla de verificación **del servidor web**).

   1. Instale la característica **SMTP Server**.

1. A continuación, configurar el servicio de SMTP IIS con las siguientes instrucciones.

   1. Vuelva al panel de Server Manager.

   1. En el menú **Herramientas**, elija **Internet Information Services (IIS) 10.0 Manager**.

   1. Haga clic con el botón derecho en **SMTP Virtual Server \$11** y, a continuación, seleccione **Properties**.

   1. En la pestaña **Access**, en **Relay Restrictions**, elija **Relay**.

   1. En el cuadro de diálogo **Relay Restrictions**, elija **Add**.

   1. En **Single Computer**, introduzca **127.0.0.1** para la dirección IP. Ahora ha concedido acceso para que este servidor retransmita email a Amazon SES a través del servicio SMTP de IIS.

      En este procedimiento, suponemos que sus correos electrónicos se generan en este servidor. Si la aplicación que genera el correo electrónico se ejecuta en un servidor independiente, debe conceder acceso de retransmisión para dicho servidor en SMTP de IIS.
**nota**  
Para ampliar el relé de SMTP a subredes privadas, para **Relay Restriction**, utilice **Single Computer** 127.0.0.1 y **Group of Computers** 172.1.1.0 - 255.255.255.0 (en la sección de máscara de red). Para **Connection**, use **Single Computer** 127.0.0.1 y **Group of Computers** 172.1.1.0 - 255.255.255.0 (en la sección de máscara de red).

1. Por último, configure el servidor para enviar correo electrónico a través de Amazon SES con las siguientes instrucciones.

   1. Vuelva al cuadro de diálogo **SMTP Virtual Server \$11 Properties** y, a continuación, elija la pestaña **Delivery**.

   1. En la pestaña **Delivery**, elija **Outbound Security**.

   1. Seleccione **Basic Authentication** (Autenticación básica) y, a continuación, ingrese sus credenciales de SMTP de Amazon SES. Puede obtener estas credenciales desde la consola de Amazon SES si sigue el procedimiento descrito en [Obtención de las credenciales de SMTP de Amazon SES](smtp-credentials.md).
**importante**  
Sus credenciales SMTP no son las mismas que su identificador de clave de AWS acceso y su clave de acceso secreta. No intente utilizar sus AWS credenciales para autenticarse en el punto final SMTP. Para obtener más información acerca de las credenciales, consulte [Tipos de credenciales de Amazon SES](send-email-concepts-credentials.md).

   1. Asegúrese de que **TLS encryption** está seleccionado.

   1. Vuelva a la pestaña **Delivery**.

   1. Elija **Outbound Connections**.

   1. En el cuadro de diálogo **Outbound Connections**, asegúrese de que el puerto sea 25 o 587. 

   1. Seleccione **Avanzado**.

   1. Para el nombre del **Smart host (Anfitrión inteligente)**, ingrese el punto de enlace de Amazon SES de que utilizará (por ejemplo, *email-smtp.us-west-2.amazonaws.com*). Para obtener una lista de los puntos de conexión URLs Regiones de AWS en los que Amazon SES está disponible, consulte [Amazon Simple Email Service (Amazon SES)](https://docs.aws.amazon.com/general/latest/gr/rande.html#ses_region) en el *Referencia general de AWS*.

   1. Vuelva al panel de Server Manager.

   1. En el panel de Server Manager, haga clic con el botón derecho en **SMTP Virtual Server \$1 1** y, a continuación, reinicie el servicio para recoger la nueva configuración.

   1. Envíe un correo electrónico a través de este servidor. Puede examinar los encabezados de mensaje para confirmar que se ha entregado a través de Amazon SES.

# Prueba de la conexión a la interfaz SMTP de Amazon SES mediante la línea de comandos
<a name="send-email-smtp-client-command-line"></a>

Puede utilizar los métodos descritos en esta sección desde la línea de comandos para probar la conexión con el punto de enlace SMTP de Amazon SES, validar las credenciales de SMTP y solucionar problemas de conexión. Estos procedimientos utilizan herramientas y bibliotecas que se incluyen con los sistemas operativos más comunes.

Para obtener información acerca de cómo solucionar problemas con las conexiones SMTP, consulte [Problemas de SMTP de Amazon SES](troubleshoot-smtp.md).

## Requisitos previos
<a name="send-email-smtp-client-command-line-prereqs"></a>

Cuando se conecta a la interfaz SMTP de Amazon SES, debe proporcionar un conjunto de credenciales de SMTP. Estas credenciales SMTP son diferentes de AWS las credenciales estándar. Los dos tipos de credenciales no son intercambiables. Para obtener más información sobre cómo obtener sus credenciales de SMTP, consulte [Obtención de las credenciales de SMTP de Amazon SES](smtp-credentials.md).

## Prueba de la conexión a la interfaz de SMTP de Amazon SES
<a name="send-email-smtp-client-command-line-testing"></a>

Puede utilizar la línea de comandos para probar su conexión a la interfaz de SMTP de Amazon SES sin autenticar ni enviar ningún mensaje. Este procedimiento es útil para solucionar problemas de conectividad básicos. Si la conexión de prueba produce un error, consulte [Problemas de SMTP](troubleshoot-smtp.md).

En esta sección se incluyen procedimientos para probar la conexión mediante OpenSSL (que se incluye en la mayoría de las distribuciones de Linux, macOS y Unix, y también está disponible para Windows) como `Test-NetConnection` el cmdlet PowerShell in (que se incluye en las versiones más recientes de Windows).

------
#### [ Linux, macOS, or Unix ]

Hay dos formas de conectarse a la interfaz de SMTP de Amazon SES con OpenSSL: mediante SSL explícito a través del puerto 587 o mediante SSL implícito a través del puerto 465.

**Para conectarse a la interfaz SMTP mediante SSL explícito**
+ En la línea de comandos, ingrese el comando siguiente para conectarse al servidor SMTP de Amazon SES:

  ```
  openssl s_client -crlf -quiet -starttls smtp -connect email-smtp.us-west-2.amazonaws.com:587
  ```

  En el comando anterior, *email-smtp.us-west-2.amazonaws.com* sustitúyalo por la URL del punto de conexión SMTP de Amazon SES de tu AWS región. Para obtener más información, consulte [Regiones y Amazon SES](regions.md).

  Si la conexión se realiza correctamente, aparece un resultado similar al siguiente:

  ```
  depth=2 C = US, O = Amazon, CN = Amazon Root CA 1
  verify return:1
  depth=1 C = US, O = Amazon, OU = Server CA 1B, CN = Amazon
  verify return:1
  depth=0 CN = email-smtp.us-west-2.amazonaws.com
  verify return:1
  250 Ok
  ```

  La conexión se cierra automáticamente después de unos 10 segundos de inactividad.

Como alternativa, puede utilizar SSL implícito para conectarse a la interfaz SMTP a través del puerto 465.

**Para conectarse a la interfaz SMTP mediante SSL implícito**
+ En la línea de comandos, ingrese el comando siguiente para conectarse al servidor SMTP de Amazon SES:

  ```
  openssl s_client -crlf -quiet -connect email-smtp.us-west-2.amazonaws.com:465
  ```

  En el comando anterior, *email-smtp.us-west-2.amazonaws.com* sustitúyalo por la URL del punto de conexión SMTP de Amazon SES de tu AWS región. Para obtener más información, consulte [Regiones y Amazon SES](regions.md).

  Si la conexión se realiza correctamente, aparece un resultado similar al siguiente:

  ```
  depth=2 C = US, O = Amazon, CN = Amazon Root CA 1
  verify return:1
  depth=1 C = US, O = Amazon, OU = Server CA 1B, CN = Amazon
  verify return:1
  depth=0 CN = email-smtp.us-west-2.amazonaws.com
  verify return:1
  220 email-smtp.amazonaws.com ESMTP SimpleEmailService-d-VCSHDP1YZ A1b2C3d4E5f6G7h8I9j0
  ```

  La conexión se cierra automáticamente después de unos 10 segundos de inactividad.

------
#### [ PowerShell ]

Puede usar el NetConnection cmdlet [Test-](https://docs.microsoft.com/en-us/powershell/module/nettcpip/test-netconnection) PowerShell para conectarse al servidor SMTP de Amazon SES.

**nota**  
El cmdlet `Test-NetConnection` puede determinar si la computadora puede conectarse al punto de enlace de SMTP de Amazon SES. Sin embargo, no comprueba si el equipo puede realizar una conexión SSL implícita o explícita al punto de enlace SMTP. Para probar una conexión SSL, puede instalar OpenSSL para Windows para enviar un correo electrónico de prueba.

**Para conectarse a la interfaz SMTP mediante el cmdlet `Test-NetConnection`**
+ En PowerShell, introduzca el siguiente comando para conectarse al servidor SMTP de Amazon SES:

  ```
  Test-NetConnection -Port 587 -ComputerName email-smtp.us-west-2.amazonaws.com
  ```

  En el comando anterior, *email-smtp.us-west-2.amazonaws.com* sustitúyalo por la URL del punto de conexión SMTP de Amazon SES de tu AWS región y *587* sustitúyelo por el número de puerto. Para obtener más información acerca de los puntos de enlace regionales de Amazon SES, consulte [Regiones y Amazon SES](regions.md).

  Si la conexión se ha realizado correctamente, verá un resultado similar al siguiente ejemplo:

  ```
  ComputerName     : email-smtp.us-west-2.amazonaws.com
  RemoteAddress    : 198.51.100.126
  RemotePort       : 587
  InterfaceAlias   : Ethernet
  SourceAddress    : 203.0.113.46
  TcpTestSucceeded : True
  ```

------

## Uso de la línea de comandos para enviar correo electrónico con la interfaz de SMTP de Amazon SES
<a name="send-email-using-openssl"></a>

También puede utilizar la línea de comandos para enviar mensajes mediante la interfaz de SMTP de Amazon SES. Este procedimiento es útil para probar las credenciales de SMTP y la capacidad de destinatarios específicos para recibir mensajes que envíe mediante Amazon SES.

------
#### [ Linux, macOS, or Unix ]

Cuando un remitente de correo electrónico se conecta a un servidor SMTP, el cliente emite un conjunto estándar de solicitudes y el servidor responde a cada solicitud con una respuesta estándar. Esta serie de solicitudes y respuestas se denomina *conversación de SMTP*. Cuando se conecte al servidor SMTP de Amazon SES con OpenSSL, el servidor esperará que se produzca una conversación de SMTP.

Si tiene previsto utilizar OpenSSL para conectarse a la interfaz SMTP, tendrá que codificar sus credenciales de SMTP en base64. Esta sección incluye procedimientos para codificar sus credenciales en base64.

**Para enviar un correo electrónico desde la línea de comandos utilizando la interfaz de SMTP**

1. Introduzca lo siguiente en la línea de comandos y *email-smtp.us-west-2.amazonaws.com* sustitúyalo por la URL del punto de conexión SMTP de Amazon SES correspondiente a su Región de AWS. Para obtener más información, consulte[Regiones y Amazon SES](regions.md). :

   ```
    1. #!/bin/bash
    2. 
    3. # Prompt user to provide following information
    4. read -p "Configuration set: " CONFIGSET
    5. read -p "Enter SMTP username: " SMTPUsername
    6. read -p "Enter SMTP password: " SMTPPassword
    7. read -p "Sender email address: " MAILFROM
    8. read -p "Receiver email address: " RCPT
    9. read -p "Email subject: " SUBJECT
   10. read -p "Message to send: " DATA
   11. 
   12. echo
   13. 
   14. # Encode SMTP username and password using base64
   15. EncodedSMTPUsername=$(echo -n "$SMTPUsername" | openssl enc -base64)
   16. EncodedSMTPPassword=$(echo -n "$SMTPPassword" | openssl enc -base64)
   17. 
   18. # Construct the email
   19. Email="EHLO example.com
   20. AUTH LOGIN
   21. $EncodedSMTPUsername
   22. $EncodedSMTPPassword
   23. MAIL FROM: $MAILFROM
   24. RCPT TO: $RCPT
   25. DATA
   26. X-SES-CONFIGURATION-SET: $CONFIGSET
   27. From: $MAILFROM
   28. To: $RCPT
   29. Subject: $SUBJECT
   30. 
   31. $DATA
   32. .
   33. QUIT"
   34. 
   35. echo "$Email" | openssl s_client -crlf -quiet -starttls smtp -connect email-smtp.us-west-2.amazonaws.com:587
   ```

1. En la petición de cada variable, escriba sus propios valores.

1. 
   + Para realizar el envío mediante SSL implícito a través del puerto 465, use:

     ```
     openssl s_client -crlf -quiet -connect email-smtp.us-west-2.amazonaws.com:465
     ```

   Si Amazon SES aceptó el mensaje, verá un resultado similar al siguiente ejemplo:

   ```
   250 Ok 01010160d7de98d8-21e57d9a-JZho-416c-bbe1-8ebaAexample-000000
   ```

   La cadena de números y texto que sigue a `250 Ok` es el ID de mensaje del correo electrónico.
**nota**  
La conexión se cierra automáticamente después de unos 10 segundos de inactividad.

------
#### [ PowerShell ]

Puede utilizar el [Net.Mail. SmtpClient](https://docs.microsoft.com/en-us/dotnet/api/system.net.mail.smtpclient?view=netframework-4.8)clase para enviar correos electrónicos mediante SSL explícito a través del puerto 587.

**nota**  
La clase `Net.Mail.SmtpClient` está oficialmente obsoleta y Microsoft recomienda que utilice bibliotecas de terceros. Este código se ha diseñado únicamente para fines de prueba y no debe usarse para cargas de trabajo de producción.

**Para enviar un correo electrónico PowerShell mediante SSL explícito**

1. En un editor de texto, cree un nuevo archivo. Pegue el código siguiente en el archivo:

   ```
   function SendEmail($Server, $Port, $Sender, $Recipient, $Subject, $Body) {
       $Credentials = [Net.NetworkCredential](Get-Credential)
   
       $SMTPClient = New-Object Net.Mail.SmtpClient($Server, $Port)
       $SMTPClient.EnableSsl = $true
       $SMTPClient.Credentials = New-Object System.Net.NetworkCredential($Credentials.Username, $Credentials.Password);
   
       try {
           Write-Output "Sending message..."
           $SMTPClient.Send($Sender, $Recipient, $Subject, $Body)
           Write-Output "Message successfully sent to $($Recipient)"
       } catch [System.Exception] {
           Write-Output "An error occurred:"
           Write-Error $_
       }
   }
   
   function SendTestEmail(){
       $Server = "email-smtp.us-west-2.amazonaws.com"
       $Port = 587
   
       $Subject = "Test email sent from Amazon SES"
       $Body = "This message was sent from Amazon SES using PowerShell (explicit SSL, port 587)."
   
       $Sender = "sender@example.com"
       $Recipient = "recipient@example.com"
   
       SendEmail $Server $Port $Sender $Recipient $Subject $Body
   }
   
   SendTestEmail
   ```

   Cuando haya terminado, guarde el archivo como `SendEmail.ps1`.

1. Realice los cambios siguientes en el archivo que creó en el paso anterior:
   + *sender@example.com*Sustitúyala por la dirección de correo electrónico desde la que deseas enviar el mensaje.
   + *recipient@example.com*Sustitúyala por la dirección de correo electrónico a la que deseas enviar el mensaje.
   + *email-smtp.us-west-2.amazonaws.com*Sustitúyala por la URL del punto de conexión SMTP de Amazon SES de tu AWS región. Para obtener más información, consulte [Regiones y Amazon SES](regions.md).

1. En PowerShell, introduzca el siguiente comando:

   ```
   .\path\to\SendEmail.ps1
   ```

   En el comando anterior, *path\$1to\$1SendEmail.ps1* sustituya por la ruta del archivo que creó en el paso 1.

1. Cuando se le solicite, escriba su nombre de usuario y contraseña de SMTP.

Como alternativa, puede utilizar el [System.Web.Mail. SmtpMail](https://docs.microsoft.com/en-us/dotnet/api/system.web.mail.smtpmail?view=netframework-4.8)clase para enviar correos electrónicos mediante SSL implícito a través del puerto 465.

**nota**  
La clase `System.Web.Mail.SmtpMail` está oficialmente obsoleta y Microsoft recomienda que utilice bibliotecas de terceros. Este código se ha diseñado únicamente para fines de prueba y no debe usarse para cargas de trabajo de producción.

**Para enviar un correo electrónico PowerShell mediante SSL implícito**

1. En un editor de texto, cree un nuevo archivo. Pegue el código siguiente en el archivo:

   ```
   [System.Reflection.Assembly]::LoadWithPartialName("System.Web") > $null
   
   function SendEmail($Server, $Port, $Sender, $Recipient, $Subject, $Body) {
       $Credentials = [Net.NetworkCredential](Get-Credential)
   
       $mail = New-Object System.Web.Mail.MailMessage
       $mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpserver", $Server)
       $mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpserverport", $Port)
       $mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpusessl", $true)
       $mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername", $Credentials.UserName)
       $mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword", $Credentials.Password)
       $mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout", $timeout / 1000)
       $mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusing", 2)
       $mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate", 1)
   
       $mail.From = $Sender
       $mail.To = $Recipient
       $mail.Subject = $Subject
       $mail.Body = $Body
   
       try {
           Write-Output "Sending message..."
           [System.Web.Mail.SmtpMail]::Send($mail)
           Write-Output "Message successfully sent to $($Recipient)"
       } catch [System.Exception] {
           Write-Output "An error occurred:"
           Write-Error $_
       }
   }
   
   function SendTestEmail(){
       $Server = "email-smtp.us-west-2.amazonaws.com"
       $Port = 465
       
       $Subject = "Test email sent from Amazon SES"
       $Body = "This message was sent from Amazon SES using PowerShell (implicit SSL, port 465)."
   
       $Sender = "sender@example.com"
       $Recipient = "recipient@example.com"
   
       SendEmail $Server $Port $Sender $Recipient $Subject $Body
   }
   
   SendTestEmail
   ```

   Cuando haya terminado, guarde el archivo como `SendEmail.ps1`.

1. Realice los cambios siguientes en el archivo que creó en el paso anterior:
   + *sender@example.com*Sustitúyala por la dirección de correo electrónico desde la que deseas enviar el mensaje.
   + *recipient@example.com*Sustitúyala por la dirección de correo electrónico a la que deseas enviar el mensaje.
   + *email-smtp.us-west-2.amazonaws.com*Sustitúyala por la URL del punto de conexión SMTP de Amazon SES de tu AWS región. Para obtener más información, consulte [Regiones y Amazon SES](regions.md).

1. En PowerShell, introduzca el siguiente comando:

   ```
   .\path\to\SendEmail.ps1
   ```

   En el comando anterior, *path\$1to\$1SendEmail.ps1* sustituya por la ruta del archivo que creó en el paso 1.

1. Cuando se le solicite, escriba su nombre de usuario y contraseña de SMTP.

------

# Uso de la API de Amazon SES para enviar correo electrónico
<a name="send-email-api"></a>

Para enviar email de producción a través de Amazon SES, puede utilizar la interfaz de Simple Mail Transfer Protocol (SMTP) o la API de Amazon SES. Para obtener más información sobre la interfaz de SMTP, consulte [Uso de la interfaz de SMTP de Amazon SES para enviar correo electrónico](send-email-smtp.md). Esta sección describe cómo enviar correo electrónico utilizando la API. 

Cuando envía un correo electrónico mediante la API de Amazon SES, se especifica el contenido del mensaje y Amazon SES crea un correo electrónico MIME. También puede ensamblar el correo electrónico usted mismo para tener control total sobre el contenido del mensaje. Para obtener más información acerca del uso de la API de REST, consulte la [Referencia de la API de Amazon Simple Email Service](https://docs.aws.amazon.com/ses/latest/APIReference/). Para obtener una lista de los puntos de conexión URLs en los Regiones de AWS que Amazon SES está disponible, consulte los [puntos de enlace y las cuotas de Amazon Simple Email Service](https://docs.aws.amazon.com/general/latest/gr/ses.html) en. *Referencia general de AWS*

Puede llamar al API de las formas siguientes:
+ **Realizar solicitudes HTTPS directas:** este es el método más avanzado, ya que debe administrar manualmente la autenticación y la firma de sus solicitudes y, a continuación, crear las solicitudes de forma manual. Para obtener información acerca de la API de Amazon SES, consulte la página [Bienvenido](https://docs.aws.amazon.com/ses/latest/APIReference-V2/Welcome.html) en la *Referencia de la API v2*.
+ **Utilice un AWS SDK:**AWS SDKs facilite el APIs acceso a varios AWS servicios, incluido Amazon SES. Cuando utiliza un SDK, se encarga de la autenticación, la firma de solicitudes, la lógica de reintentos, el control de errores y otras funciones de bajo nivel para que pueda centrarse en crear aplicaciones que satisfagan a sus clientes.
+ **Utilizar una interfaz de línea de comandos:** la [AWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) es la herramienta de línea de comandos para Amazon SES. También ofrecemos las [AWS herramientas PowerShell para](https://aws.amazon.com/powershell/) quienes escriben en el PowerShell entorno.

Independientemente de si accede a la API de Amazon SES directa o indirectamente a través de un AWS SDK, AWS Command Line Interface o las AWS herramientas para PowerShell, la API de Amazon SES le ofrece dos formas diferentes de enviar un correo electrónico, según el grado de control que desee sobre la composición del mensaje de correo electrónico:
+ **Formateado**: Amazon SES compone y envía un mensaje de correo electrónico con el formato adecuado. Solo hay que suministrar las direcciones “From:” (De:) y “To:” (Para:), un asunto y el cuerpo del mensaje. Amazon SES se encarga de todo lo demás. Para obtener más información, consulte [Envío de correo electrónico con formato mediante la API de Amazon SES](send-email-formatted.md).
+ **Sin procesar**: puede componer manualmente y enviar un mensaje de correo electrónico, especificando sus propios encabezados de correo electrónico y tipos de MIME. Si tiene experiencia en dar formato a su propio correo electrónico, esta interfaz le ofrece un mayor control sobre la composición del mensaje. Para obtener más información, consulte [Envío de correo electrónico sin procesar mediante la API v2 de Amazon SES](send-email-raw.md).

**Topics**
+ [Envío de correo electrónico con formato mediante la API de Amazon SES](send-email-formatted.md)
+ [Envío de correo electrónico sin procesar mediante la API v2 de Amazon SES](send-email-raw.md)
+ [Uso de plantillas para el envío de correo electrónico personalizado con la API de Amazon SES](send-personalized-email-api.md)
+ [Envío de correo electrónico a través de Amazon SES mediante un AWS SDK](send-an-email-using-sdk-programmatically.md)
+ [Codificaciones de contenido compatibles con Amazon SES](content-encodings.md)

# Envío de correo electrónico con formato mediante la API de Amazon SES
<a name="send-email-formatted"></a>

Puede enviar un correo electrónico formateado utilizando Consola de administración de AWS o llamando a la API de Amazon SES a través de una aplicación directamente, o indirectamente a través de un AWS SDK AWS Command Line Interface, el o el AWS Tools for Windows PowerShell.

La API de Amazon SES proporciona la acción `SendEmail`, que le permite componer y enviar un email con formato. `SendEmail` requiere una dirección de remitente “From:”, una dirección de destinatario “To:”, un asunto de mensaje y un cuerpo de mensaje (texto, HTML o ambos). Para obtener más información, consulte [SendEmail](https://docs.aws.amazon.com/ses/latest/APIReference/API_SendEmail.html)(Referencia de la API) o [SendEmail](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_SendEmail.html)(Referencia de la API v2).

**nota**  
La cadena de la dirección de correo electrónico debe ser un ASCII de 7 bits. Si desea enviar a direcciones de correo electrónico que contengan caracteres Unicode en la parte de dominio de una dirección o bien desde ellas, debe cifrar el dominio utilizando Punycode. Para obtener más información, consulte [RFC 3492](https://tools.ietf.org/html/rfc3492).

Para obtener ejemplos sobre cómo componer un mensaje con formato utilizando varios lenguajes de programación, consulte [Ejemplos de código](send-an-email-using-sdk-programmatically.md#send-an-email-using-sdk-programmatically-examples).

Para obtener consejos sobre cómo incrementar la velocidad de envío de correo electrónico al realizar varias llamadas a `SendEmail`, consulte [Aumento del rendimiento con Amazon SES](troubleshoot-throughput-problems.md).

# Envío de correo electrónico sin procesar mediante la API v2 de Amazon SES
<a name="send-email-raw"></a>

Puede utilizar la operación `SendEmail` de la API v2 de Amazon SES en la que se haya especificado el tipo de contenido `raw` para enviar mensajes personalizados a sus destinatarios con el formato de correo electrónico sin procesar.

## Acerca de los campos de encabezados de correo electrónico
<a name="send-email-raw-headers"></a>

Simple Mail Transfer Protocol (SMTP) especifica la forma en que se envían los mensajes de correo electrónico definiendo el sobre del correo y algunos de sus parámetros, pero no se preocupa del contenido del mensaje. En lugar de ello, el formato de mensajes de Internet ([RFC 5322](https://www.ietf.org/rfc/rfc5322.txt)) define cómo se construye el mensaje.

Con la especificación de formato de mensajes de Internet, todos los mensajes de correo electrónico se componen de un encabezado y de un cuerpo. El encabezado se compone de metadatos de mensaje y el cuerpo contiene el mensaje propiamente dicho. Para obtener más información acerca los encabezados y cuerpos de correo electrónico, consulte [Formato de correo electrónico y Amazon SES](send-email-concepts-email-format.md).

## Uso de un constructo de mensajes MIME de correo electrónico sin procesar
<a name="send-email-raw-mime"></a>

El protocolo SMTP fue diseñado originalmente para enviar mensajes de correo electrónico que solo contenían caracteres ASCII de 7 bits. Esta especificación hace que SMTP no sea suficiente para codificaciones de texto no ASCII (como Unicode), contenido binario o archivos adjuntos. El estándar Multipurpose Internet Mail Extensions (MIME) se ha desarrollado para poder enviar muchas otras clases de contenido utilizando SMTP.

El estándar MIME funciona desglosando el cuerpo del mensaje en varias partes y, a continuación, especificando lo que hay que hacer con cada parte. Por ejemplo, una parte del cuerpo de un mensaje de correo electrónico podría ser texto sin formato, mientras que otra podría ser HTML. Además, MIME permite a los mensajes de correo electrónico contener uno o más archivos adjuntos. Los destinatarios del mensaje pueden ver los archivos adjuntos desde sus clientes de correo electrónico o pueden guardar los archivos adjuntos.

El encabezado del mensaje y el contenido están separados por una línea en blanco. Cada parte del correo electrónico está separada por un límite, una cadena de caracteres que indica el inicio y el final de cada parte.

El mensaje multiparte del siguiente ejemplo contiene un texto y una parte HTML y un archivo adjunto. El archivo adjunto se debe colocar justo debajo de los [encabezados de archivo adjunto](#send-email-mime-encoding-files) y, por lo general, se codifica en `base64` como se muestra en este ejemplo.

```
 1. From: "Sender Name" <sender@example.com>
 2. To: recipient@example.com
 3. Subject: Customer service contact info
 4. Content-Type: multipart/mixed;
 5.     boundary="a3f166a86b56ff6c37755292d690675717ea3cd9de81228ec2b76ed4a15d6d1a"
 6. 
 7. --a3f166a86b56ff6c37755292d690675717ea3cd9de81228ec2b76ed4a15d6d1a
 8. Content-Type: multipart/alternative;
 9.     boundary="sub_a3f166a86b56ff6c37755292d690675717ea3cd9de81228ec2b76ed4a15d6d1a"
10. 
11. --sub_a3f166a86b56ff6c37755292d690675717ea3cd9de81228ec2b76ed4a15d6d1a
12. Content-Type: text/plain; charset=iso-8859-1
13. Content-Transfer-Encoding: quoted-printable
14. 
15. Please see the attached file for a list of customers to contact.
16. 
17. --sub_a3f166a86b56ff6c37755292d690675717ea3cd9de81228ec2b76ed4a15d6d1a
18. Content-Type: text/html; charset=iso-8859-1
19. Content-Transfer-Encoding: quoted-printable
20. 
21. <html>
22. <head></head>
23. <body>
24. <h1>Hello!</h1>
25. <p>Please see the attached file for a list of customers to contact.</p>
26. </body>
27. </html>
28. 
29. --sub_a3f166a86b56ff6c37755292d690675717ea3cd9de81228ec2b76ed4a15d6d1a--
30. 
31. --a3f166a86b56ff6c37755292d690675717ea3cd9de81228ec2b76ed4a15d6d1a
32. Content-Type: text/plain; name="customers.txt"
33. Content-Description: customers.txt
34. Content-Disposition: attachment;filename="customers.txt";
35.     creation-date="Sat, 05 Aug 2017 19:35:36 GMT";
36. Content-Transfer-Encoding: base64
37. 
38. SUQsRmlyc3ROYW1lLExhc3ROYW1lLENvdW50cnkKMzQ4LEpvaG4sU3RpbGVzLENhbmFkYQo5MjM4
39. OSxKaWUsTGl1LENoaW5hCjczNCxTaGlybGV5LFJvZHJpZ3VleixVbml0ZWQgU3RhdGVzCjI4OTMs
40. QW5heWEsSXllbmdhcixJbmRpYQ==
41. 
42. --a3f166a86b56ff6c37755292d690675717ea3cd9de81228ec2b76ed4a15d6d1a--
```

El tipo de contenido del mensaje es `multipart/mixed`, lo que indica que el mensaje tiene muchas partes (en este ejemplo, un cuerpo y un archivo adjunto) y el cliente de recepción debe gestionar cada parte por separado.

Anidada en la sección del cuerpo, hay una segunda parte que utiliza el tipo de contenido `multipart/alternative`. Este tipo de contenido indica que cada parte contiene otras versiones alternativas del mismo contenido (en este caso, una versión de texto y una versión en HTML). Si el cliente de correo electrónico del destinatario puede mostrar contenido HTML, muestra la versión HTML del cuerpo del mensaje. Si el cliente de correo electrónico del destinatario no puede mostrar contenido HTML, muestra la versión de texto sin formato del cuerpo del mensaje.

Ambas versiones del mensaje también contendrán un archivo adjunto (en este caso, un archivo de texto breve que contiene los nombres de algunos clientes).

Al anidar una parte de MIME dentro de otra parte, como en este ejemplo, la parte anidada debe utilizar un parámetro `boundary` que es distinto del parámetro `boundary` en la parte principal. Estos límites deben ser cadenas de caracteres únicas. Para definir un límite entre las partes de MIME, escriba dos guiones (--) seguidos de la cadena límite. Al final de una parte MIME, coloque dos guiones tanto al comienzo como al final de la cadena límite.

**nota**  
Un mensaje no puede tener más de 500 partes MIME.

### Codificación MIME
<a name="send-email-mime-encoding"></a>

Para mantener la compatibilidad con sistemas antiguos, Amazon SES respeta la limitación de ASCII de 7 bits de SMTP, tal y como se define en [RFC 2821](https://tools.ietf.org/html/rfc2821). Si desea enviar contenido que contiene caracteres no ASCII, debe codificar los caracteres en un formato que utiliza caracteres ASCII de 7 bits.

#### Direcciones de correo electrónico
<a name="send-email-mime-encoding-addresses"></a>

La cadena de la dirección de correo electrónico debe ser un ASCII de 7 bits. Si desea enviar a direcciones de correo electrónico que contengan caracteres Unicode en la parte de dominio de una dirección o bien desde ellas, debe cifrar el dominio utilizando Punycode. Punycode no se permite en la parte local de la dirección de correo electrónico (la parte delante del signo @) ni en el nombre de "remitente descriptivo". Si desea utilizar caracteres Unicode en el nombre de “remitente descriptivo“, debe codificar el nombre de “remitente descriptivo“ utilizando la sintaxis de palabra cifrada MIME, tal y como se describe en esta sección. Para obtener más información acerca de Punycode, consulte [RFC 3492](http://tools.ietf.org/html/rfc3492).

**nota**  
Esta regla solo se aplica a las direcciones de correo electrónico que se especifican en el sobre, no a los encabezados del mensaje. Cuando se utiliza la operación `SendEmail` de la API v2 de Amazon SES, las direcciones que se especifican en los parámetros `Source` y `Destinations` definen el remitente y los destinatarios del sobre, respectivamente.

#### Encabezados de correo electrónico
<a name="send-email-mime-encoding-headers"></a>

Para codificar el encabezado de un mensaje, utilice la sintaxis de palabras codificadas de MIME. la sintaxis de palabras codificadas de MIME utiliza el formato siguiente:

```
=?charset?encoding?encoded-text?=
```

El valor de `encoding` puede ser `Q` o `B`. Si el valor de encoding es `Q`, el valor `encoded-text` debe utilizar la codificación Q. Si el valor de encoding es `B`, el valor `encoded-text` debe utilizar la codificación Base64.

Por ejemplo, si desea utilizar la cadena “Як ти поживаєш?” en la línea de asunto de un correo electrónico, puede utilizar cualquiera de las siguientes codificaciones:
+ **Codificación Q**

  ```
  =?utf-8?Q?=D0=AF=D0=BA_=D1=82=D0=B8_=D0=BF=D0=BE=D0=B6=D0=B8=D0=B2=D0=B0=D1=94=D1=88=3F?=
  ```
+ **Codificación Base64**

  ```
  =?utf-8?B?0K/QuiDRgtC4INC/0L7QttC40LLQsNGU0Yg/?=
  ```

Para obtener más información sobre la codificación Q, consulte [RFC 2047](https://tools.ietf.org/html/rfc2047). Para obtener más información sobre la codificación Base64, consulte [RFC 2045](https://tools.ietf.org/html/rfc2045).

#### Cuerpo del mensaje
<a name="send-email-mime-encoding-body"></a>

Para codificar el cuerpo de un mensaje, puede utilizar la codificación quoted-printable o la codificación Base64. A continuación, utilice el encabezado `Content-Transfer-Encoding` para indicar el esquema de codificación que ha utilizado.

Por ejemplo, supongamos que el cuerpo del mensaje contiene el texto siguiente: 

१९७२ मे रे टॉमलिंसन ने पहला ई-मेल संदेश भेजा \$1 रे टॉमलिंसन ने ही सर्वप्रथम @ चिन्ह का चयन किया और इन्ही को ईमेल का आविष्कारक माना जाता है

Si opta por codificar este texto con la codificación Base64, en primer lugar, especifique el siguiente encabezado:

```
Content-Transfer-Encoding: base64
```

A continuación, en la sección del cuerpo del mensaje, incluya el texto codificado en Base64:

```
4KWn4KWv4KWt4KWoIOCkruClhyDgpLDgpYcg4KSf4KWJ4KSu4KSy4KS/4KSC4KS44KSoIOCkqOCl
hyDgpKrgpLngpLLgpL4g4KSILeCkruClh+CksiDgpLjgpILgpKbgpYfgpLYg4KSt4KWH4KSc4KS+
IHwg4KSw4KWHIOCkn+ClieCkruCksuCkv+CkguCkuOCkqCDgpKjgpYcg4KS54KWAIOCkuOCksOCl
jeCkteCkquCljeCksOCkpeCkriBAIOCkmuCkv+CkqOCljeCkuSDgpJXgpL4g4KSa4KSv4KSoIOCk
leCkv+Ckr+CkviDgpJTgpLAg4KSH4KSo4KWN4KS54KWAIOCkleCliyDgpIjgpK7gpYfgpLIg4KSV
4KS+IOCkhuCkteCkv+Ckt+CljeCkleCkvuCksOCklSDgpK7gpL7gpKjgpL4g4KSc4KS+4KSk4KS+
IOCkueCliAo=
```

**nota**  
En algunos casos, puede utilizar la `Content-Transfer-Encoding` de 8 bits en los mensajes que envíe a través de Amazon SES. Sin embargo, si Amazon SES tiene que realizar algún cambio en los mensajes (por ejemplo, cuando se utiliza el [seguimiento de apertura y de clics](faqs-metrics.md)), el contenido codificado en 8 bits podría no aparecer correctamente cuando llegue a las bandejas de correo de los destinatarios. Por este motivo, siempre debe codificar el contenido que no esté en ASCII de 7 bits.

#### Archivos adjuntos
<a name="send-email-mime-encoding-files"></a>

Para adjuntar un archivo a un correo electrónico, debe codificar el archivo adjunto con la codificación Base64. Los archivos adjuntos normalmente se colocan en partes de mensaje MIME dedicadas, que incluyen los siguientes encabezados:
+ **Tipo de contenido**: el tipo de archivo del archivo adjunto. A continuación, se muestran ejemplos de declaraciones comunes de Content-Type de MIME:
  + **Archivo de texto sin formato**: `Content-Type: text/plain; name="sample.txt"`
  + **Documento de Microsoft Word**: `Content-Type: application/msword; name="document.docx"`
  + **Imagen JPG**: `Content-Type: image/jpeg; name="photo.jpeg"`
+ **Disposición de contenido**: especifica cómo debe gestionar el contenido el cliente de correo electrónico del destinatario. Para los archivos adjuntos, este valor es `Content-Disposition: attachment`.
+ **Codificación de transferencia de contenido**: el esquema que se utilizó para codificar el archivo adjunto. Para los archivos adjuntos, este valor casi siempre es `base64`.
+ **El archivo adjunto codificado**: debe codificar el archivo adjunto real e incluirlo en el cuerpo, debajo de los encabezados de archivo adjunto, como [se muestra en el ejemplo](#send-email-raw-mime).

Amazon SES acepta los tipos de archivos más comunes. Para obtener una lista de los tipos de archivos que Amazon SES no acepta, consulte [Tipos de archivos adjuntos que no admite SES](attachments.md#mime-types).

## Envío de correo electrónico sin procesar mediante la API v2 de Amazon SES
<a name="send-email-raw-api"></a>

La API v2 de Amazon SES proporciona la acción `SendEmail`, que le permite redactar y enviar un mensaje de correo electrónico en el formato que especifique cuando el contenido se ha establecido en simple, sin procesar o con plantilla. Para obtener una descripción completa, consulte [https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_SendEmail.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_SendEmail.html). En el siguiente ejemplo, se especifica el tipo de contenido `raw` para enviar un mensaje con el formato de correo electrónico sin procesar.

**nota**  
Para obtener consejos sobre cómo incrementar la velocidad de envío de correo electrónico al realizar varias llamadas a `SendEmail`, consulte [Aumento del rendimiento con Amazon SES](troubleshoot-throughput-problems.md).

El cuerpo del mensaje debe contener un mensaje de correo electrónico sin procesar con el formato correcto, con campos de encabezado adecuados y con codificación del cuerpo del mensaje. Aunque es posible construir el mensaje sin procesar manualmente dentro de una aplicación, es mucho más sencillo hacerlo a través de las bibliotecas de correo existentes. 

------
#### [ Java ]

El siguiente ejemplo de código muestra cómo usar la [JavaMail](https://javaee.github.io/javamail/)biblioteca y la [AWS SDK para Java](https://aws.amazon.com/sdk-for-java)para redactar y enviar un correo electrónico sin procesar.

```
  1. package com.amazonaws.samples;
  2. 
  3. import java.io.ByteArrayOutputStream;
  4. import java.io.IOException;
  5. import java.io.PrintStream;
  6. import java.nio.ByteBuffer;
  7. import java.util.Properties;
  8. 
  9. // JavaMail libraries. Download the JavaMail API 
 10. // from https://javaee.github.io/javamail/
 11. import javax.activation.DataHandler;
 12. import javax.activation.DataSource;
 13. import javax.activation.FileDataSource;
 14. import javax.mail.Message;
 15. import javax.mail.MessagingException;
 16. import javax.mail.Session;
 17. import javax.mail.internet.AddressException;
 18. import javax.mail.internet.InternetAddress;
 19. import javax.mail.internet.MimeBodyPart;
 20. import javax.mail.internet.MimeMessage;
 21. import javax.mail.internet.MimeMultipart;
 22. 
 23. // AWS SDK libraries. Download the AWS SDK para Java // from https://aws.amazon.com/sdk-for-java
 24. import com.amazonaws.regions.Regions;
 25. import com.amazonaws.services.simpleemail.AmazonSimpleEmailService;
 26. import com.amazonaws.services.simpleemail.AmazonSimpleEmailServiceClientBuilder;
 27. import com.amazonaws.services.simpleemail.model.RawMessage;
 28. import com.amazonaws.services.simpleemail.model.SendRawEmailRequest;
 29. 
 30. public class AmazonSESSample {
 31. 
 32. 	// Replace sender@example.com with your "From" address.
 33. 	// This address must be verified with Amazon SES.
 34. 	private static String SENDER = "Sender Name <sender@example.com>";
 35. 
 36. 	// Replace recipient@example.com with a "To" address. If your account 
 37. 	// is still in the sandbox, this address must be verified.
 38. 	private static String RECIPIENT = "recipient@example.com";
 39. 
 40. 	// Specify a configuration set. If you do not want to use a configuration
 41. 	// set, comment the following variable, and the 
 42. 	// ConfigurationSetName=CONFIGURATION_SET argument below.
 43. 	private static String CONFIGURATION_SET = "ConfigSet";
 44. 
 45. 	// The subject line for the email.
 46. 	private static String SUBJECT = "Customer service contact info";
 47. 
 48. 	// The full path to the file that will be attached to the email.
 49. 	// If you're using Windows, escape backslashes as shown in this variable.
 50. 	private static String ATTACHMENT = "C:\\Users\\sender\\customers-to-contact.xlsx";
 51. 
 52. 	// The email body for recipients with non-HTML email clients.
 53. 	private static String BODY_TEXT = "Hello,\r\n"
 54.                                         + "Please see the attached file for a list "
 55.                                         + "of customers to contact.";
 56. 
 57. 	// The HTML body of the email.
 58. 	private static String BODY_HTML = "<html>"
 59.                                         + "<head></head>"
 60.                                         + "<body>"
 61.                                         + "<h1>Hello!</h1>"
 62.                                         + "<p>Please see the attached file for a "
 63.                                         + "list of customers to contact.</p>"
 64.                                         + "</body>"
 65.                                         + "</html>";
 66. 
 67.     public static void main(String[] args) throws AddressException, MessagingException, IOException {
 68.             	
 69.     	Session session = Session.getDefaultInstance(new Properties());
 70.         
 71.         // Create a new MimeMessage object.
 72.         MimeMessage message = new MimeMessage(session);
 73.         
 74.         // Add subject, from and to lines.
 75.         message.setSubject(SUBJECT, "UTF-8");
 76.         message.setFrom(new InternetAddress(SENDER));
 77.         message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(RECIPIENT));
 78. 
 79.         // Create a multipart/alternative child container.
 80.         MimeMultipart msg_body = new MimeMultipart("alternative");
 81.         
 82.         // Create a wrapper for the HTML and text parts.        
 83.         MimeBodyPart wrap = new MimeBodyPart();
 84.         
 85.         // Define the text part.
 86.         MimeBodyPart textPart = new MimeBodyPart();
 87.         textPart.setContent(BODY_TEXT, "text/plain; charset=UTF-8");
 88.                 
 89.         // Define the HTML part.
 90.         MimeBodyPart htmlPart = new MimeBodyPart();
 91.         htmlPart.setContent(BODY_HTML,"text/html; charset=UTF-8");
 92.                 
 93.         // Add the text and HTML parts to the child container.
 94.         msg_body.addBodyPart(textPart);
 95.         msg_body.addBodyPart(htmlPart);
 96.         
 97.         // Add the child container to the wrapper object.
 98.         wrap.setContent(msg_body);
 99.         
100.         // Create a multipart/mixed parent container.
101.         MimeMultipart msg = new MimeMultipart("mixed");
102.         
103.         // Add the parent container to the message.
104.         message.setContent(msg);
105.         
106.         // Add the multipart/alternative part to the message.
107.         msg.addBodyPart(wrap);
108.         
109.         // Define the attachment
110.         MimeBodyPart att = new MimeBodyPart();
111.         DataSource fds = new FileDataSource(ATTACHMENT);
112.         att.setDataHandler(new DataHandler(fds));
113.         att.setFileName(fds.getName());
114.         
115.         // Add the attachment to the message.
116.         msg.addBodyPart(att);
117. 
118.         // Try to send the email.
119.         try {
120.             System.out.println("Attempting to send an email through Amazon SES "
121.                               +"using the AWS SDK for Java...");
122. 
123.             // Instantiate an Amazon SES client, which will make the service 
124.             // call with the supplied AWS credentials.
125.             AmazonSimpleEmailService client = 
126.                     AmazonSimpleEmailServiceClientBuilder.standard()
127.                     // Replace US_WEST_2 with the AWS Region you're using for
128.                     // Amazon SES.
129.                     .withRegion(Regions.US_WEST_2).build();
130.             
131.             // Print the raw email content on the console
132.             PrintStream out = System.out;
133.             message.writeTo(out);
134. 
135.             // Send the email.
136.             ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
137.             message.writeTo(outputStream);
138.             RawMessage rawMessage = 
139.             		new RawMessage(ByteBuffer.wrap(outputStream.toByteArray()));
140. 
141.             SendRawEmailRequest rawEmailRequest = 
142.             		new SendRawEmailRequest(rawMessage)
143.             		    .withConfigurationSetName(CONFIGURATION_SET);
144.             
145.             client.sendRawEmail(rawEmailRequest);
146.             System.out.println("Email sent!");
147.         // Display an error if something goes wrong.
148.         } catch (Exception ex) {
149.           System.out.println("Email Failed");
150.             System.err.println("Error message: " + ex.getMessage());
151.             ex.printStackTrace();
152.         }
153.     }
154. }
```

------
#### [ Python ]

El siguiente ejemplo de código muestra cómo utilizar los paquetes [email.mime de Python](https://docs.python.org/3.8/library/email.mime.html) y el [AWS SDK para Python (Boto)](https://aws.amazon.com/sdk-for-python) para componer y enviar un correo electrónico sin procesar.

```
 1. import json
 2. import boto3
 3. from botocore.exceptions import ClientError
 4. from email.mime.multipart import MIMEMultipart
 5. from email.mime.text import MIMEText
 6. from email.mime.application import MIMEApplication
 7. import os
 8. 
 9. def boto3_rawemailv2():
10.     SENDER = "Sender <sender@example.com>"
11.     RECIPIENT = "recipient@example.com"
12.     CONFIGURATION_SET = "ConfigSet"
13.     AWS_REGION = "us-east-1"
14.     SUBJECT = "Customer service contact info"
15.     ATTACHMENT = "path/to/customers-to-contact.xlsx"
16.     BODY_TEXT = "Hello,\r\nPlease see the attached file for a list of customers to contact."
17. 
18.     # The HTML body of the email.
19.     BODY_HTML = """\
20.     <html>
21.     <head/>
22.     <body>
23.     <h1>Hello!</h1>
24.     <p>Please see the attached file for a list of customers to contact.</p>
25.     </body>
26.     </html>
27.     """
28. 
29.     # The character encoding for the email.
30.     CHARSET = "utf-8"
31.     msg = MIMEMultipart('mixed')
32.     # Add subject, from and to lines.
33.     msg['Subject'] = SUBJECT 
34.     msg['From'] = SENDER 
35.     msg['To'] = RECIPIENT
36.     
37.     # Create a multipart/alternative child container.
38.     msg_body = MIMEMultipart('alternative')
39.     
40.     # Encode the text and HTML content and set the character encoding. This step is
41.     # necessary if you're sending a message with characters outside the ASCII range.
42.     textpart = MIMEText(BODY_TEXT.encode(CHARSET), 'plain', CHARSET)
43.     htmlpart = MIMEText(BODY_HTML.encode(CHARSET), 'html', CHARSET)
44.     
45.     # Add the text and HTML parts to the child container.
46.     msg_body.attach(textpart)
47.     msg_body.attach(htmlpart)
48.     
49.     # Define the attachment part and encode it using MIMEApplication.
50.     att = MIMEApplication(open(ATTACHMENT, 'rb').read())
51.     
52.     # Add a header to tell the email client to treat this part as an attachment,
53.     # and to give the attachment a name.
54.     att.add_header('Content-Disposition','attachment',filename=os.path.basename(ATTACHMENT))
55.     
56.     # Attach the multipart/alternative child container to the multipart/mixed
57.     # parent container.
58.     msg.attach(msg_body)
59.     msg.attach(att)
60. 
61.     #changes start from here
62.     strmsg = str(msg)
63.     body = bytes (strmsg, 'utf-8')
64. 
65. 
66. 
67.     
68.     client = boto3.client('sesv2')
69.     response = client.send_email(
70.     FromEmailAddress=SENDER,
71.     Destination={
72.         'ToAddresses': [RECIPIENT]
73.     },
74.     Content={
75.         'Raw': {
76.             'Data': body
77.         }
78.     }
79.     )
80.     print(response)
81. boto3_rawemailv2 ()
```

------

# Uso de plantillas para el envío de correo electrónico personalizado con la API de Amazon SES
<a name="send-personalized-email-api"></a>

En Amazon SES, puede enviar correos electrónicos con plantillas mediante una *plantilla almacenada* o una *plantilla en línea*.
+ **Plantilla almacenada**: hace referencia al recurso [https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_Template.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_Template.html) que se crea y guarda en SES mediante la operación `CreateEmailTemplate` de la API v2 de Amazon SES. La plantilla contiene el asunto y el cuerpo del correo electrónico y contiene variables (marcadores de posición) en línea con el contenido escrito. El nombre de la plantilla almacenada y los datos dinámicos de las variables de marcador de posición de la plantilla se proporcionan al llamar a las operaciones de la API v2 `SendEmail` o `SendBulkEmail`.

  *Plantillas almacenadas*: se pueden reutilizar fácilmente y pueden ahorrarle tiempo y esfuerzo al enviar tipos de correos electrónicos similares. En lugar de crear cada correo electrónico desde cero, solo necesita crear la estructura base y el diseño una vez y, a continuación, actualizar simplemente el contenido dinámico de la plantilla.
+ **Plantilla en línea**: no se utiliza el recurso `Template`, sino que se proporcionan el asunto y el cuerpo del correo electrónico que contiene variables (marcadores de posición) en línea con el contenido escrito, junto con los valores de esas variables de marcador de posición, al llamar a las operaciones de la API v2 `SendEmail` o `SendBulkEmail`.

  Las *plantillas integradas* simplifican el proceso de envío masivo de correos electrónicos al eliminar la necesidad de administrar los recursos de plantillas en su cuenta de SES y simplifican el proceso de integración al permitirle incluir el contenido de la plantilla directamente en la lógica de la aplicación. No se tienen en cuenta para el límite de 20 000 plantillas por plantilla. Región de AWS

Se aplican los siguientes límites cuando se utilizan *plantillas almacenadas*:
+ Puedes crear hasta 20 000 plantillas de correo electrónico en cada una. Región de AWS
+ Cada plantilla puede tener un tamaño de hasta 500 KB, incluidos el texto y las partes en HTML.

Se aplican los siguientes límites cuando se utilizan *plantillas en línea*:
+ Cada archivo JSON de entrada puede tener hasta 1 MB de tamaño, incluido el texto y las partes HTML.

Lo siguiente se aplica a las plantillas *almacenadas* y *en línea*:
+ No hay límites en cuanto al número de variables de reemplazo que se pueden utilizar.
+ Puede enviar correo electrónico a un máximo de 50 objetos de destino en cada llamada a la operación `SendBulkEmail`. El [https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_Destination.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_Destination.html)objeto puede contener varios destinatarios definidos en **ToAddresses**CcAddresses****, y **BccAddresses**. El número de destinos con los que puede ponerse en contacto en una única llamada a la API v2 podría estar limitado por la tasa de envío máxima de su cuenta. Para obtener más información, consulte [Administración de sus límites de envío de Amazon SES](manage-sending-quotas.md).

En este capítulo se incluyen procedimientos con ejemplos para usar *plantillas almacenadas* y *plantillas en línea*.

**nota**  
En los procedimientos que se describen en esta sección, se da por hecho que ya se ha instalado y configurado la AWS CLI. Para obtener más información sobre la instalación y configuración del AWS CLI, consulte la [Guía del AWS Command Line Interface usuario](https://docs.aws.amazon.com/cli/latest/userguide/).

## (Opcional) Parte 1: configuración de notificaciones de eventos de errores de renderizado
<a name="send-personalized-email-set-up-notifications"></a>

 Si envía un correo electrónico que contiene contenido de personalización no válido, Amazon SES puede aceptar inicialmente el mensaje, pero puede no ser capaz de enviarlo. Por este motivo, si tiene previsto enviar correo electrónico personalizado, debe configurar SES para enviar notificaciones de eventos de errores de presentación a través de Amazon SNS. Cuando reciba una notificación de evento de error de presentación, puede identificar qué mensaje incluía el contenido no válido, solucionar los problemas y enviar el mensaje de nuevo.

Es absolutamente recomendable que realice el procedimiento de esta sección, aunque sea opcional.

**Para configurar notificaciones de eventos de errores de presentación**

1. Crear un tema de Amazon SNS Para obtener información acerca de los procedimientos, consulte [Creación de un tema](https://docs.aws.amazon.com/sns/latest/dg/sns-create-subscribe-endpoint-to-topic.html) en la *Guía para desarrolladores de Amazon Simple Notification Service*.

1. Suscríbase al tema de Amazon SNS. Por ejemplo, si desea recibir notificaciones de errores de presentación por correo electrónico, suscriba un punto de enlace de correo electrónico (es decir, su dirección de correo electrónico) al tema.

   Para obtener información acerca de los procedimientos, consulte [Suscribirse a un tema](https://docs.aws.amazon.com/sns/latest/dg/SubscribeTopic.html) en la *Guía para desarrolladores de Amazon Simple Notification Service*.

1. Realice los procedimientos de [Configuración de un destino de eventos de Amazon SNS para la publicación de eventos](event-publishing-add-event-destination-sns.md) para configurar los conjuntos de configuración con el objetivo de publicar eventos de errores de presentación en su tema de Amazon SNS.

## (Opcional) Parte 2: creación de una plantilla de correo electrónico
<a name="send-personalized-email-create-template"></a>

Si piensa utilizar una *plantilla almacenada*, en esta sección se mostrará cómo utilizar la operación de la API v2 de SES [https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_CreateEmailTemplate.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_CreateEmailTemplate.html) para crear la plantilla. Puede omitir este paso si desea utilizar si desea utilizar una *plantilla en línea*.

En este procedimiento se presupone que ya ha instalado y configurado la AWS CLI. Para obtener más información sobre la instalación y configuración del AWS CLI, consulte la [Guía del AWS Command Line Interface usuario](https://docs.aws.amazon.com/cli/latest/userguide/).

**Para crear la plantilla**

1. En un editor de texto, cree un nuevo archivo y pegue el siguiente código para personalizarlo según sus necesidades.

   ```
   {
       "TemplateName": "MyTemplate",
       "TemplateContent": {
           "Subject": "Greetings, {{name}}!",
           "Text": "Dear {{name}},\r\nYour favorite animal is {{favoriteanimal}}.",
           "Html": "<h1>Hello {{name}},</h1><p>Your favorite animal is {{favoriteanimal}}.</p>"
       }
   }
   ```

   Este código contiene las siguientes propiedades:
   + **TemplateName**— El nombre del `Template` recurso. Cuando envíe el correo electrónico, consulte este nombre.
   + **TemplateContent**— Un contenedor para los siguientes atributos:
     + **Asunto**: el asunto del mensaje de correo electrónico. Esta propiedad podría contener etiquetas de sustitución. Estas etiquetas utilizan el siguiente formato: `{{tagname}}`. Cuando envíe el correo electrónico, puede especificar un valor para `tagname` para cada destino.
     + **Html**: cuerpo HTML del correo electrónico. Esta propiedad podría contener etiquetas de sustitución. El ejemplo anterior incluye dos etiquetas: `{{name}}` y `{{favoriteanimal}}`.
     + **Text**: cuerpo de texto del correo electrónico. Los destinatarios cuyos clientes de correo electrónico no muestran el correo electrónico en HTML ven este contenido del correo electrónico. Esta propiedad podría contener etiquetas de sustitución.

1. Personalice el ejemplo anterior para adaptarse a sus necesidades y, a continuación, guarde el archivo como *mytemplate.json*.

1. En la línea de comandos, escriba el siguiente comando para crear una nueva plantilla utilizando la operación [https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_CreateEmailTemplate.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_CreateEmailTemplate.html) de la API v2:

   ```
   aws sesv2 create-email-template --cli-input-json file://mytemplate.json
   ```

## Parte 3: Enviar el correo electrónico personalizado
<a name="send-personalized-email-api-operations"></a>

Puede usar las dos operaciones siguientes de la API v2 de SES para enviar correos electrónicos mediante *plantillas almacenadas* o *plantillas en línea*:
+ La operación [https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_SendEmail.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_SendEmail.html) es útil para enviar un correo electrónico personalizado a un único objeto de destino. El [https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_Destination.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_Destination.html)objeto de la API v2 puede contener las *BccAddresses*propiedades *ToAddresses*CcAddresses**, y. Se pueden usar en cualquier combinación y pueden contener una o más direcciones de correo electrónico que recibirán el mismo correo electrónico.
+ La operación [https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_SendBulkEmail.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_SendBulkEmail.html) resulta útil para enviar correos electrónicos únicos a varios objetos de destino en una única llamada a la API v2.

En esta sección se proporcionan ejemplos de cómo utilizarlos AWS CLI para enviar correos electrónicos con plantillas mediante estas dos operaciones de envío.

### Envío de correo electrónico de plantilla a un único objeto de destino
<a name="send-templated-email-single-destination"></a>

Puede utilizar la operación [https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_SendEmail.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_SendEmail.html) para enviar un correo electrónico a uno o varios destinatarios definidos en un único objeto de destino. Todos los destinatarios del objeto [https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_Destination.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_Destination.html) recibirán el mismo correo electrónico.

**Cómo enviar un correo electrónico de plantilla a un objeto de destino único**

1. Dependiendo de si desea utilizar una *plantilla almacenada* o una *plantilla en línea*, seleccione el ejemplo de código correspondiente para pegarlo en un editor de texto y personalícelo según sus necesidades.

------
#### [ Stored template code example ]

   Observe que se hace referencia a la plantilla que creó en el paso anterior como valor del `TemplateName` parámetro. *MyTemplate*

   ```
   {
       "FromEmailAddress": "Mary Major <mary.major@example.com>",
       "Destination": {
           "ToAddresses": [
               "alejandro.rosalez@example.com", "jimmy.jet@example.com"
           ]
       },
       "Content": {
           "Template": {
               "TemplateName": "MyTemplate",
               "TemplateData": "{ \"name\":\"Alejandro\", \"favoriteanimal\": \"alligator\" }"
           }
       },
       "ConfigurationSetName": "ConfigSet"
   }
   ```

   Este código contiene las siguientes propiedades:
   + **FromEmailAddress**— La dirección de correo electrónico del remitente.
   + **Destino**: objeto que contiene los destinatarios del correo electrónico definidos en las *BccAddresses*propiedades *ToAddresses*CcAddresses**, y. Se pueden usar en cualquier combinación y pueden contener una o más direcciones de correo electrónico que recibirán el mismo correo electrónico.
   + **TemplateName**— El nombre del `Template` recurso que se va a aplicar al correo electrónico.
   + **TemplateData**— Una cadena JSON de escape que contiene pares clave-valor. Las claves corresponden a las variables definidas en las propiedades `TemplateContent` de la plantilla almacenada, por ejemplo, `{{name}}`. Los valores representan el contenido que sustituye a las variables.
   + **ConfigurationSetName**— El nombre del conjunto de configuraciones que se utilizará al enviar el correo electrónico.
**nota**  
Le recomendamos que utilice un conjunto de configuración que esté configurado para publicar eventos de errores de presentación en Amazon SNS. Para obtener más información, consulte [(Opcional) Parte 1: configuración de notificaciones de eventos de errores de renderizado](#send-personalized-email-set-up-notifications).

------
#### [ Inline template code example ]

   Observe que las propiedades `TemplateContent` (que normalmente se definirían en una *plantilla almacenada*) se definen *en línea* junto con la propiedad `TemplateData`, lo que la convierte en una *plantilla en línea*.

   ```
   {
       "FromEmailAddress": "Mary Major <mary.major@example.com>",
       "Destination": {
           "ToAddresses": [
               "alejandro.rosalez@example.com", "jimmy.jet@example.com"
           ]
       },
       "Content": {
           "Template": {
               "TemplateContent": {
                   "Subject": "Greetings, {{name}}!",
                   "Text": "Dear {{name}},\r\nYour favorite animal is {{favoriteanimal}}.",
                   "Html": "<h1>Hello {{name}},</h1><p>Your favorite animal is {{favoriteanimal}}.</p>"
               },
               "TemplateData": "{ \"name\":\"Alejandro\", \"favoriteanimal\": \"alligator\" }"
           }
       },
       "ConfigurationSetName": "ConfigSet"
   }
   ```

   Este código contiene las siguientes propiedades:
   + **FromEmailAddress**— La dirección de correo electrónico del remitente.
   + **Destino**: objeto que contiene los destinatarios del correo electrónico definidos en las *BccAddresses*propiedades *ToAddresses*CcAddresses**, y. Se pueden usar en cualquier combinación y pueden contener una o más direcciones de correo electrónico que recibirán el mismo correo electrónico.
   + **TemplateContent**— Un contenedor para los siguientes atributos:
     + **Asunto**: el asunto del mensaje de correo electrónico. Esta propiedad podría contener etiquetas de sustitución. Estas etiquetas utilizan el siguiente formato: `{{tagname}}`. Cuando envíe el correo electrónico, puede especificar un valor para `tagname` para cada destino.
     + **Html**: cuerpo HTML del correo electrónico. Esta propiedad podría contener etiquetas de sustitución. El ejemplo anterior incluye dos etiquetas: `{{name}}` y `{{favoriteanimal}}`.
     + **Text**: cuerpo de texto del correo electrónico. Los destinatarios cuyos clientes de correo electrónico no muestran el correo electrónico en HTML ven este contenido del correo electrónico. Esta propiedad podría contener etiquetas de sustitución.
   + **TemplateData**— Una cadena JSON de escape que contiene pares clave-valor. Las claves corresponden a las variables definidas en las propiedades `TemplateContent` de este archivo, por ejemplo, `{{name}}`. Los valores representan el contenido que sustituye a las variables.
   + **ConfigurationSetName**— El nombre del conjunto de configuraciones que se utilizará al enviar el correo electrónico.
**nota**  
Le recomendamos que utilice un conjunto de configuración que esté configurado para publicar eventos de errores de presentación en Amazon SNS. Para obtener más información, consulte [(Opcional) Parte 1: configuración de notificaciones de eventos de errores de renderizado](#send-personalized-email-set-up-notifications).

------

1. Personalice el ejemplo anterior para adaptarse a sus necesidades y, a continuación, guarde el archivo como *myemail.json*.

1. En la línea de comandos, escriba el siguiente comando de la API v2 para enviar el correo electrónico:

   ```
   aws sesv2 send-email --cli-input-json file://myemail.json
   ```

### Envío de correo electrónico con plantilla a varios objetos de destino
<a name="send-templated-email-multiple-destinations"></a>

Puede utilizar la operación [https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_SendBulkEmail.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_SendBulkEmail.html) para enviar un correo electrónico a varios destinos en una llamada única al API v2 de SES. SES envía un correo electrónico único al destinatario o destinatarios en cada objeto de [https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_Destination.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_Destination.html).

**Cómo enviar un correo electrónico de plantilla a varios objetos de destino**

1. Dependiendo de si desea utilizar una *plantilla almacenada* o una *plantilla en línea*, seleccione el ejemplo de código correspondiente para pegarlo en un editor de texto y personalícelo según sus necesidades.

------
#### [ Stored template code example ]

   Observe que se hace referencia a la plantilla que creó en el paso anterior como valor del `TemplateName` parámetro. *MyTemplate*

   ```
   {
       "FromEmailAddress": "Mary Major <mary.major@example.com>",
       "DefaultContent": {
           "Template": {
               "TemplateName": "MyTemplate",
               "TemplateData": "{ \"name\":\"friend\", \"favoriteanimal\":\"unknown\" }"
           }
       },
       "BulkEmailEntries": [
           {
               "Destination": {
                   "ToAddresses": [
                       "anaya.iyengar@example.com"
                   ]
               },
               "ReplacementEmailContent": {
                   "ReplacementTemplate": {
                       "ReplacementTemplateData": "{ \"name\":\"Anaya\", \"favoriteanimal\":\"angelfish\" }"
                   }
               }
           },
           {
               "Destination": {
                   "ToAddresses": [
                       "liu.jie@example.com"
                   ]
               },
               "ReplacementEmailContent": {
                   "ReplacementTemplate": {
                       "ReplacementTemplateData": "{ \"name\":\"Liu\", \"favoriteanimal\":\"lion\" }"
                   }
               }
           },
           {
               "Destination": {
                   "ToAddresses": [
                       "shirley.rodriguez@example.com"
                   ]
               },
               "ReplacementEmailContent": {
                   "ReplacementTemplate": {
                       "ReplacementTemplateData": "{ \"name\":\"Shirley\", \"favoriteanimal\":\"shark\" }"
                   }
               }
           },
           {
               "Destination": {
                   "ToAddresses": [
                       "richard.roe@example.com"
                   ]
               },
               "ReplacementEmailContent": {
                   "ReplacementTemplate": {
                       "ReplacementTemplateData": "{}"
                   }
               }
           }
       ],
       "ConfigurationSetName": "ConfigSet"
   }
   ```

   Este código contiene las siguientes propiedades:
   + **FromEmailAddress**— La dirección de correo electrónico del remitente.
   + **DefaultContent**— Un objeto JSON que contiene los `TemplateData` objetos `TemplateName` y. 
   + **TemplateName**— El nombre del `Template` recurso que se va a aplicar al correo electrónico.
   + **TemplateData**— Contiene pares clave-valor que se utilizarán si el `ReplacementEmailContent` objeto contiene un objeto JSON vacío`{}`, en la `ReplacementTemplateData` propiedad.
   + **BulkEmailEntries**— Una matriz que contiene uno o más `Destination` objetos.
   + **Destino**: objeto que contiene los destinatarios del correo electrónico definidos en las *BccAddresses*propiedades *ToAddresses*CcAddresses**, y. Se pueden usar en cualquier combinación y pueden contener una o más direcciones de correo electrónico que recibirán el mismo correo electrónico.
   + **ReplacementTemplateData**— Una cadena JSON de escape que contiene pares clave-valor. Las claves corresponden a las variables de la plantilla, por ejemplo, `{{name}}`. Los valores representan el contenido que sustituye las variables en el correo electrónico. (Si la cadena JSON aquí está vacía, lo que se indica mediante `{}`, se utilizarán los pares clave-valor definidos en la propiedad `TemplateData` dentro del objeto `DefaultContent`).
   + **ConfigurationSetName**— El nombre del conjunto de configuraciones que se utilizará al enviar el correo electrónico.
**nota**  
Le recomendamos que utilice un conjunto de configuración que esté configurado para publicar eventos de errores de presentación en Amazon SNS. Para obtener más información, consulte [(Opcional) Parte 1: configuración de notificaciones de eventos de errores de renderizado](#send-personalized-email-set-up-notifications).

------
#### [ Inline template code example ]

   Observe que las propiedades `TemplateContent` (que normalmente se definirían en una *plantilla almacenada*) se definen *en línea* junto con la propiedad `TemplateData`, lo que la convierte en una *plantilla en línea*.

   ```
   {
       "FromEmailAddress": "Mary Major <mary.major@example.com>",
       "DefaultContent": {
           "Template": {
               "TemplateContent": {
                   "Subject": "Greetings, {{name}}!",
                   "Text": "Dear {{name}},\r\nYour favorite animal is {{favoriteanimal}}.",
                   "Html": "<h1>Hello {{name}},</h1><p>Your favorite animal is {{favoriteanimal}}.</p>"
               },
               "TemplateData": "{ \"name\":\"friend\", \"favoriteanimal\":\"unknown\" }"
           }
       },
       "BulkEmailEntries": [
           {
               "Destination": {
                   "ToAddresses": [
                       "anaya.iyengar@example.com"
                   ]
               },
               "ReplacementEmailContent": {
                   "ReplacementTemplate": {
                       "ReplacementTemplateData": "{ \"name\":\"Anaya\", \"favoriteanimal\":\"angelfish\" }"
                   }
               }
           },
           {
               "Destination": {
                   "ToAddresses": [
                       "liu.jie@example.com"
                   ]
               },
               "ReplacementEmailContent": {
                   "ReplacementTemplate": {
                       "ReplacementTemplateData": "{ \"name\":\"Liu\", \"favoriteanimal\":\"lion\" }"
                   }
               }
           },
           {
               "Destination": {
                   "ToAddresses": [
                       "shirley.rodriguez@example.com"
                   ]
               },
               "ReplacementEmailContent": {
                   "ReplacementTemplate": {
                       "ReplacementTemplateData": "{ \"name\":\"Shirley\", \"favoriteanimal\":\"shark\" }"
                   }
               }
           },
           {
               "Destination": {
                   "ToAddresses": [
                       "richard.roe@example.com"
                   ]
               },
               "ReplacementEmailContent": {
                   "ReplacementTemplate": {
                       "ReplacementTemplateData": "{}"
                   }
               }
           }
       ],
       "ConfigurationSetName": "ConfigSet"
   }
   ```

   Este código contiene las siguientes propiedades:
   + **FromEmailAddress**— La dirección de correo electrónico del remitente.
   + **DefaultContent**— Un objeto JSON que contiene los `TemplateData` objetos `TemplateContent` y. 
   + **TemplateContent**— Un contenedor para los siguientes atributos:
     + **Asunto**: el asunto del mensaje de correo electrónico. Esta propiedad podría contener etiquetas de sustitución. Estas etiquetas utilizan el siguiente formato: `{{tagname}}`. Cuando envíe el correo electrónico, puede especificar un valor para `tagname` para cada destino.
     + **Html**: cuerpo HTML del correo electrónico. Esta propiedad podría contener etiquetas de sustitución. El ejemplo anterior incluye dos etiquetas: `{{name}}` y `{{favoriteanimal}}`.
     + **Text**: cuerpo de texto del correo electrónico. Los destinatarios cuyos clientes de correo electrónico no muestran el correo electrónico en HTML ven este contenido del correo electrónico. Esta propiedad podría contener etiquetas de sustitución.
   + **TemplateData**— Contiene pares clave-valor que se utilizarán si el `ReplacementEmailContent` objeto contiene un objeto JSON vacío`{}`, en la `ReplacementTemplateData` propiedad.
   + **BulkEmailEntries**— Una matriz que contiene uno o más `Destination` objetos.
   + **Destino**: objeto que contiene los destinatarios del correo electrónico definidos en las *BccAddresses*propiedades *ToAddresses*CcAddresses**, y. Se pueden usar en cualquier combinación y pueden contener una o más direcciones de correo electrónico que recibirán el mismo correo electrónico.
   + **ReplacementTemplateData**— Una cadena JSON de escape que contiene pares clave-valor. Las claves corresponden a las variables definidas en las propiedades `TemplateContent` de este archivo, por ejemplo, `{{name}}`. Los valores representan el contenido que sustituye las variables en el correo electrónico. (Si la cadena JSON aquí está vacía, lo que se indica mediante `{}`, se utilizarán los pares clave-valor definidos en la propiedad `TemplateData` dentro del objeto `DefaultContent`).
   + **ConfigurationSetName**— El nombre del conjunto de configuraciones que se utilizará al enviar el correo electrónico.
**nota**  
Le recomendamos que utilice un conjunto de configuración que esté configurado para publicar eventos de errores de presentación en Amazon SNS. Para obtener más información, consulte [(Opcional) Parte 1: configuración de notificaciones de eventos de errores de renderizado](#send-personalized-email-set-up-notifications).

------

1. Cambie los valores del código del paso anterior según sus necesidades y, a continuación, guarde el archivo como *mybulkemail.json*.

1. En la línea de comandos, escriba el siguiente comando de la API v2 para enviar el correo masivo:

   ```
   aws sesv2 send-bulk-email --cli-input-json file://mybulkemail.json
   ```

# Personalización avanzada del correo electrónico
<a name="send-personalized-email-advanced"></a>

 Si utiliza una *plantilla almacenada*, es decir, si ha creado un recurso [https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_Template.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_Template.html) en Amazon SES mediante la operación `CreateEmailTemplate` con la API v2 de SES, puede aprovechar el sistema Handlebars para crear plantillas que incluyan características avanzadas, como atributos anidados, iteración de matrices, instrucciones condicionales básicas y la creación de parciales en línea. En esta sección se proporcionan ejemplos de estas características.

Handlebars incluye características adicionales además de las documentadas en esta sección. Para obtener más información, consulte [Built-In Helpers](https://handlebarsjs.com/guide/builtin-helpers.html) en [handlebarsjs.com](http://handlebarsjs.com).

**nota**  
SES no aplica secuencias de escape al contenido HTML cuando renderiza la plantilla HTML de un mensaje. Esto significa que si incluye datos introducidos por el usuario, como desde un formulario de contacto, tendrá que aplicar las secuencias de escape en el lado del cliente.

**Topics**
+ [Análisis de atributos anidados](#send-personalized-email-advanced-nested)
+ [Recorrido de listas en iteración](#send-personalized-email-advanced-iterating)
+ [Uso de instrucciones condicionales básicas](#send-personalized-email-advanced-conditionals)
+ [Creación de funciones parciales insertadas](#send-personalized-email-advanced-inline-partials)

## Análisis de atributos anidados
<a name="send-personalized-email-advanced-nested"></a>

Handlebars admite rutas anidadas, lo que facilita la organización de datos de clientes complejos y la referencia a esos datos en sus plantillas de correo electrónico.

Por ejemplo, puede organizar los datos de los destinatarios en varias categorías generales. Dentro de cada una de estas categorías, puede incluir información detallada. El siguiente ejemplo de código muestra un ejemplo de esta estructura para un único destinatario:

```
{
  "meta":{
    "userId":"51806220607"
  },
  "contact":{
    "firstName":"Anaya",
    "lastName":"Iyengar",
    "city":"Bengaluru",
    "country":"India",
    "postalCode":"560052"
  },
  "subscription":[
    {
      "interest":"Sports"
    },
    {
      "interest":"Travel"
    },
    {
      "interest":"Cooking"
    }
  ]
}
```

En sus plantillas de correo electrónico, puede hacer referencia a atributos anidados proporcionando el nombre del atributo principal, seguido de un punto (.), seguido del nombre del atributo para el que desea incluir el valor. Por ejemplo, si utiliza la estructura de datos que se muestra en el ejemplo anterior y desea incluir el nombre de cada destinatario en la plantilla de correo electrónico, incluya el siguiente texto en su plantilla de correo electrónico: `Hello {{contact.firstName}}!`

Handlebars puede analizar rutas que tengan varios niveles anidados, lo que le proporciona flexibilidad a la hora de estructurar los datos de la plantilla.

## Recorrido de listas en iteración
<a name="send-personalized-email-advanced-iterating"></a>

La función auxiliar `each` recorre en iteración los elementos de una matriz. El código siguiente es un ejemplo de una plantilla de correo electrónico que utiliza la función auxiliar `each` para crear una relación detallada de los intereses de cada destinatario.

```
{
  "Template": {
    "TemplateName": "Preferences",
    "SubjectPart": "Subscription Preferences for {{contact.firstName}} {{contact.lastName}}",
    "HtmlPart": "<h1>Your Preferences</h1>
                 <p>You have indicated that you are interested in receiving 
                   information about the following subjects:</p>
                 <ul>
                   {{#each subscription}}
                     <li>{{interest}}</li>
                   {{/each}}
                 </ul>
                 <p>You can change these settings at any time by visiting 
                    the <a href=https://www.example.com/prefererences/i.aspx?id={{meta.userId}}>
                    Preference Center</a>.</p>",
    "TextPart": "Your Preferences\n\nYou have indicated that you are interested in 
                 receiving information about the following subjects:\n
                 {{#each subscription}}
                   - {{interest}}\n
                 {{/each}}
                 \nYou can change these settings at any time by 
                 visiting the Preference Center at 
                 https://www.example.com/prefererences/i.aspx?id={{meta.userId}}"
  }
}
```

**importante**  
En el ejemplo de código anterior, los valores de los atributos `HtmlPart` y `TextPart` incluyen saltos de línea para facilitar la lectura del ejemplo. El archivo JSON de la plantilla no puede contener saltos de línea dentro de estos valores. Si ha copiado y pegado este ejemplo en su propio archivo JSON, elimine los saltos de línea y espacios adicionales de las secciones `HtmlPart` y `TextPart` antes de continuar.

Después de crear la plantilla, puede utilizar la operación `SendEmail` o `SendBulkEmail` para enviar correo electrónico a los destinatarios a través de esta plantilla. Siempre y cuando los destinatarios tengan al menos un valor en el objeto `Interests`, reciben un correo electrónico que incluye una relación detallada de sus intereses. El siguiente ejemplo muestra un archivo JSON que se puede utilizar para enviar correo electrónico a varios destinatarios mediante la plantilla anterior:

```
{
  "Source":"Sender Name <sender@example.com>",
  "Template":"Preferences",
  "Destinations":[
    {
      "Destination":{
        "ToAddresses":[
          "anaya.iyengar@example.com"
        ]
      },
      "ReplacementTemplateData":"{\"meta\":{\"userId\":\"51806220607\"},\"contact\":{\"firstName\":\"Anaya\",\"lastName\":\"Iyengar\"},\"subscription\":[{\"interest\":\"Sports\"},{\"interest\":\"Travel\"},{\"interest\":\"Cooking\"}]}"
      },
    {
      "Destination":{ 
        "ToAddresses":[
          "shirley.rodriguez@example.com"
        ]
      },
      "ReplacementTemplateData":"{\"meta\":{\"userId\":\"1981624758263\"},\"contact\":{\"firstName\":\"Shirley\",\"lastName\":\"Rodriguez\"},\"subscription\":[{\"interest\":\"Technology\"},{\"interest\":\"Politics\"}]}"
    }
  ],
  "DefaultTemplateData":"{\"meta\":{\"userId\":\"\"},\"contact\":{\"firstName\":\"Friend\",\"lastName\":\"\"},\"subscription\":[]}"
}
```

Cuando envíe un correo electrónico a los destinatarios indicados en el ejemplo anterior mediante la operación `SendBulkEmail`, recibirán un mensaje similar al ejemplo que se muestra en la siguiente imagen:

![\[Preferences notification listing Sports, Travel, and Cooking as selected interests.\]](http://docs.aws.amazon.com/es_es/ses/latest/dg/images/send-personalized-email-advanced-condition-interest.png)


## Uso de instrucciones condicionales básicas
<a name="send-personalized-email-advanced-conditionals"></a>

Esta sección se basa en el ejemplo descrito en la sección anterior. El ejemplo de la sección anterior utiliza la función auxiliar `each` para recorrer en iteración una lista de intereses. Sin embargo, los destinatarios para los que no se especifican intereses reciben un correo electrónico que contiene una lista vacía. Mediante la función auxiliar `{{if}}`, puede formatear el correo electrónico de forma distinta si un determinado atributo está presente en la plantilla de datos. El código siguiente utiliza la función auxiliar `{{if}}` para mostrar la lista con viñetas de la sección anterior si la matriz `Subscription` contiene algún valor. Si la matriz está vacía, se muestra un bloque de texto diferente.

```
{
  "Template": {
    "TemplateName": "Preferences2",
    "SubjectPart": "Subscription Preferences for {{contact.firstName}} {{contact.lastName}}",
    "HtmlPart": "<h1>Your Preferences</h1>
                 <p>Dear {{contact.firstName}},</p>
                 {{#if subscription}}
                   <p>You have indicated that you are interested in receiving 
                     information about the following subjects:</p>
                     <ul>
                     {{#each subscription}}
                       <li>{{interest}}</li>
                     {{/each}}
                     </ul>
                     <p>You can change these settings at any time by visiting 
                       the <a href=https://www.example.com/prefererences/i.aspx?id={{meta.userId}}>
                       Preference Center</a>.</p>
                 {{else}}
                   <p>Please update your subscription preferences by visiting 
                     the <a href=https://www.example.com/prefererences/i.aspx?id={{meta.userId}}>
                     Preference Center</a>.
                 {{/if}}",
    "TextPart": "Your Preferences\n\nDear {{contact.firstName}},\n\n
                 {{#if subscription}}
                   You have indicated that you are interested in receiving 
                   information about the following subjects:\n
                   {{#each subscription}}
                     - {{interest}}\n
                   {{/each}}
                   \nYou can change these settings at any time by visiting the 
                   Preference Center at https://www.example.com/prefererences/i.aspx?id={{meta.userId}}.
                 {{else}}
                   Please update your subscription preferences by visiting the 
                   Preference Center at https://www.example.com/prefererences/i.aspx?id={{meta.userId}}.
                 {{/if}}"
  }
}
```

**importante**  
En el ejemplo de código anterior, los valores de los atributos `HtmlPart` y `TextPart` incluyen saltos de línea para facilitar la lectura del ejemplo. El archivo JSON de la plantilla no puede contener saltos de línea dentro de estos valores. Si ha copiado y pegado este ejemplo en su propio archivo JSON, elimine los saltos de línea y espacios adicionales de las secciones `HtmlPart` y `TextPart` antes de continuar.

El siguiente ejemplo muestra un archivo JSON que se puede utilizar para enviar correo electrónico a varios destinatarios mediante la plantilla anterior:

```
{
  "Source":"Sender Name <sender@example.com>",
  "Template":"Preferences2",
  "Destinations":[
    {
      "Destination":{
        "ToAddresses":[
          "anaya.iyengar@example.com"
        ]
      },
      "ReplacementTemplateData":"{\"meta\":{\"userId\":\"51806220607\"},\"contact\":{\"firstName\":\"Anaya\",\"lastName\":\"Iyengar\"},\"subscription\":[{\"interest\":\"Sports\"},{\"interest\":\"Cooking\"}]}"
      },
    {
      "Destination":{ 
        "ToAddresses":[
          "shirley.rodriguez@example.com"
        ]
      },
      "ReplacementTemplateData":"{\"meta\":{\"userId\":\"1981624758263\"},\"contact\":{\"firstName\":\"Shirley\",\"lastName\":\"Rodriguez\"}}"
    }
  ],
  "DefaultTemplateData":"{\"meta\":{\"userId\":\"\"},\"contact\":{\"firstName\":\"Friend\",\"lastName\":\"\"},\"subscription\":[]}"
}
```

En este ejemplo, el destinatario cuyos datos de la plantilla incluyen una lista de intereses recibe el mismo correo electrónico que el ejemplo mostrado en la sección anterior. Sin embargo, el destinatario cuyos datos de la plantilla no incluyen intereses, recibe un correo electrónico similar al ejemplo que se muestra en la siguiente imagen:

![\[Email message with header "Your Preferences" and text about updating subscription preferences.\]](http://docs.aws.amazon.com/es_es/ses/latest/dg/images/send-personalized-email-advanced-condition-nointerest.png)


## Creación de funciones parciales insertadas
<a name="send-personalized-email-advanced-inline-partials"></a>

Puede utilizar funciones parciales insertadas para simplificar las plantillas que incluyen cadenas repetidas. Por ejemplo, podría crear una función parcial insertada que incluyera el nombre del destinatario y, si está disponible, sus apellidos agregando el siguiente código al principio de la plantilla:

```
{{#* inline \"fullName\"}}{{firstName}}{{#if lastName}} {{lastName}}{{/if}}{{/inline}}\n
```

**nota**  
El carácter de nueva línea (`\n`) es necesario para separar el bloque `{{inline}}` del contenido de la plantilla. La nueva línea no se muestra en el resultado final.

Después de crear la función parcial `fullName`, puede incluirla en cualquier lugar de la plantilla añadiendo delante del nombre de la función parcial un signo mayor que (>) seguido de un espacio, como en el siguiente ejemplo: `{{> fullName}}`. Las funciones parciales insertadas no se transfieren entre las distintas partes del correo electrónico. Por ejemplo, si desea utilizar la misma función parcial insertada en la versión HTML y de texto del correo electrónico, debe definirla en las secciones `HtmlPart` y `TextPart`.

También puede utilizar funciones parciales insertadas cuando recorre en iteración matrices. Puede utilizar el siguiente código para crear una plantilla que utilice la función parcial insertada `fullName`. En este ejemplo, la función parcial insertada se aplica tanto al nombre del destinatario como a una matriz de otros nombres:

```
{
  "Template": {
    "TemplateName": "Preferences3",
    "SubjectPart": "{{firstName}}'s Subscription Preferences",
    "HtmlPart": "{{#* inline \"fullName\"}}
                   {{firstName}}{{#if lastName}} {{lastName}}{{/if}}
                 {{/inline~}}\n
                 <h1>Hello {{> fullName}}!</h1>
                 <p>You have listed the following people as your friends:</p>
                 <ul>
                 {{#each friends}}
                   <li>{{> fullName}}</li>
                 {{/each}}</ul>",
    "TextPart": "{{#* inline \"fullName\"}}
                   {{firstName}}{{#if lastName}} {{lastName}}{{/if}}
                 {{/inline~}}\n
                 Hello {{> fullName}}! You have listed the following people 
                 as your friends:\n
                 {{#each friends}}
                   - {{> fullName}}\n
                 {{/each}}"
  }
}
```

**importante**  
En el ejemplo de código anterior, los valores de los atributos `HtmlPart` y `TextPart` incluyen saltos de línea para facilitar la lectura del ejemplo. El archivo JSON de la plantilla no puede contener saltos de línea dentro de estos valores. Si ha copiado y pegado este ejemplo en su propio archivo JSON, elimine los saltos de línea y espacios adicionales de estas secciones.

# Administración de plantillas de correo electrónico
<a name="send-personalized-email-manage-templates"></a>

Además de [crear de plantillas de correo electrónico](send-personalized-email-api.md), también puede utilizar la API v2 de Amazon SES para actualizar o eliminar plantillas existentes, enumerar todas las plantillas existentes o ver el contenido de una plantilla. 

Esta sección contiene los procedimientos para utilizarlos AWS CLI para realizar tareas relacionadas con las plantillas de SES.

**nota**  
En los procedimientos que se describen en esta sección, se da por hecho que ya se ha instalado y configurado la AWS CLI. Para obtener más información sobre la instalación y configuración de AWS CLI, consulte la [Guía del AWS Command Line Interface usuario](https://docs.aws.amazon.com/cli/latest/userguide/).

## Visualización de una lista de plantillas de correo electrónico
<a name="send-personalized-email-manage-templates-list"></a>

Puede utilizar la operación [https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_ListEmailTemplate.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_ListEmailTemplate.html) de la API v2 de SES para ver una lista de todas las plantillas de correo electrónico existentes.

**Para ver una lista de plantillas de correo electrónico**
+ En la línea de comandos, introduzca el comando siguiente:

  ```
  aws sesv2 list-email-templates
  ```

  Si hay plantillas de correo electrónico existentes en su cuenta de SES en la región actual, este comando devuelve una respuesta similar al siguiente ejemplo:

  ```
  {
      "TemplatesMetadata": [
          {
              "Name": "SpecialOffers",
              "CreatedTimestamp": "2020-08-05T16:04:12.640Z"
          },
          {
              "Name": "NewsAndUpdates",
              "CreatedTimestamp": "2019-10-03T20:03:34.574Z"
          }
      ]
  }
  ```

  Si no ha creado ninguna plantilla, el comando devuelve un objeto `TemplatesMetadata` sin miembros.

## Visualización del contenido de una plantilla de correo electrónico específica
<a name="send-personalized-email-manage-templates-get"></a>

Puede utilizar la operación [https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_GetEmailTemplate.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_GetEmailTemplate.html) de la API v2 de SES para ver el contenido de una plantilla de correo electrónico específica.

**Para ver el contenido de una plantilla de correo electrónico**
+ En la línea de comandos, introduzca el comando siguiente:

  ```
  aws sesv2 get-email-template --template-name MyTemplate
  ```

  En el comando anterior, *MyTemplate* sustitúyalo por el nombre de la plantilla que desee ver.

  Si el nombre de la plantilla que ha proporcionado coincide con una plantilla existente en su cuenta de SES, este comando devuelve una respuesta similar al ejemplo siguiente:

  ```
  {
      "Template": {
          "TemplateName": "TestMessage",
          "SubjectPart": "Amazon SES Test Message",
          "TextPart": "Hello! This is the text part of the message.",
          "HtmlPart": "<html>\n<body>\n<h2>Hello!</h2>\n<p>This is the HTML part of the message.</p></body>\n</html>"
      }
  }
  ```

  Si el nombre de la plantilla que ha proporcionado no coincide con una plantilla existente en su cuenta de SES, el comando devuelve un error `NotFoundException`.

## Eliminación de una plantilla de correo electrónico
<a name="send-personalized-email-manage-templates-delete"></a>

Puede utilizar la operación [https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_DeleteEmailTemplate.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_DeleteEmailTemplate.html) de la API v2 de SES para eliminar una plantilla de correo electrónico específica de la API de Amazon SES.

**Para eliminar una plantilla de correo electrónico**
+ En la línea de comandos, introduzca el comando siguiente:

  ```
  aws sesv2 delete-email-template --template-name MyTemplate
  ```

  En el comando anterior, *MyTemplate* sustituya por el nombre de la plantilla que desee eliminar.

  Este comando no proporciona ningún resultado. Puede comprobar que la plantilla se ha eliminado mediante la [GetTemplate](#send-personalized-email-manage-templates-get)operación.

## Actualización de una plantilla de correo electrónico
<a name="send-personalized-email-manage-templates-update"></a>

Puede utilizar la operación [https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_UpdateEmailTemplate.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_UpdateEmailTemplate.html) de la API v2 de SES para actualizar una plantilla de correo electrónico existente en la API de Amazon SES. Por ejemplo, esta operación es útil si desea cambiar la línea de asunto de la plantilla de correo electrónico o si necesita modificar el cuerpo del mensaje en sí.

**Para actualizar una plantilla de correo electrónico**

1. Utilice el comando `GetEmailTemplate` para recuperar la plantilla existente al ingresar el siguiente comando en la línea de comandos:

   ```
   aws sesv2 get-email-template --template-name MyTemplate
   ```

   En el comando anterior, *MyTemplate* sustituya por el nombre de la plantilla que desee actualizar.

   Si el nombre de la plantilla que ha proporcionado coincide con una plantilla existente en su cuenta de SES, este comando devuelve una respuesta similar al ejemplo siguiente:

   ```
   {
       "Template": {
           "TemplateName": "TestMessage",
           "SubjectPart": "Amazon SES Test Message",
           "TextPart": "Hello! This is the text part of the message.",
           "HtmlPart": "<html>\n<body>\n<h2>Hello!</h2>\n<p>This is the HTML part of the message.</p></body>\n</html>"
       }
   }
   ```

1. En un editor de texto, cree un nuevo archivo. Pegue el resultado del comando anterior en el archivo.

1. Modifique la plantilla como sea necesario. Las líneas que se omitan se eliminarán de la plantilla. Por ejemplo, si solo desea cambiar la `SubjectPart` de la plantilla, aún debe incluir las propiedades `TextPart` y `HtmlPart`.

   Cuando haya terminado, guarde el archivo como `update_template.json`.

1. En la línea de comandos, introduzca el comando siguiente:

   ```
   aws sesv2 update-email-template --cli-input-json file://path/to/update_template.json
   ```

   En el comando anterior, *path/to/update\$1template.json* sustituya por la ruta del `update_template.json` archivo que creó en el paso anterior.

   Si la plantilla se actualiza correctamente, este comando no proporcionará ningún resultado. Para verificar que la plantilla se haya actualizado, utilice la operación [https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_GetEmailTemplate.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_GetEmailTemplate.html).

   Si la plantilla especificada no existe, este comando devuelve un error `TemplateDoesNotExist`. Si la plantilla no contiene ninguna de las propiedades `TextPart` o `HtmlPart` (o ambas), este comando devuelve un error `InvalidParameterValue`. 

# Envío de correo electrónico a través de Amazon SES mediante un AWS SDK
<a name="send-an-email-using-sdk-programmatically"></a>

Puede usar un AWS SDK para enviar correos electrónicos a través de Amazon SES. AWS SDKs están disponibles para varios lenguajes de programación. Para obtener más información, consulte [Herramientas para Amazon Web Services](https://aws.amazon.com/tools/#sdk).

## Requisitos previos
<a name="send-an-email-using-sdk-programmatically-prereqs"></a>

Se deben completar los siguientes requisitos previos para completar cualquiera de los ejemplos de código de la sección siguiente:
+ Si aún no lo ha hecho, realice las tareas de [Configuración de Amazon Simple Email Service](setting-up.md).
+ **Verifique su dirección de correo electrónico con Amazon SES**: para poder enviar correo electrónico con Amazon SES, debe verificar que es propietario de la dirección de correo electrónico del remitente. Si su cuenta aún está en el entorno de pruebas de Amazon SES, también tiene que verificar la dirección de correo electrónico del destinatario. Le recomendamos que utilice la consola de Amazon SES para verificar las direcciones de correo electrónico. Para obtener más información, consulte [Creación de una identidad de dirección de correo electrónico](creating-identities.md#verify-email-addresses-procedure). 
+ **Obtenga sus AWS credenciales**: necesita un identificador de clave de AWS acceso y una clave de acceso AWS secreta para acceder a Amazon SES mediante un SDK. Puede encontrar sus credenciales utilizando la página [Security Credentials (Credenciales de seguridad)](https://console.aws.amazon.com/iam/home?#security_credential) de la Consola de administración de AWS. Para obtener más información acerca de las credenciales, consulte [Tipos de credenciales de Amazon SES](send-email-concepts-credentials.md).
+ **Cree un archivo de credenciales compartidas**: para que el código de muestra de esta sección funcione correctamente, debe crear un archivo de credenciales compartidas. Para obtener más información, consulte [Crear un archivo de credenciales compartido para usarlo al enviar correos electrónicos a través de Amazon SES mediante un AWS SDK](create-shared-credentials-file.md).

## Ejemplos de código
<a name="send-an-email-using-sdk-programmatically-examples"></a>

**importante**  
En los tutoriales siguientes, deberá enviarse un correo electrónico a usted mismo para poder verificar si lo recibe. Para seguir experimentando o realizar pruebas de carga, utilice el simulador de buzón de correo de Amazon SES. Los correos electrónicos que envíe al simulador de buzón de correo no se contabilizan en su cuota de envío ni en sus tasas de rebotes y reclamos. Para obtener más información, consulte [Uso del simulador de buzón de correo de forma manual](send-an-email-from-console.md#send-email-simulator).

**Topics**

------
#### [ .NET ]

El siguiente procedimiento muestra cómo enviar un correo electrónico a través de Amazon SES mediante [Visual Studio](https://www.visualstudio.com/) y AWS SDK para .NET.

Esta solución se ha probado utilizando los siguientes componentes:
+ Microsoft Visual Studio Community 2017, versión 15.4.0.
+ Microsoft .NET Framework versión 4.6.1.
+ El paquete AWSSDK .Core (versión 3.3.19), instalado mediante. NuGet
+  AWSSDKEl. SimpleEmail paquete (versión 3.3.6.1), instalado usando. NuGet

**Antes de empezar, lleva a cabo las tareas siguientes:**
+ **Instale Visual Studio**[: Visual Studio está disponible en/. https://www.visualstudio.com](https://www.visualstudio.com/)

**Para enviar un correo electrónico mediante el AWS SDK para .NET**

1. Cree un proyecto nuevo realizando los pasos siguientes:

   1. Inicie Visual Studio.

   1. En el menú **File (Archivo)**, elija **New (Nuevo)**, **Project (Proyecto)**.

   1. En la ventana **New Project**, en el panel de la izquierda, expanda **Installed** y, a continuación, expanda **Visual C\$1**.

   1. En el panel de la derecha, seleccione **Console App (.NET Framework)**.

   1. En **Name (Nombre)**, escriba **AmazonSESSample** y, a continuación, elija **OK (Aceptar)**.

1.  NuGet Úselos para incluir los paquetes de Amazon SES en su solución siguiendo los siguientes pasos:

   1. En el panel **Explorador de soluciones**, haga clic con el botón derecho en su proyecto y, a continuación, seleccione **Administrar NuGet paquetes**.

   1. En la SESSample pestaña **NuGet: Amazon**, selecciona **Explorar**.

   1. En el campo de búsqueda, escriba **AWSSDK.SimpleEmail**. 

   1. Elige el **AWSSDK. SimpleEmail**paquete y, a continuación, selecciona **Instalar**.

   1. En la ventana **Preview Changes**, elija **OK**.

1. En la pestaña **Program.cs**, pegue el código siguiente:

   ```
    1. using Amazon;
    2. using System;
    3. using System.Collections.Generic;
    4. using Amazon.SimpleEmail;
    5. using Amazon.SimpleEmail.Model;
    6. 
    7. namespace AmazonSESSample 
    8. {
    9.     class Program
   10.     {
   11.         // Replace sender@example.com with your "From" address.
   12.         // This address must be verified with Amazon SES.
   13.         static readonly string senderAddress = "sender@example.com";
   14. 
   15.         // Replace recipient@example.com with a "To" address. If your account
   16.         // is still in the sandbox, this address must be verified.
   17.         static readonly string receiverAddress = "recipient@example.com";
   18. 
   19.         // The configuration set to use for this email. If you do not want to use a
   20.         // configuration set, comment out the following property and the
   21.         // ConfigurationSetName = configSet argument below. 
   22.         static readonly string configSet = "ConfigSet";
   23. 
   24.         // The subject line for the email.
   25.         static readonly string subject = "Amazon SES test (AWS SDK para .NET)";
   26. 
   27.         // The email body for recipients with non-HTML email clients.
   28.         static readonly string textBody = "Amazon SES Test (.NET)\r\n" 
   29.                                         + "This email was sent through Amazon SES "
   30.                                         + "using the AWS SDK para .NET.";
   31.         
   32.         // The HTML body of the email.
   33.         static readonly string htmlBody = @"<html>
   34. <head></head>
   35. <body>
   36.   <h1>Amazon SES Test (SDK para .NET)</h1>
   37.   <p>This email was sent with
   38.     <a href='https://aws.amazon.com/ses/'>Amazon SES</a> using the
   39.     <a href='https://aws.amazon.com/sdk-for-net/'> AWS SDK para .NET</a>.</p>
   40. </body>
   41. </html>";
   42. 
   43.         static void Main(string[] args)
   44.         {
   45.             // Replace USWest2 with the AWS Region you're using for Amazon SES.
   46.             // Acceptable values are EUWest1, USEast1, and USWest2.
   47.             using (var client = new AmazonSimpleEmailServiceClient(RegionEndpoint.USWest2))
   48.             {
   49.                 var sendRequest = new SendEmailRequest
   50.                 {
   51.                     Source = senderAddress,
   52.                     Destination = new Destination
   53.                     {
   54.                         ToAddresses =
   55.                         new List<string> { receiverAddress }
   56.                     },
   57.                     Message = new Message
   58.                     {
   59.                         Subject = new Content(subject),
   60.                         Body = new Body
   61.                         {
   62.                             Html = new Content
   63.                             {
   64.                                 Charset = "UTF-8",
   65.                                 Data = htmlBody
   66.                             },
   67.                             Text = new Content
   68.                             {
   69.                                 Charset = "UTF-8",
   70.                                 Data = textBody
   71.                             }
   72.                         }
   73.                     },
   74.                     // If you are not using a configuration set, comment
   75.                     // or remove the following line 
   76.                     ConfigurationSetName = configSet
   77.                 };
   78.                 try
   79.                 {
   80.                     Console.WriteLine("Sending email using Amazon SES...");
   81.                     var response = client.SendEmail(sendRequest);
   82.                     Console.WriteLine("The email was sent successfully.");
   83.                 }
   84.                 catch (Exception ex)
   85.                 {
   86.                     Console.WriteLine("The email was not sent.");
   87.                     Console.WriteLine("Error message: " + ex.Message);
   88. 
   89.                 }
   90.             }
   91. 
   92.             Console.Write("Press any key to continue...");
   93.             Console.ReadKey();
   94.         }
   95.     }
   96. }
   ```

1. En el editor de código, haga lo siguiente:
   + *sender@example.com*Sustitúyala por la dirección de correo electrónico «De:». Esta dirección debe verificarse. Para obtener más información, consulte [Identidades verificadas en Amazon SES](verify-addresses-and-domains.md).
   + *recipient@example.com*Sustitúyala por la dirección «Para:». Si su cuenta está todavía en el entorno de pruebas, esta dirección también se debe verificar.
   + *ConfigSet*Sustitúyalo por el nombre del conjunto de configuraciones que se utilizará al enviar este correo electrónico.
   + *USWest2*Sustitúyalo por el nombre del Región de AWS punto de conexión que utilizas para enviar correos electrónicos mediante Amazon SES. Para ver una lista de las regiones donde Amazon SES está disponible, consulte [Amazon Simple Email Service (Amazon SES)](https://docs.aws.amazon.com/general/latest/gr/rande.html#ses_region) en la *Referencia general de AWS*.

   Cuando termine, guarde `Program.cs`.

1. Cree y ejecute la aplicación completando los pasos siguientes:

   1. En el menú **Build**, elija **Build Solution**.

   1. En el menú **Debug**, elija **Start Debugging**. Aparece una ventana de consola.

1. Revise la salida de la consola. Si el correo electrónico se envía correctamente, la consola muestra `The email was sent successfully.` 

1. Si el correo electrónico se ha enviado correctamente, inicie sesión en el cliente de correo electrónico de la dirección del destinatario. Ahí podrá ver el mensaje que ha enviado.

------
#### [ Java ]

El siguiente procedimiento muestra cómo utilizar el [IDE de Eclipse para desarrolladores de Java EE](http://www.eclipse.org/) y cómo [AWS Toolkit for Eclipse](https://docs.aws.amazon.com/toolkit-for-jetbrains/latest/userguide/welcome.html)crear un proyecto de AWS SDK y modificar el código de Java para enviar un correo electrónico a través de Amazon SES. 

**Antes de empezar, lleva a cabo las tareas siguientes:**
+ **Instale Eclipse**: Eclipse está disponible en [https://www.eclipse.org/downloads](https://www.eclipse.org/downloads). El código en este tutorial se ha probado mediante Eclipse Neon.3 (versión 4.6.3), ejecutando la versión 1.8 de Java Runtime Environment (JRE).
+ **Instale el AWS Toolkit for Eclipse**: las instrucciones para añadirlo AWS Toolkit for Eclipse a su instalación de Eclipse están disponibles en [https://aws.amazon.com/eclipse.](https://aws.amazon.com/eclipse) El código de este tutorial se ha probado utilizando la versión 2.3.1 del AWS Toolkit for Eclipse.

**Para enviar un correo electrónico utilizando el AWS SDK para Java**

1. Cree un proyecto AWS Java en Eclipse realizando los siguientes pasos:

   1. Inicie Eclipse.

   1. En el menú **File**, elija **New** y, a continuación, elija **Other**. En la ventana **New**, expanda la carpeta **AWS** y, a continuación, elija **AWS Java Project**.

   1. En el cuadro de diálogo **Nuevo proyecto AWS Java**, haga lo siguiente:

      1. Para **Project name**, escriba un nombre de proyecto.

      1. En **AWS SDK para Java Ejemplos**, selecciona **Amazon Simple Email Service JavaMail Sample**.

      1. Seleccione **Finalizar**.

1. En Eclipse, en la página **Package Explorer**, amplíe su proyecto.

1. En su proyecto, expanda la carpeta `src/main/java`, la carpeta `com.amazon.aws.samples` y, a continuación, haga doble clic en `AmazonSESSample.java`.

1. Reemplace todo el contenido de `AmazonSESSample.java` por el siguiente código:

   ```
    1. package com.amazonaws.samples;
    2. 
    3. import java.io.IOException;
    4. 
    5. import com.amazonaws.regions.Regions;
    6. import com.amazonaws.services.simpleemail.AmazonSimpleEmailService;
    7. import com.amazonaws.services.simpleemail.AmazonSimpleEmailServiceClientBuilder;
    8. import com.amazonaws.services.simpleemail.model.Body;
    9. import com.amazonaws.services.simpleemail.model.Content;
   10. import com.amazonaws.services.simpleemail.model.Destination;
   11. import com.amazonaws.services.simpleemail.model.Message;
   12. import com.amazonaws.services.simpleemail.model.SendEmailRequest; 
   13. 
   14. public class AmazonSESSample {
   15. 
   16.   // Replace sender@example.com with your "From" address.
   17.   // This address must be verified with Amazon SES.
   18.   static final String FROM = "sender@example.com";
   19. 
   20.   // Replace recipient@example.com with a "To" address. If your account
   21.   // is still in the sandbox, this address must be verified.
   22.   static final String TO = "recipient@example.com";
   23. 
   24.   // The configuration set to use for this email. If you do not want to use a
   25.   // configuration set, comment the following variable and the 
   26.   // .withConfigurationSetName(CONFIGSET); argument below.
   27.   static final String CONFIGSET = "ConfigSet";
   28. 
   29.   // The subject line for the email.
   30.   static final String SUBJECT = "Amazon SES test (AWS SDK para Java)";
   31.   
   32.   // The HTML body for the email.
   33.   static final String HTMLBODY = "<h1>Amazon SES test (AWS SDK para Java)</h1>"
   34.       + "<p>This email was sent with <a href='https://aws.amazon.com/ses/'>"
   35.       + "Amazon SES</a> using the <a href='https://aws.amazon.com/sdk-for-java/'>" 
   36.       + "AWS SDK for Java</a>";
   37. 
   38.   // The email body for recipients with non-HTML email clients.
   39.   static final String TEXTBODY = "This email was sent through Amazon SES "
   40.       + "using the AWS SDK para Java.";
   41. 
   42.   public static void main(String[] args) throws IOException {
   43. 
   44.     try {
   45.       AmazonSimpleEmailService client = 
   46.           AmazonSimpleEmailServiceClientBuilder.standard()
   47.           // Replace US_WEST_2 with the AWS Region you're using for
   48.           // Amazon SES.
   49.             .withRegion(Regions.US_WEST_2).build();
   50.       SendEmailRequest request = new SendEmailRequest()
   51.           .withDestination(
   52.               new Destination().withToAddresses(TO))
   53.           .withMessage(new Message()
   54.               .withBody(new Body()
   55.                   .withHtml(new Content()
   56.                       .withCharset("UTF-8").withData(HTMLBODY))
   57.                   .withText(new Content()
   58.                       .withCharset("UTF-8").withData(TEXTBODY)))
   59.               .withSubject(new Content()
   60.                   .withCharset("UTF-8").withData(SUBJECT)))
   61.           .withSource(FROM)
   62.           // Comment or remove the next line if you are not using a
   63.           // configuration set
   64.           .withConfigurationSetName(CONFIGSET);
   65.       client.sendEmail(request);
   66.       System.out.println("Email sent!");
   67.     } catch (Exception ex) {
   68.       System.out.println("The email was not sent. Error message: " 
   69.           + ex.getMessage());
   70.     }
   71.   }
   72. }
   ```

1. En `AmazonSESSample.java`, reemplace lo siguiente por sus propios valores:
**importante**  
Las direcciones de correo electrónico distinguen entre mayúsculas y minúsculas. Asegúrese de que las direcciones sean exactamente las mismas que las que haya verificado.
   + `SENDER@EXAMPLE.COM`: reemplácelo por su dirección de correo electrónico de origen. Debe verificar esta dirección antes de ejecutar este programa. Para obtener más información, consulte [Identidades verificadas en Amazon SES](verify-addresses-and-domains.md).
   + `RECIPIENT@EXAMPLE.COM`: reemplácelo por su dirección de correo electrónico de destinatario (“To”). Si su cuenta está todavía en el entorno de pruebas, debe verificar esta dirección antes de utilizarla. Para obtener más información, consulte [Solicitud de acceso de producción (salida del entorno de pruebas de Amazon SES)](request-production-access.md).
   + **(Opcional) `us-west-2`**: si desea utilizar Amazon SES en una región distinta a la de EE. UU. Oeste (Oregón), reemplácela por la región que desee utilizar. Para ver una lista de las regiones donde Amazon SES está disponible, consulte [Amazon Simple Email Service (Amazon SES)](https://docs.aws.amazon.com/general/latest/gr/rande.html#ses_region) en la *Referencia general de AWS*.

1. Guarde `AmazonSESSample.java`.

1. Para crear el proyecto, elija **Project** y, a continuación, elija **Build Project**.
**nota**  
Si esta opción está deshabilitada, la creación automática podría estar habilitada; en tal caso, omita este paso.

1. Para iniciar el programa y enviar el correo electrónico, elija **Run** y, a continuación, vuelva a elegir **Run**.

1. Revise la salida del panel de consola en Eclipse. Si el correo electrónico se ha enviado correctamente, la consola muestra "`Email sent!`". De lo contrario, muestra un mensaje de error.

1. Si el correo electrónico se ha enviado correctamente, inicie sesión en el cliente de correo electrónico de la dirección del destinatario. Ahí podrá ver el mensaje que ha enviado.

------
#### [ PHP ]

En este tema, se muestra cómo utilizar [AWS SDK para PHP](https://aws.amazon.com/sdk-for-php/) para enviar un correo electrónico a través de Amazon SES. 

**Antes de empezar, lleva a cabo las tareas siguientes:**
+ **Instale PHP**: PHP está disponible en [http://php.net/downloads.php](http://php.net/downloads.php). Este tutorial requiere PHP versión 5.5 o posterior. Después de instalar PHP, agregue la ruta a PHP en sus variables de entorno para que pueda ejecutar PHP desde cualquier símbolo del sistema. El código de este tutorial se ha probado con PHP 7.2.7.
+ **Instale la AWS SDK para PHP versión 3**: para ver las instrucciones de descarga e instalación, consulte la [AWS SDK para PHP documentación](https://docs.aws.amazon.com/aws-sdk-php/v3/guide/getting-started/installation.html). El código de este tutorial se ha probado utilizando la versión 3.64.13 del SDK. 

**Para enviar un correo electrónico a través de Amazon SES utilizando el AWS SDK para PHP**

1. En un editor de texto, cree un archivo con el nombre `amazon-ses-sample.php`. Pegue el siguiente código:

   ```
    1. <?php
    2. 
    3. // If necessary, modify the path in the require statement below to refer to the 
    4. // location of your Composer autoload.php file.
    5. require 'vendor/autoload.php';
    6. 
    7. use Aws\Ses\SesClient;
    8. use Aws\Exception\AwsException;
    9. 
   10. // Create an SesClient. Change the value of the region parameter if you're 
   11. // using an AWS Region other than US West (Oregon). Change the value of the
   12. // profile parameter if you want to use a profile in your credentials file
   13. // other than the default.
   14. $SesClient = new SesClient([
   15.     'profile' => 'default',
   16.     'version' => '2010-12-01',
   17.     'region'  => 'us-west-2'
   18. ]);
   19. 
   20. // Replace sender@example.com with your "From" address.
   21. // This address must be verified with Amazon SES.
   22. $sender_email = 'sender@example.com';
   23. 
   24. // Replace these sample addresses with the addresses of your recipients. If
   25. // your account is still in the sandbox, these addresses must be verified.
   26. $recipient_emails = ['recipient1@example.com','recipient2@example.com'];
   27. 
   28. // Specify a configuration set. If you do not want to use a configuration
   29. // set, comment the following variable, and the
   30. // 'ConfigurationSetName' => $configuration_set argument below.
   31. $configuration_set = 'ConfigSet';
   32. 
   33. $subject = 'Amazon SES test (AWS SDK para PHP)';
   34. $plaintext_body = 'This email was sent with Amazon SES using the AWS SDK for PHP.' ;
   35. $html_body =  '<h1>AWS Amazon Simple Email Service Test Email</h1>'.
   36.               '<p>This email was sent with <a href="https://aws.amazon.com/ses/">'.
   37.               'Amazon SES</a> using the <a href="https://aws.amazon.com/sdk-for-php/">'.
   38.               'AWS SDK para PHP</a>.</p>';
   39. $char_set = 'UTF-8';
   40. 
   41. try {
   42.     $result = $SesClient->sendEmail([
   43.         'Destination' => [
   44.             'ToAddresses' => $recipient_emails,
   45.         ],
   46.         'ReplyToAddresses' => [$sender_email],
   47.         'Source' => $sender_email,
   48.         'Message' => [
   49.           'Body' => [
   50.               'Html' => [
   51.                   'Charset' => $char_set,
   52.                   'Data' => $html_body,
   53.               ],
   54.               'Text' => [
   55.                   'Charset' => $char_set,
   56.                   'Data' => $plaintext_body,
   57.               ],
   58.           ],
   59.           'Subject' => [
   60.               'Charset' => $char_set,
   61.               'Data' => $subject,
   62.           ],
   63.         ],
   64.         // If you aren't using a configuration set, comment or delete the
   65.         // following line
   66.         'ConfigurationSetName' => $configuration_set,
   67.     ]);
   68.     $messageId = $result['MessageId'];
   69.     echo("Email sent! Message ID: $messageId"."\n");
   70. } catch (AwsException $e) {
   71.     // output error message if fails
   72.     echo $e->getMessage();
   73.     echo("The email was not sent. Error message: ".$e->getAwsErrorMessage()."\n");
   74.     echo "\n";
   75. }
   ```

1. En `amazon-ses-sample.php`, reemplace lo siguiente por sus propios valores:
   + **`path_to_sdk_inclusion`**—Sustitúyala por la ruta requerida para incluirla AWS SDK para PHP en el programa. Para obtener más información, consulte la [Documentación de AWS SDK para PHP](https://docs.aws.amazon.com/aws-sdk-php/v3/guide/getting-started/basic-usage.html). 
   + **`sender@example.com`**: reemplace esta dirección de correo electrónico por una dirección que haya verificado con Amazon SES. Para obtener más información, consulte [Identidades verificadas](verify-addresses-and-domains.md). Las direcciones de email en Amazon SES distinguen entre mayúsculas y minúsculas. Asegúrese de que la dirección que introduce sea exactamente la misma que la que haya verificado.
   + **`recipient1@example.com`, `recipient2@example.com`**: sustitúyalos por la direcciones de los destinatarios. Si su cuenta está todavía en el entorno de pruebas, las direcciones de los destinatarios también se deben verificar. Para obtener más información, consulte [Solicitud de acceso de producción (salida del entorno de pruebas de Amazon SES)](request-production-access.md). Asegúrese de que la dirección que introduce sea exactamente la misma que la que haya verificado.
   + **(Opcional) `ConfigSet`**: si desea utilizar un conjunto de configuración al enviar este correo electrónico, sustituya este valor por el nombre del conjunto de configuración. Para obtener más información acerca de los conjuntos de configuración, consulte [Uso de conjuntos de configuración en Amazon SES](using-configuration-sets.md).
   + **(Opcional) `us-west-2`**: si desea utilizar Amazon SES en una región distinta a la de EE. UU. Oeste (Oregón), reemplácela por la región que desee utilizar. Para ver una lista de las regiones donde Amazon SES está disponible, consulte [Amazon Simple Email Service (Amazon SES)](https://docs.aws.amazon.com/general/latest/gr/rande.html#ses_region) en la *Referencia general de AWS*.

1. Guarde `amazon-ses-sample.php`.

1. Para ejecutar el programa, abra un símbolo del sistema en el directorio en que se encuentra `amazon-ses-sample.php` y, a continuación, escriba el comando siguiente:

   ```
   $ php amazon-ses-sample.php
   ```

1. Revise la salida. Si el correo electrónico se ha enviado correctamente, la consola muestra "`Email sent!`". De lo contrario, muestra un mensaje de error.
**nota**  
Si detecta un error "cURL error 60: SSL certificate problem" (Error 60 de cURL: problema con el certificado SSL) al ejecutar el programa, descargue el último paquete de CA, tal como se describe en la [documentación del AWS SDK para PHP](https://docs.aws.amazon.com/aws-sdk-php/v3/guide/faq.html#what-do-i-do-about-a-curl-ssl-certificate-error). A continuación, en `amazon-ses-sample.php`, añada las siguientes líneas a la matriz `SesClient::factory`, reemplace `path_of_certs` por la ruta al paquete de CA que ha descargado y vuelva a ejecutar el programa.  

   ```
   1. 'http' => [
   2.    'verify' => 'path_of_certs\ca-bundle.crt'
   3. ]
   ```

1. Inicie sesión en el cliente de correo electrónico de la dirección del destinatario. Ahí podrá ver el mensaje que ha enviado.

------
#### [ Ruby ]

En este tema, se muestra cómo utilizar [AWS SDK para Ruby](https://aws.amazon.com/sdk-for-ruby/) para enviar un correo electrónico a través de Amazon SES. 

**Antes de empezar, lleva a cabo las tareas siguientes:**
+ **Instalar Ruby**[: Ruby está disponible en https://www.ruby-lang. org/en/downloads](https://www.ruby-lang.org/en/downloads/)/. El código de este tutorial se ha probado con Ruby 1.9.3. Después de instalar Ruby, añada la ruta a Ruby a sus variables de entorno para que pueda ejecutar Ruby desde cualquier símbolo del sistema.
+ **Instale el AWS SDK para Ruby**: para obtener instrucciones de descarga e instalación, consulte [Instalación del AWS SDK para Ruby en la](https://docs.aws.amazon.com/sdk-for-ruby/latest/developer-guide/setup-install.html) *Guía para AWS SDK para Ruby desarrolladores*. El código de muestra de este tutorial se ha probado utilizando la versión 2.9.36 del AWS SDK para Ruby.
+ **Cree un archivo de credenciales compartidas**: para que el código de muestra de esta sección funcione correctamente, debe crear un archivo de credenciales compartidas. Para obtener más información, consulte [Crear un archivo de credenciales compartido para usarlo al enviar correos electrónicos a través de Amazon SES mediante un AWS SDK](create-shared-credentials-file.md).

**Para enviar un correo electrónico a través de Amazon SES utilizando el AWS SDK para Ruby**

1. En un editor de texto, cree un archivo con el nombre `amazon-ses-sample.rb`. Pegue el código siguiente en el archivo:

   ```
    1. require 'aws-sdk'
    2. 
    3. # Replace sender@example.com with your "From" address.
    4. # This address must be verified with Amazon SES.
    5. sender = "sender@example.com"
    6. 
    7. # Replace recipient@example.com with a "To" address. If your account 
    8. # is still in the sandbox, this address must be verified.
    9. recipient = "recipient@example.com"
   10. 
   11. # Specify a configuration set. If you do not want to use a configuration
   12. # set, comment the following variable and the 
   13. # configuration_set_name: configsetname argument below. 
   14. configsetname = "ConfigSet"
   15.   
   16. # Replace us-west-2 with the AWS Region you're using for Amazon SES.
   17. awsregion = "us-west-2"
   18. 
   19. # The subject line for the email.
   20. subject = "Amazon SES test (AWS SDK para Ruby)"
   21. 
   22. # The HTML body of the email.
   23. htmlbody =
   24.   '<h1>Amazon SES test (AWS SDK para Ruby)</h1>'\
   25.   '<p>This email was sent with <a href="https://aws.amazon.com/ses/">'\
   26.   'Amazon SES</a> using the <a href="https://aws.amazon.com/sdk-for-ruby/">'\
   27.   'AWS SDK para Ruby</a>.'
   28. 
   29. # The email body for recipients with non-HTML email clients.  
   30. textbody = "This email was sent with Amazon SES using the AWS SDK para Ruby."
   31. 
   32. # Specify the text encoding scheme.
   33. encoding = "UTF-8"
   34. 
   35. # Create a new SES resource and specify a region
   36. ses = Aws::SES::Client.new(region: awsregion)
   37. 
   38. # Try to send the email.
   39. begin
   40. 
   41.   # Provide the contents of the email.
   42.   resp = ses.send_email({
   43.     destination: {
   44.       to_addresses: [
   45.         recipient,
   46.       ],
   47.     },
   48.     message: {
   49.       body: {
   50.         html: {
   51.           charset: encoding,
   52.           data: htmlbody,
   53.         },
   54.         text: {
   55.           charset: encoding,
   56.           data: textbody,
   57.         },
   58.       },
   59.       subject: {
   60.         charset: encoding,
   61.         data: subject,
   62.       },
   63.     },
   64.   source: sender,
   65.   # Comment or remove the following line if you are not using 
   66.   # a configuration set
   67.   configuration_set_name: configsetname,
   68.   })
   69.   puts "Email sent!"
   70. 
   71. # If something goes wrong, display an error message.
   72. rescue Aws::SES::Errors::ServiceError => error
   73.   puts "Email not sent. Error message: #{error}"
   74. 
   75. end
   ```

1. En `amazon-ses-sample.rb`, reemplace lo siguiente por sus propios valores:
   + **`sender@example.com`**: reemplace esta dirección por una dirección de email que haya verificado con Amazon SES. Para obtener más información, consulte [Identidades verificadas](verify-addresses-and-domains.md). Las direcciones de email en Amazon SES distinguen entre mayúsculas y minúsculas. Asegúrese de que la dirección que introduce sea exactamente la misma que la que haya verificado.
   + **`recipient@example.com`**: reemplace esta dirección por la dirección del destinatario. Si su cuenta está todavía en el entorno de pruebas, debe verificar esta dirección antes de utilizarla. Para obtener más información, consulte [Solicitud de acceso de producción (salida del entorno de pruebas de Amazon SES)](request-production-access.md). Asegúrese de que la dirección que introduce sea exactamente la misma que la que haya verificado.
   + **(Opcional) `us-west-2`**: si desea utilizar Amazon SES en una región distinta a la de EE. UU. Oeste (Oregón), reemplácela por la región que desee utilizar. Para ver una lista de las regiones donde Amazon SES está disponible, consulte [Amazon Simple Email Service (Amazon SES)](https://docs.aws.amazon.com/general/latest/gr/rande.html#ses_region) en la *Referencia general de AWS*.

1. Guarde `amazon-ses-sample.rb`.

1. Para ejecutar el programa, abra un símbolo del sistema en el directorio en que se encuentra `amazon-ses-sample.rb` y, a continuación, escriba **ruby amazon-ses-sample.rb**.

1. Revise la salida. Si el correo electrónico se ha enviado correctamente, la consola muestra "`Email sent!`". De lo contrario, muestra un mensaje de error.

1. Inicie sesión en el cliente de correo electrónico de la dirección del destinatario. Encontrará el mensaje que ha enviado.

------
#### [ Python ]

En este tema, se muestra cómo utilizar [AWS SDK para Python (Boto)](https://aws.amazon.com/sdk-for-python/) para enviar un correo electrónico a través de Amazon SES. 

**Antes de empezar, lleva a cabo las tareas siguientes:**
+ **Verifique su dirección de correo electrónico con Amazon SES**: para poder enviar correo electrónico con Amazon SES, debe verificar que es propietario de la dirección de correo electrónico del remitente. Si su cuenta aún está en el entorno de pruebas de Amazon SES, también tiene que verificar la dirección de correo electrónico del destinatario. Le recomendamos que utilice la consola de Amazon SES para verificar las direcciones de correo electrónico. Para obtener más información, consulte [Creación de una identidad de dirección de correo electrónico](creating-identities.md#verify-email-addresses-procedure). 
+ **Obtenga sus AWS credenciales**: necesita un identificador de clave de AWS acceso y una clave de acceso AWS secreta para acceder a Amazon SES mediante un SDK. Puede encontrar sus credenciales utilizando la página [Security Credentials](https://console.aws.amazon.com/iam/home?#security_credential) de la Consola de administración de AWS. Para obtener más información acerca de las credenciales, consulte [Tipos de credenciales de Amazon SES](send-email-concepts-credentials.md).
+ **Instalar Python: Python** está disponible en [https://www.python.org/downloads/](https://www.python.org/downloads/). El código de este tutorial se ha probado utilizando Python 2.7.6 y Python 3.6.1. Después de instalar Python, añada la ruta a Python a sus variables de entorno para que pueda ejecutar Python desde cualquier símbolo del sistema.
+ **Instale el AWS SDK para Python (Boto)—Para ver las instrucciones de** [descarga e instalación, consulte la documentación.AWS SDK para Python (Boto)](https://boto3.readthedocs.io/en/latest/guide/quickstart.html#installation) El código de muestra de este tutorial se ha probado con la versión 1.4.4 del SDK para Python.

**Para enviar un correo electrónico a través de Amazon SES con el SDK para Python.**

1. En un editor de texto, cree un archivo con el nombre `amazon-ses-sample.py`. Pegue el código siguiente en el archivo:

   ```
    1. import boto3
    2. from botocore.exceptions import ClientError
    3. 
    4. # Replace sender@example.com with your "From" address.
    5. # This address must be verified with Amazon SES.
    6. SENDER = "Sender Name <sender@example.com>"
    7. 
    8. # Replace recipient@example.com with a "To" address. If your account 
    9. # is still in the sandbox, this address must be verified.
   10. RECIPIENT = "recipient@example.com"
   11. 
   12. # Specify a configuration set. If you do not want to use a configuration
   13. # set, comment the following variable, and the 
   14. # ConfigurationSetName=CONFIGURATION_SET argument below.
   15. CONFIGURATION_SET = "ConfigSet"
   16. 
   17. # If necessary, replace us-west-2 with the AWS Region you're using for Amazon SES.
   18. AWS_REGION = "us-west-2"
   19. 
   20. # The subject line for the email.
   21. SUBJECT = "Amazon SES Test (SDK for Python)"
   22. 
   23. # The email body for recipients with non-HTML email clients.
   24. BODY_TEXT = ("Amazon SES Test (Python)\r\n"
   25.              "This email was sent with Amazon SES using the "
   26.              "AWS SDK para Python (Boto)."
   27.             )
   28.             
   29. # The HTML body of the email.
   30. BODY_HTML = """<html>
   31. <head></head>
   32. <body>
   33.   <h1>Amazon SES Test (SDK for Python)</h1>
   34.   <p>This email was sent with
   35.     <a href='https://aws.amazon.com/ses/'>Amazon SES</a> using the
   36.     <a href='https://aws.amazon.com/sdk-for-python/'> AWS SDK para Python (Boto)</a>.</p>
   37. </body>
   38. </html>
   39.             """            
   40. 
   41. # The character encoding for the email.
   42. CHARSET = "UTF-8"
   43. 
   44. # Create a new SES resource and specify a region.
   45. client = boto3.client('ses',region_name=AWS_REGION)
   46. 
   47. # Try to send the email.
   48. try:
   49.     #Provide the contents of the email.
   50.     response = client.send_email(
   51.         Destination={
   52.             'ToAddresses': [
   53.                 RECIPIENT,
   54.             ],
   55.         },
   56.         Message={
   57.             'Body': {
   58.                 'Html': {
   59.                     'Charset': CHARSET,
   60.                     'Data': BODY_HTML,
   61.                 },
   62.                 'Text': {
   63.                     'Charset': CHARSET,
   64.                     'Data': BODY_TEXT,
   65.                 },
   66.             },
   67.             'Subject': {
   68.                 'Charset': CHARSET,
   69.                 'Data': SUBJECT,
   70.             },
   71.         },
   72.         Source=SENDER,
   73.         # If you are not using a configuration set, comment or delete the
   74.         # following line
   75.         ConfigurationSetName=CONFIGURATION_SET,
   76.     )
   77. # Display an error if something goes wrong.	
   78. except ClientError as e:
   79.     print(e.response['Error']['Message'])
   80. else:
   81.     print("Email sent! Message ID:"),
   82.     print(response['MessageId'])
   ```

1. En `amazon-ses-sample.py`, reemplace lo siguiente por sus propios valores:
   + **`sender@example.com`**: reemplace esta dirección por una dirección de email que haya verificado con Amazon SES. Para obtener más información, consulte [Identidades verificadas](verify-addresses-and-domains.md). Las direcciones de correo electrónico en Amazon SES distinguen entre mayúsculas y minúsculas. Asegúrese de que la dirección que introduce sea exactamente la misma que la que haya verificado.
   + **`recipient@example.com`**: reemplace esta dirección por la dirección del destinatario. Si su cuenta está todavía en el entorno de pruebas, debe verificar esta dirección antes de utilizarla. Para obtener más información, consulte [Solicitud de acceso de producción (salida del entorno de pruebas de Amazon SES)](request-production-access.md). Asegúrese de que la dirección que introduce sea exactamente la misma que la que haya verificado.
   + **(Opcional) `us-west-2`**: si desea utilizar Amazon SES en una región distinta a la de EE. UU. Oeste (Oregón), reemplácela por la región que desee utilizar. Para ver una lista de las regiones donde Amazon SES está disponible, consulte [Amazon Simple Email Service (Amazon SES)](https://docs.aws.amazon.com/general/latest/gr/rande.html#ses_region) en la *Referencia general de AWS*.

1. Guarde `amazon-ses-sample.py`.

1. Para ejecutar el programa, abra un símbolo del sistema en el directorio en que se encuentra `amazon-ses-sample.py` y, a continuación, escriba **python amazon-ses-sample.py**.

1. Revise la salida. Si el correo electrónico se ha enviado correctamente, la consola muestra "`Email sent!`". De lo contrario, muestra un mensaje de error.

1. Inicie sesión en el cliente de correo electrónico de la dirección del destinatario. Ahí podrá ver el mensaje que ha enviado.

------

# Crear un archivo de credenciales compartido para usarlo al enviar correos electrónicos a través de Amazon SES mediante un AWS SDK
<a name="create-shared-credentials-file"></a>

El siguiente procedimiento muestra cómo crear un archivo de credenciales compartidas en su directorio de inicio. Para que el código de muestra de SDK funcione correctamente, debe crear este archivo.

1. En un editor de texto, cree un nuevo archivo. En el archivo, pegue el código siguiente:

   ```
   1. [default]
   2. aws_access_key_id = YOUR_AWS_ACCESS_KEY_ID
   3. aws_secret_access_key = YOUR_AWS_SECRET_ACCESS_KEY
   ```

1. En el archivo de texto que acaba de crear, `YOUR_AWS_ACCESS_KEY` sustitúyalo por su ID de clave de AWS acceso único y `YOUR_AWS_SECRET_ACCESS_KEY` sustitúyalo por su clave de acceso AWS secreta única.

1. Guarde el archivo. En la siguiente tabla se muestra la ubicación correcta y el nombre de archivo de su sistema operativo.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/ses/latest/dg/create-shared-credentials-file.html)
**importante**  
No incluya una extensión de archivo cuando guarde el archivo de credenciales.

# Codificaciones de contenido compatibles con Amazon SES
<a name="content-encodings"></a>

Se proporciona lo siguiente como referencia.

Amazon SES admite las siguientes codificaciones de código:
+ `deflate`
+ `gzip`
+ `identity`

Amazon SES también admite el formato de encabezado Accept-Encoding, según la especificación [RFC 7231](https://tools.ietf.org/html/rfc7231#section-5.3.4):
+ `Accept-Encoding:deflate,gzip`
+ `Accept-Encoding:`
+ `Accept-Encoding:*`
+ `Accept-Encoding:deflate;q=0.5,gzip;q=1.0`
+ `Accept-Encoding:gzip;q=1.0,identity;q=0.5,*;q=0`

# Amazon SES y los protocolos de seguridad
<a name="security-protocols"></a>

En este tema, se describen los protocolos de seguridad que puede utilizar al conectarse a Amazon SES, así como cuando Amazon SES entrega un correo electrónico a un receptor.

## Remitente de correo electrónico para Amazon SES
<a name="security-client-to-ses"></a>

El protocolo de seguridad que se utiliza para conectarse a Amazon SES depende de si se utiliza la API de Amazon SES o la interfaz de SMTP de Amazon SES, tal y como se describe a continuación.

### HTTPS
<a name="security-client-to-ses-api"></a>

Si utiliza la API de Amazon SES (directamente o mediante un AWS SDK), TLS cifra todas las comunicaciones a través del punto de enlace HTTPS de Amazon SES. El punto de conexión HTTPS de Amazon SES admite TLS 1.2 y TLS 1.3.

### Interfaz de SMTP
<a name="security-client-to-ses-smtp"></a>

Si obtiene acceso a Amazon SES a través de la interfaz de SMTP, deberá cifrar la conexión mediante Transport Layer Security (TLS). Tenga en cuenta que TLS se denomina en ocasiones con el nombre de su protocolo predecesor, capa de conexión segura (SSL).

Amazon SES admite dos mecanismos para establecer la conexión cifrada por TLS: STARTTLS y TLS Wrapper.
+ **STARTTLS**: STARTTLS es un medio para actualizar una conexión sin cifrar a una conexión cifrada. Existen versiones de STARTTLS para diversos protocolos; la versión de SMTP se define en [RFC 3207](https://www.ietf.org/rfc/rfc3207.txt). Para las conexiones STARTTLS, Amazon SES admite TLS 1.2 y TLS 1.3.
+ **TLS Wrapper**: TLS Wrapper (también conocido como SMTPS o protocolo Handshake) es un medio de iniciar una conexión cifrada sin establecer primero una conexión sin cifrar. Con TLS Wrapper, el punto de enlace de SMTP de Amazon SES no realiza la negociación de TLS: es responsabilidad del cliente conectarse al punto de enlace mediante TLS y seguir utilizando TLS para toda la conversación. TLS Wrapper es un protocolo más antiguo, pero muchos clientes siguen siendo compatibles. Para las conexiones TLS Wrapper, Amazon SES admite TLS 1.2 y TLS 1.3.

Para obtener información acerca de cómo conectarse a la interfaz de SMTP de Amazon SES mediante estos métodos, consulte [Conexión a un punto de enlace de SMTP de Amazon SES](smtp-connect.md).

## Amazon SES al receptor
<a name="security-ses-to-receiver"></a>

 Si bien TLS 1.3 es nuestro método de entrega predeterminado, SES puede entregar correo electrónico a servidores de correo que utilizan versiones anteriores de dicho protocolo. 

De forma predeterminada, Amazon SES utiliza *TLS de forma oportuna*. El TLS oportunista de SES siempre usa STARTTLS y no incluye el TLS Wrapper. El flujo implica establecer una conexión inicial de texto sin formato y, a continuación, actualizar a una sesión cifrada con TLS si tanto el cliente como el servidor admiten STARTTLS. Si SES no puede establecer una conexión segura, envía el mensaje sin cifrar.

Puede cambiar este comportamiento utilizando conjuntos de configuración. Utilice la operación [PutConfigurationSetDeliveryOptions](https://docs.aws.amazon.com/ses/latest/APIReference/API_PutConfigurationSetDeliveryOptions.html)API para establecer la `TlsPolicy` propiedad de una configuración establecida en. `Require` Puede utilizar la [AWS CLI](https://aws.amazon.com/cli) para realizar este cambio.

**Para configurar Amazon SES para exigir conexiones TLS para un conjunto de configuración**
+ En la línea de comandos, introduzca el comando siguiente:

  ```
  aws sesv2 put-configuration-set-delivery-options --configuration-set-name MyConfigurationSet --tls-policy REQUIRE
  ```

  En el ejemplo anterior, *MyConfigurationSet* sustitúyalo por el nombre del conjunto de configuraciones.

  Cuando envía un correo electrónico a través de este conjunto de configuración, Amazon SES solo envía el mensaje al servidor de correo electrónico receptor si puede establecer una conexión segura. Amazon SES eliminará el mensaje si no puede realizar una conexión segura con el servidor de correo electrónico receptor.

## End-to-end cifrado
<a name="security-end-to-end"></a>

Puede usar Amazon SES para enviar mensajes cifrados mediante S/MIME PGP. El remitente cifra los mensajes que utilizan estos protocolos. Solo los destinatarios que tengan las claves privadas necesarias para descifrar los mensajes pueden verlos.

Amazon SES admite los siguientes tipos de MIME, que puede utilizar para enviar correos electrónicos S/MIME cifrados:
+ `application/pkcs7-mime`
+ `application/pkcs7-signature`
+ `application/x-pkcs7-mime`
+ `application/x-pkcs7-signature`

Amazon SES también admite los siguientes tipos MIME, que se pueden utilizar para enviar correo electrónico cifrado PGP:
+ `application/pgp-encrypted`
+ `application/pgp-keys`
+ `application/pgp-signature`

# Campos de encabezado de Amazon SES
<a name="header-fields"></a>

Amazon SES puede aceptar todos los encabezados de correo electrónico que siguen el formato descrito en [RFC 822](https://www.rfc-editor.org/rfc/rfc822.html).

Los siguientes campos no pueden aparecer más de una vez en la sección de encabezado de un mensaje:
+ `Accept-Language`
+ `acceptLanguage`
+ `Archived-At`
+ `Auto-Submitted`
+ `Bounces-to`
+ `Comments`
+ `Content-Alternative`
+ `Content-Base`
+ `Content-Class`
+ `Content-Description`
+ `Content-Disposition`
+ `Content-Duration`
+ `Content-ID`
+ `Content-Language`
+ `Content-Length`
+ `Content-Location`
+ `Content-MD5`
+ `Content-Transfer-Encoding`
+ `Content-Type`
+ `Date`
+ `Delivered-To `
+ `Disposition-Notification-Options`
+ `Disposition-Notification-To`
+ `DKIM-Signature`
+ `DomainKey-Signature`
+ `Errors-To`
+ `From`
+ `Importance`
+ `In-Reply-To`
+ `Keywords`
+ `List-Archive`
+ `List-Help`
+ `List-Id`
+ `List-Owner`
+ `List-Post`
+ `List-Subscribe`
+ `List-Unsubscribe`
+ `List-Unsubscribe-Post`
+ `Message-Context`
+ `Message-ID`
+ `MIME-Version`
+ `Organization`
+ `Original-From`
+ `Original-Message-ID`
+ `Original-Recipient`
+ `Original-Subject`
+ `Precedence`
+ `Priority`
+ `References`
+ `Reply-To`
+ `Return-Path`
+ `Return-Receipt-To`
+ `Sender`
+ `Solicitation`
+ `Sensitivity`
+ `Subject`
+ `Thread-Index`
+ `Thread-Topic`
+ `User-Agent`
+ `VBR-Info`

**Consideraciones**
+ El campo `acceptLanguage` no es estándar. Si es posible, debe utilizar el encabezado `Accept-Language` en su lugar.
+ Si especifica un encabezado `Date`, Amazon SES lo anula con una marca temporal que se corresponde con la fecha y la hora de la zona horaria UTC cuando Amazon SES aceptó el mensaje.
+ Si proporciona un encabezado `Message-ID`, Amazon SES anula el encabezado con su propio valor.
+ Si especifica un encabezado `Return-Path`, Amazon SES envía notificaciones de rebotes y reclamos a la dirección especificada. Sin embargo, el mensaje que reciben los destinatarios contiene un valor diferente para el encabezado `Return-Path`.
+ Si utiliza la operación `SendEmail` de la API v2 de Amazon SES con contenido *simple* o *con plantilla*, o utiliza la operación `SendBulkEmail`, no podrá establecer un contenido personalizado en los encabezados configurados por SES. Por lo tanto, no se permiten los siguientes encabezados personalizados:
  + `BCC`, `CC`, `Content-Disposition`, `Content-Type`, `Date`, `From`, `Message-ID`, `MIME-Version`, `Reply-To`, `Return-Path`, `Subject`, `To`

# Uso de archivos adjuntos de correo electrónico en SES
<a name="attachments"></a>

Los archivos adjuntos de correo electrónico de SES son archivos que puede incluir en sus mensajes de correo electrónico cuando utilice las operaciones `SendEmail` y `SendBulkEmail` de la API v2 de SES. Esta función le permite enriquecer el contenido de su correo electrónico al incluir documentos como archivos de Word PDFs, imágenes u otros tipos de archivos que cumplen con los tipos de MIME compatibles con SES. También puede incluir imágenes en línea que se renderizan directamente en el contenido del correo electrónico sin que los destinatarios tengan que descargarlas por separado. Puedes incluir varios archivos adjuntos por correo electrónico, hasta el límite de 40 MB del tamaño total del mensaje.

**nota**  
La API v2 de SES [https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_SendEmail.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_SendEmail.html) con el tipo de contenido `Raw`, la interfaz SMTP y la API v1 de SES siguen tratando los archivos adjuntos mediante un [constructo de mensajes MIME de correo electrónico sin procesar](send-email-raw.md#send-email-raw-mime).

## Cómo funcionan los archivos adjuntos en SES
<a name="how-attachments-work"></a>

Hay dos tipos diferentes de codificación que se producen en diferentes etapas al enviar un correo electrónico con archivos adjuntos:

Etapa 1: envío de datos a SES:
+ Cuando desee enviar un archivo adjunto a SES, los datos binarios (como un PDF o una imagen) deben convertirse a un formato que pueda transmitirse de forma segura.
+ Aquí es donde entra en juego la codificación base64, necesaria porque no se pueden enviar datos binarios sin procesar en una solicitud JSON.
+ Si utilizas el AWS SDK, este gestiona esta codificación automáticamente.
+ Si utilizas el AWS CLI, tendrás que codificar tú mismo el archivo adjunto en base64 antes de enviarlo.

Etapa 2: SES crea el correo electrónico:
+ Una vez que SES reciba sus datos, tendrá que crear un correo electrónico real con el archivo adjunto.
+ Aquí es donde entra en juego la [ContentTransferEncoding](#attachment-structure)configuración.
+ SES utilizará cualquier método de codificación que especifique ContentTransferEncoding para formatear automáticamente el archivo adjunto del correo electrónico final.

Puede compararse con el envío de un paquete por correo. En primer lugar, debe llevar el paquete a la oficina de correos (fase 1: se requiere la codificación en Base64) y, a continuación, la oficina de correos lo empaquetará adecuadamente para su entrega final (fase 2:). ContentTransferEncoding

## Estructura de objetos de archivos adjuntos
<a name="attachment-structure"></a>

Cuando envía un correo electrónico con archivos adjuntos a través de SES, el servicio trata automáticamente la compleja construcción de los mensajes MIME. Solo tiene que proporcionar el contenido y los metadatos del archivo adjunto a través de la siguiente estructura de objetos [https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_Attachment.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_Attachment.html) de la API v2 de SES:
+ `FileName` (Obligatorio): nombre del archivo que se muestra a los destinatarios (debe incluir la extensión de archivo). Si no se proporciona, SES generará un `ContentType` partir de la extensión del `FileName`.
+ `ContentType` (Opcional): [identificador de tipo de medio compatible con IANA](https://www.iana.org/assignments/media-types/media-types.xhtml).
+ `ContentDisposition`(Opcional): especifica cómo se debe renderizar el archivo adjunto: `ATTACHMENT` *(predeterminado)* o `INLINE`.
+ `ContentDescription`(Opcional): descripción breve del contenido.
+ `RawContent`(Obligatorio): contenido real del archivo adjunto.
+ `ContentTransferEncoding`(Opcional): especifica cómo se codifica la carga útil del archivo adjunto cuando se ensambla en el mensaje MIME del correo electrónico: `SEVEN_BIT` *(predeterminado)*, `BASE64` o `QUOTED_PRINTABLE`.

Todo el contenido adjunto debe codificarse en base64 antes de transferirse al punto de conexión de SES para su envío. Si utilizas el cliente del AWS SDK para realizar llamadas a la API, esto se gestionará automáticamente. Si utilizas el AWS CLI cliente o lo has implementado tú mismo, tendrás que realizar la codificación tú mismo, por ejemplo:
+ Contenido de texto sin formato: `Text attachment sample content.`
+ Codificación Base64: `VGV4dCBhdHRhY2htZW50IHNhbXBsZSBjb250ZW50Lg==`

Los siguientes ejemplos muestran cómo usar la estructura de objetos adjuntos al especificar archivos adjuntos con la API v2 de SES [https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_SendEmail.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_SendEmail.html)y [https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_SendBulkEmail.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_SendBulkEmail.html)las operaciones que utilizan la AWS CLI referencia a un archivo JSON que contiene elementos de objetos adjuntos.

**Example — SendEmail con contenido sencillo**  

```
aws sesv2 send-email --cli-input-json file://request-send-email-simple.json
```
**request-send-email-simple.json**  

```
{
    "FromEmailAddress": "sender@example.com",
    "Destination": {
        "ToAddresses": [
            "recipient@example.com"
        ]
    },
    "Content": {
        "Simple": {
            "Subject": {
                "Data": "Email with attachment"
            },
            "Body": {
                "Text": {
                    "Data": "Please see attached document."
                },
                "Html": {
                    "Data": "Please see attached <b>document</b>."
                }
            },
            "Attachments": [
                {
                    "RawContent": "<base64-encoded-content>",
                    "ContentDisposition": "ATTACHMENT",
                    "FileName": "document.pdf",
                    "ContentDescription": "PDF Document Attachment",
                    "ContentTransferEncoding": "BASE64"
                }
            ]
        }
    }
}
```

**Example — SendEmail con contenido simple y archivos adjuntos en línea**  

```
aws sesv2 send-email --cli-input-json file://request-send-email-simple-inline-attachment.json
```
**request-send-email-simple-inline-attachment.json**  

```
{
    "FromEmailAddress": "sender@example.com",
    "Destination": {
        "ToAddresses": [
            "recipient@example.com"
        ]
    },
    "Content": {
        "Simple": {
            "Subject": {
                "Data": "Email with attachment"
            },
            "Body": {
                "Html": {
                    "Data": "<html><body>Our logo:<br><img src=\"cid:logo123\" alt=\"Company Logo\"></body></html>"
                }
            },
            "Attachments": [
                {
                    "RawContent": "<base64-encoded-content>",
                    "ContentDisposition": "INLINE",
                    "FileName": "logo.png",
                    "ContentId": "logo123",
                    "ContentTransferEncoding": "BASE64"
                }
            ]
        }
    }
}
```

**Example — con contenido de plantilla SendEmail**  

```
aws sesv2 send-email --cli-input-json file://request-send-email-template.json
```
**request-send-email-template.json**  

```
{
    "FromEmailAddress": "sender@example.com",
    "Destination": {
        "ToAddresses": [
            "recipient@example.com"
        ]
    },
    "Content": {
        "Template": {
            "TemplateName": "MyTemplate",
            "TemplateData": "{\"name\":\"John\"}",
            "Attachments": [
                {
                    "RawContent": "<base64-encoded-content>",
                    "ContentDisposition": "ATTACHMENT",
                    "FileName": "document.pdf",
                    "ContentDescription": "PDF Document Attachment",
                    "ContentTransferEncoding": "BASE64"
                }
            ]
        }
    }
}
```

**Example — SendBulkEmail con contenido adjunto**  

```
aws sesv2 send-bulk-email --cli-input-json file://request-send-bulk-email.json
```
**request-send-bulk-email.json**  

```
{
    "FromEmailAddress": "sender@example.com",
    "DefaultContent": {
        "Template": {
            "TemplateName": "MyTemplate",
            "TemplateData": "{}",
            "Attachments": [
                {
                    "RawContent": "<base64-encoded-content>",
                    "ContentDisposition": "ATTACHMENT",
                    "FileName": "document.pdf",
                    "ContentDescription": "PDF Document Attachment",
                    "ContentTransferEncoding": "BASE64"
                }
            ]
        }
    },
    "BulkEmailEntries": [
        {
            "Destination": {
                "ToAddresses": [
                    "recipient@example.com"
                ]
            },
            "ReplacementEmailContent": {
                "ReplacementTemplate": {
                    "ReplacementTemplateData": "{\"name\":\"John\"}"
                }
            }
        }
    ]
}
```

## Prácticas recomendadas
<a name="attachments-best-practices"></a>
+ Mantenga el tamaño total del mensaje (incluidos los archivos adjuntos) en menos de 40 MB.
+ Deje que SES detecte automáticamente los tipos de contenido en función de las extensiones de archivo siempre que sea posible.
+ Especifique explícitamente los tipos de contenido solo cuando no coincidan con los [tipos MIME comunes](https://developer.mozilla.org/en-US/docs/Web/HTTP/MIME_types/Common_types).
+ Considere la posibilidad de utilizar imágenes en línea para obtener una mejor renderización del correo electrónico.
+ SES admite una amplia gama de tipos de MIME para archivos adjuntos, excepto los que se indican en [Tipos de adjuntos no admitidos](#mime-types).

## Tipos de archivos adjuntos que no admite SES
<a name="mime-types"></a>

Puede enviar mensajes con archivos adjuntos a través de Amazon SES utilizando el estándar Multipurpose Internet Mail Extensions (MIME). Amazon SES acepta todos los tipos de archivos adjuntos *excepto* los archivos adjuntos con las extensiones de archivo de la siguiente lista.


|  |  |  |  |  | 
| --- |--- |--- |--- |--- |
| .ade .adp .app .asp .bas .bat .cer .chm .cmd .com .cpl .crt .csh .der .exe .fxp .gadget .hlp  | .hta .inf .ins .isp .its .js .jse .ksh .lib .lnk .mad .maf .mag .mam .maq .mar .mas .mat  | .mau .mav .maw .mda .mdb .mde .mdt .mdw .mdz .msc .msh .msh1 .msh2 .mshxml .msh1xml .msh2xml .msi .msp  | .mst .ops .pcd .pif .plg .prf .prg .reg .scf .scr .sct .shb .shs .sys .ps1 .ps1xml .ps2 .ps2xml  | .psc1 .psc2 .tmp .url .vb .vbe .vbs .vps .vsmacros .vss .vst .vsw .vxd .ws .wsc .wsf .wsh .xnk  | 

Algunos ISPs tienen restricciones adicionales (como las restricciones relativas a los archivos adjuntos), por lo que te recomendamos que pruebes el envío del correo electrónico a través de Major ISPs antes de enviar el correo electrónico de producción.