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 correo electrónico mediante programación con la interfaz de SMTP de Amazon SES
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. También tiene que obtener la siguiente información:
Ejemplos de código
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.
Amazon Elastic Compute Cloud (Amazon EC2) 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 punto de enlace SMTP desde Amazon EC2, 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.
En los ejemplos de código de esta sección para Java y PHP se utiliza 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 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.
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 Manager 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 y la JavaMail API 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.
Para enviar un correo electrónico a través de la interfaz de SMTP de Amazon SES 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 Amazon SESSample .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 Amazon SESSample .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 Amazon SESSample .java, sustituya lo siguiente por sus propios valores:
-
smtp_username
— 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_password
— Implementar `fetchSMTPPasswordFromSecureStorage`
para obtener la contraseña.
-
(Opcional) Si desea utilizar un punto de enlace SMTP de Amazon SES en Región de AWS otro lugar que no seaemail-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) en la Referencia general de AWS.
-
(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.
-
Guarde Amazon SESSample .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 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.
-
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. 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. 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.
-
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
-
Cree un archivo denominado 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 Amazon SES. Para obtener más información, consulte Identidades verificadas. 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). 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 nombre de usuario de SMTP, que obtuvo en la página de configuración de SMTP 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_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 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) 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 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.
-
Inicie sesión en el cliente de correo electrónico de la dirección del destinatario. Ahí podrá ver el mensaje que ha enviado.