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.
Envío de correos electrónicos mediante programación a través de la interfaz de Amazon SES SMTP
Para enviar un correo electrónico mediante la SES SMTP interfaz de Amazon, puede utilizar un lenguaje SMTP de programación, un servidor de correo electrónico o una aplicación habilitados. Antes de comenzar, complete las tareas de Configuración de Amazon Simple Email Service. También tiene que obtener la siguiente información:
Ejemplos de código
Puede acceder a la SES SMTP interfaz de Amazon mediante un lenguaje de programación SMTP habilitado. Proporcionas el SES SMTP nombre de host y el número de puerto de Amazon junto con tus SMTP credenciales y, a continuación, utilizas las SMTP funciones genéricas del lenguaje de programación para enviar el correo electrónico.
Amazon Elastic Compute Cloud (AmazonEC2) restringe el tráfico de correo electrónico a través del puerto 25 de forma predeterminada. Para evitar tiempos de espera al enviar correos electrónicos a través del SMTP punto de conexión desde AmazonEC2, puedes solicitar que se eliminen estas restricciones. Para obtener más información, consulta ¿Cómo elimino la restricción en el puerto 25 de mi EC2 instancia o AWS Lambda
función de Amazon? en el Centro de AWS conocimiento.
Los ejemplos de código de esta sección son para Java y PHP utilizan el puerto 587 para evitar este problema.
En este tutorial, debe enviarse un correo electrónico a usted mismo para poder verificar si lo recibe. Para seguir experimentando o realizando pruebas de carga, usa el simulador de SES buzones de Amazon. 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.
Seleccione un lenguaje de programación para ver el ejemplo para dicho idioma:
Amazon SES no recomienda el uso de credenciales estáticas. Consulte AWS Secrets Managerpara obtener información sobre cómo mejorar su postura de seguridad eliminando las credenciales codificadas de su código fuente. Este tutorial solo se proporciona con el fin de probar la SES SMTP interfaz de Amazon en un entorno que no sea de producción.
- Java
-
En este ejemplo, se utiliza el Eclipse IDE y el JavaMail APIpara enviar correos electrónicos a través de Amazon SES mediante la SMTP interfaz.
Antes de realizar el procedimiento siguiente, complete las tareas descritas en Configuración de Amazon Simple Email Service.
Para enviar un correo electrónico mediante la SES SMTP interfaz de Amazon con Java
-
En un navegador web, vaya a la JavaMail GitHub página. En Activos, selecciona javax.mail.jar para descargar la versión más reciente de. JavaMail
Este tutorial requiere JavaMail la versión 1.5 o posterior. Estos procedimientos se probaron con la JavaMail versión 1.6.1.
-
En un navegador web, vaya a la GitHub página de activación de Yakarta y, en Activation Framework 1.2.1 Final Release, descargue JavaBeans jakarta.activation.jar
-
Cree un proyecto en Eclipse realizando los pasos siguientes:
-
Inicie Eclipse.
-
En Eclipse, elija File, elija New y, a continuación, elija Java Project.
-
En el cuadro de diálogo Create a Java Project, escriba un nombre de proyecto y, a continuación, elija Next.
-
En el cuadro de diálogo Java Settings, elija la pestaña Libraries.
-
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
-
Selecciona JARs Añadir externo.
-
Navegue hasta la carpeta en la que realizó la descarga JavaMail. Elija el archivo javax.mail.jar
y, a continuación, elija Open.
-
En el cuadro de diálogo Java Settings, elija Finish.
-
En Eclipse, en la ventana Package Explorer, amplíe su proyecto.
-
En su proyecto, haga clic con el botón derecho en el directorio src, elija New y, a continuación, elija Class.
-
En el cuadro de diálogo New Java Class, en el campo Name, escriba AmazonSESSample
y, a continuación, elija Finish.
-
Sustituya todo el contenido de A mazonSESSample .java por el siguiente código:
import java.util.Properties;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
public class AmazonSESSample {
// Replace sender@example.com with your "From" address.
// This address must be verified.
static final String FROM = "sender@example.com";
static final String FROMNAME = "Sender Name";
// Replace recipient@example.com with a "To" address. If your account
// is still in the sandbox, this address must be verified.
static final String TO = "recipient@example.com";
// Replace smtp_username with your Amazon SES SMTP user name.
static final String SMTP_USERNAME = "smtp_username";
// The name of the Configuration Set to use for this message.
// If you comment out or remove this variable, you will also need to
// comment out or remove the header below.
static final String CONFIGSET = "ConfigSet";
// Amazon SES SMTP host name. This example uses the US West (Oregon) region.
// See https://docs.aws.amazon.com/ses/latest/DeveloperGuide/regions.html#region-endpoints
// for more information.
static final String HOST = "email-smtp.us-west-2.amazonaws.com";
// The port you will connect to on the Amazon SES SMTP endpoint.
static final int PORT = 587;
static final String SUBJECT = "Amazon SES test (SMTP interface accessed using Java)";
static final String BODY = String.join(
System.getProperty("line.separator"),
"<h1>Amazon SES SMTP Email Test</h1>",
"<p>This email was sent with Amazon SES using the ",
"<a href='https://github.com/javaee/javamail'>Javamail Package</a>",
" for <a href='https://www.java.com'>Java</a>."
);
public static void main(String[] args) throws Exception {
// Create a Properties object to contain connection configuration information.
Properties props = System.getProperties();
props.put("mail.transport.protocol", "smtp");
props.put("mail.smtp.port", PORT);
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.auth", "true");
// Create a Session object to represent a mail session with the specified properties.
Session session = Session.getDefaultInstance(props);
// Create a message with the specified information.
MimeMessage msg = new MimeMessage(session);
msg.setFrom(new InternetAddress(FROM,FROMNAME));
msg.setRecipient(Message.RecipientType.TO, new InternetAddress(TO));
msg.setSubject(SUBJECT);
msg.setContent(BODY,"text/html");
// Add a configuration set header. Comment or delete the
// next line if you are not using a configuration set
msg.setHeader("X-SES-CONFIGURATION-SET", CONFIGSET);
// Create a transport.
Transport transport = session.getTransport();
// Get the password
String SMTP_PASSWORD = fetchSMTPPasswordFromSecureStorage();
// Send the message.
try
{
System.out.println("Sending...");
// Connect to Amazon SES using the SMTP username and password you specified above.
transport.connect(HOST, SMTP_USERNAME, SMTP_PASSWORD);
// Send the email.
transport.sendMessage(msg, msg.getAllRecipients());
System.out.println("Email sent!");
}
catch (Exception ex) {
System.out.println("The email was not sent.");
System.out.println("Error message: " + ex.getMessage());
}
finally
{
// Close and terminate the connection.
transport.close();
}
}
static String fetchSMTPPasswordFromSecureStorage() {
/* IMPLEMENT THIS METHOD */
// For example, you might fetch it from a secure location or AWS Secrets Manager: https://aws.amazon.com/secrets-manager/
}
}
-
En A mazonSESSample .java, sustituya las siguientes direcciones de correo electrónico por sus propios valores:
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.
-
En A mazonSESSample .java, sustituya lo siguiente por sus propios valores:
-
smtp_username
— Sustitúyala por la credencial SMTP de tu nombre de usuario. Tenga en cuenta que la credencial de su nombre de SMTP usuario es una cadena de 20 caracteres de letras y números, no un nombre inteligible.
-
smtp_password
— Impleméntela `fetchSMTPPasswordFromSecureStorage`
para obtener la contraseña.
-
(Opcional) Si quieres usar un SES SMTP punto de conexión de Amazon en un lugar que no Región de AWS sea email-smtp.us-west-2.amazonaws.com
, cambie el valor de la variable HOST
por el punto final que desee usar. Para ver una lista de las regiones en las SES que Amazon está disponible, consulta Amazon Simple Email Service (AmazonSES) en el Referencia general de AWS.
-
(Opcional) Si desea utilizar un conjunto de configuraciones al enviar este correo electrónico, cambie el valor de la variable ConfigSet
al 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.
-
Guarde un archivo mazonSESSample .java.
-
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).
-
Para iniciar el programa y enviar el correo electrónico, elija Run y, a continuación, vuelva a elegir Run.
-
Revise la salida. Si el correo electrónico se envió correctamente, la consola mostrará el mensaje «¡Correo electrónico enviado!» De lo contrario, muestra un mensaje de error.
-
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 SMTP interfaz.
Antes de realizar el procedimiento siguiente, debe completar las tareas descritas en Configuración de Amazon Simple Email Service. Además de configurar Amazon, SES debes cumplir los siguientes requisitos previos para enviar correos electrónicos conPHP:
Requisitos previos:
-
Instalación PHP: PHP está disponible en http://php.net/downloads.php. Tras la instalaciónPHP, añada la ruta a PHP las variables de entorno para que pueda ejecutarla PHP desde cualquier línea de comandos.
-
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 en https://getcomposer.org/download.
-
Instalar la PHPMailer clase: después de instalar Composer, ejecute el siguiente comando para instalarlaPHPMailer:
path/to/
composer require phpmailer/phpmailer
En el comando anterior, sustituya path/to/
por la ruta en la que instaló Composer.
Para enviar un correo electrónico mediante la SES SMTP interfaz de Amazon con PHP
-
Crea un archivo llamado amazon-ses-smtp-sample.php. Abra el archivo con un editor de texto y pegue el código siguiente:
<?php
// Import PHPMailer classes into the global namespace
// These must be at the top of your script, not inside a function
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
// If necessary, modify the path in the require statement below to refer to the
// location of your Composer autoload.php file.
require 'vendor/autoload.php';
// Replace sender@example.com with your "From" address.
// This address must be verified with Amazon SES.
$sender = 'sender@example.com';
$senderName = 'Sender Name';
// Replace recipient@example.com with a "To" address. If your account
// is still in the sandbox, this address must be verified.
$recipient = 'recipient@example.com';
// Replace smtp_username with your Amazon SES SMTP user name.
$usernameSmtp = 'smtp_username';
// Specify a configuration set. If you do not want to use a configuration
// set, comment or remove the next line.
$configurationSet = 'ConfigSet';
// If you're using Amazon SES in a region other than US West (Oregon),
// replace email-smtp.us-west-2.amazonaws.com with the Amazon SES SMTP
// endpoint in the appropriate region.
$host = 'email-smtp.us-west-2.amazonaws.com';
$port = 587;
// The subject line of the email
$subject = 'Amazon SES test (SMTP interface accessed using PHP)';
// The plain-text body of the email
$bodyText = "Email Test\r\nThis email was sent through the
Amazon SES SMTP interface using the PHPMailer class.";
// The HTML-formatted body of the email
$bodyHtml = '<h1>Email Test</h1>
<p>This email was sent through the
<a href="https://aws.amazon.com/ses">Amazon SES</a> SMTP
interface using the <a href="https://github.com/PHPMailer/PHPMailer">
PHPMailer</a> class.</p>';
$mail = new PHPMailer(true);
try {
// Specify the SMTP settings.
$mail->isSMTP();
$mail->setFrom($sender, $senderName);
$mail->Username = $usernameSmtp;
$mail->Password = fetchSMTPPasswordFromSecureStorage();
$mail->Host = $host;
$mail->Port = $port;
$mail->SMTPAuth = true;
$mail->SMTPSecure = 'tls';
$mail->addCustomHeader('X-SES-CONFIGURATION-SET', $configurationSet);
// Specify the message recipients.
$mail->addAddress($recipient);
// You can also add CC, BCC, and additional To recipients here.
// Specify the content of the message.
$mail->isHTML(true);
$mail->Subject = $subject;
$mail->Body = $bodyHtml;
$mail->AltBody = $bodyText;
$mail->Send();
echo "Email sent!" , PHP_EOL;
} catch (phpmailerException $e) {
echo "An error occurred. {$e->errorMessage()}", PHP_EOL; //Catch errors from PHPMailer.
} catch (Exception $e) {
echo "Email not sent. {$mail->ErrorInfo}", PHP_EOL; //Catch errors from Amazon SES.
}
function fetchSMTPPasswordFromSecureStorage() {
/* IMPLEMENT THIS METHOD */
// For example, you might fetch it from a secure location or AWS Secrets Manager: https://aws.amazon.com/secrets-manager/
}
?>
-
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 AmazonSES. Para obtener más información, consulte Identidades verificadas. Las direcciones de correo electrónico de Amazon SES distinguen mayúsculas de minúsculas. Asegúrese de que la dirección que introduce sea exactamente la misma que la que haya verificado.
-
recipient@example.com
— Sustitúyalas 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 Solicitar acceso a la producción (salir del entorno de pruebas de SES Amazon). Asegúrese de que la dirección que introduce sea exactamente la misma que la que haya verificado.
-
smtp_username
— Sustitúyala por la credencial de tu nombre de SMTP usuario, que obtuviste en la página de SMTPconfiguración de la SES consola de Amazon. Esto no es lo mismo que el ID de clave de acceso de AWS . Tenga en cuenta que la credencial de su nombre de SMTP usuario es una cadena de 20 caracteres de letras y números, no un nombre inteligible.
-
smtp_password
— 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.
-
(Opcional) email-smtp.us-west-2.amazonaws.com
— Si quieres usar un SES SMTP punto de conexión de Amazon en una región que no sea el oeste de EE. UU. (Oregón), sustitúyelo por el SES SMTP punto de enlace de Amazon de la región que quieras usar. Para obtener una lista de SMTP los puntos de conexión URLs Regiones de AWS en los que Amazon SES está disponible, consulte Amazon Simple Email Service (AmazonSES) en el Referencia general de AWS.
-
Guarde amazon-ses-smtp-sample.php.
-
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
-
Revise la salida. Si el correo electrónico se envió correctamente, la consola mostrará el mensaje «¡Correo electrónico enviado!» De lo contrario, muestra un mensaje de error.
-
Inicie sesión en el cliente de correo electrónico de la dirección del destinatario. Ahí podrá ver el mensaje que ha enviado.