Envio de e-mails de modo programático pela interface SMTP do Amazon SES - Amazon Simple Email Service

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Envio de e-mails de modo programático pela interface SMTP do Amazon SES

Para enviar um e-mail usando a interface SMTP do Amazon SES, você pode usar uma linguagem de programação, um servidor de e-mail ou uma aplicação habilitada para SMTP. Antes de começar, realize as tarefas em Configuração do Amazon Simple Email Service. Você também precisa obter as seguintes informações:

Exemplos de código

Você pode acessar a interface SMTP do Amazon SES usando uma linguagem de programação habilitada para SMTP. Você fornece o nome do host e o número da porta SMTP do Amazon SES junto com suas credenciais SMTP e, em seguida, use as funções SMTP genéricas da linguagem de programação para enviar o e-mail.

O Amazon Elastic Compute Cloud (Amazon EC2) restringe o tráfego de e-mail pela porta 25 por padrão. Para evitar erros de tempo limite ao enviar e-mails pelo endpoint SMTP do Amazon EC2, você pode solicitar que essas restrições sejam removidas. Para obter mais informações, consulte Como faço para remover a restrição na porta 25 da minha instância AWS Lambda ou função do Amazon EC2? no Centro de AWS Conhecimento.

Os exemplos de código nesta seção para Java e PHP usam a porta 587 para evitar esse problema.

nota

Neste tutorial, você enviará um e-mail a si mesmo, para poder conferir se o recebe. Para fazer mais experimentos ou testes de carga, use o simulador de caixa postal do Amazon SES. Os e-mails enviados ao simulador de caixa postal não contam para sua cota de envio nem para suas taxas de devoluções e reclamações. Para ter mais informações, consulte Uso do simulador de caixa postal manualmente..

Selecione uma linguagem de programação para visualizar o exemplo dessa linguagem:

Atenção

O Amazon SES não recomenda o uso de credenciais estáticas. Consulte AWS Secrets Managerpara saber como melhorar sua postura de segurança removendo credenciais codificadas do seu código-fonte. Este tutorial é fornecido somente com a finalidade de testar a interface SMTP do Amazon SES em um ambiente que não seja de produção.

Java

Este exemplo usa o Eclipse IDE e a JavaMail API para enviar e-mails pelo Amazon SES usando a interface SMTP.

Antes de realizar o procedimento a seguir, conclua as tarefas de configuração descritas em Configuração do Amazon Simple Email Service.

Para enviar um e-mail usando a interface SMTP do Amazon SES com Java
  1. Em um navegador da Web, acesse a JavaMail GitHub página. Em Assets, escolha javax.mail.jar para baixar a versão mais recente do. JavaMail

    Importante

    Este tutorial requer a JavaMail versão 1.5 ou posterior. Esses procedimentos foram testados usando a JavaMail versão 1.6.1.

  2. Em um navegador da web, acesse a GitHub página de ativação de Jacarta e, em Versão final do JavaBeans Activation Framework 1.2.1, baixe o jakarta.activation.jar

  3. Crie um projeto no Eclipse realizando as seguintes etapas:

    1. Inicie o Eclipse.

    2. No Eclipse, escolha File, New e Java Project.

    3. Na caixa de diálogo Create a Java Project, digite o nome do projeto e escolha Next.

    4. Na caixa de diálogo Java Settings, escolha a guia Libraries.

    5. Selecione Classpath e adicione os dois arquivos jar externos javax.mail.jar e jakarta.activation.jar usando o botão Adicionar JARs externos.

    6. Escolha Add External JARs.

    7. Navegue até a pasta na qual você baixou JavaMail. Escolha o arquivo javax.mail.jar e Open.

    8. Na caixa de diálogo Java Settings, escolha Finish.

  4. No Eclipse, na janela Package Explorer, expanda seu projeto.

  5. No seu projeto, clique com o botão direito do mouse no diretório src, escolha New e Class.

  6. Na caixa de diálogo New Java Class, no campo Name, digite AmazonSESSample e escolha Finish.

  7. Substitua todo o conteúdo do AmazonSESSample.java pelo código a seguir:

    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/ } }
  8. Em AmazonSESSample.java, substitua os seguintes endereços de e-mail pelos seus próprios valores:

    Importante

    Os endereços de e-mail diferenciam maiúsculas de minúsculas. Certifique-se de que os endereços sejam exatamente os mesmos que você verificou.

  9. Em AmazonSESSample.java, substitua o seguinte pelos seus próprios valores:

    • smtp_username — Substitua pela sua credencial de nome de usuário SMTP. Observe que sua credencial de nome de usuário SMTP é uma string de 20 caracteres de letras e números, e não um nome inteligível.

    • smtp_password — Implemente `fetchSMTPPasswordFromSecureStorage` para obter a senha.

  10. (Opcional) Se você quiser usar um endpoint SMTP do Amazon SES em Região da AWS outro local que não seja email-smtp.us-west-2.amazonaws.com, altere o valor da variável HOST para o endpoint que você deseja usar. Para obter uma lista das regiões onde o Amazon SES está disponível, consulte Amazon Simple Email Service (Amazon SES) na Referência geral da AWS.

  11. (Opcional) Se você quiser usar um conjunto de configurações ao enviar esse e-mail, altere o valor da variável ConfigSetpara o nome do conjunto de configurações. Para obter mais informações sobre os conjuntos de configurações, consulte Uso de conjuntos de configurações no Amazon SES.

  12. Salve AmazonSESSample.java.

  13. Para criar o projeto, escolha Project e, em seguida, escolha Build Project. (Se essa opção estiver desativada, você pode ter a criação automática ativada.)

  14. Para iniciar o programa e enviar o e-mail, escolha Run e Run novamente.

  15. Revise a saída. Se o e-mail foi enviado com sucesso, o console exibirá “E-mail enviado!” Caso contrário, ele exibirá uma mensagem de erro.

  16. Entre no cliente de e-mail do endereço de destinatário. Você verá a mensagem que enviou.

PHP

Este exemplo usa a classe PHPMailer para enviar e-mail pelo Amazon SES usando a interface SMTP.

Antes de realizar o procedimento a seguir, você deve concluir as tarefas de configuração descritas em Configuração do Amazon Simple Email Service. Além de configurar o Amazon SES, você deve preencher os seguintes pré-requisitos para enviar e-mail com PHP:

Pré-requisitos:
  • Instale o PHP — O PHP está disponível em http://php.net/downloads.php. Depois de instalar o PHP, adicione o caminho para o PHP nas suas variáveis de ambiente, de forma que possa executar o PHP a partir de qualquer prompt de comando.

  • Instale o gerenciador de dependências do Composer — Depois de instalar o gerenciador de dependências do Composer, você pode baixar e instalar a classe PHPMailer e suas dependências. Para instalar o Composer, siga as instruções de instalação em https://getcomposer.org/download.

  • Instale a classe PHPMailer — Depois de instalar o Composer, execute o seguinte comando para instalar o PHPMailer:

    path/to/composer require phpmailer/phpmailer

    No comando anterior, substitua path/to/ pelo caminho onde você instalou o Composer.

Para enviar um e-mail usando a interface SMTP do Amazon SES com PHP
  1. Crie um arquivo chamado amazon-ses-smtp-sample.php. Abra o arquivo com um editor de texto e cole o seguinte código:

    <?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/ } ?>
  2. Em amazon-ses-smtp-sample.php, substitua o seguinte pelos seus próprios valores:

    • sender@example.com — Substitua por um endereço de e-mail que você tenha verificado com o Amazon SES. Para ter mais informações, consulte Identidades. Os endereços de e-mail no Amazon SES diferenciam maiúsculas de minúsculas. Certifique-se de que o endereço informado seja exatamente o mesmo que você verificou.

    • recipient@example.com — Substitua pelo endereço do destinatário. Se sua conta ainda estiver na sandbox, você precisará verificar esse endereço antes de usá-lo. Para ter mais informações, consulte Solicitar acesso à produção (saindo do sandbox do Amazon SES). Certifique-se de que o endereço informado seja exatamente o mesmo que você verificou.

    • smtp_username — Substitua pela sua credencial de nome de usuário SMTP, obtida na página de configurações SMTP do console do Amazon SES. Essa não é igual ao ID de chave de acesso da AWS . Observe que sua credencial de nome de usuário SMTP é uma string de 20 caracteres de letras e números, e não um nome inteligível.

    • smtp_password — Implemente `fetchSMTPPasswordFromSecureStorage` para obter a senha.

    • (Opcional) ConfigSet— Se você quiser usar um conjunto de configurações ao enviar esse e-mail, substitua esse valor pelo nome do conjunto de configurações. Para obter mais informações sobre os conjuntos de configurações, consulte Uso de conjuntos de configurações no Amazon SES.

    • (Opcional) email-smtp.us-west-2.amazonaws.com — Se você quiser usar um endpoint SMTP do Amazon SES em uma região diferente do Oeste dos EUA (Oregon), substitua-o pelo endpoint SMTP do Amazon SES na região que você deseja usar. Para obter uma lista de URLs de endpoints SMTP para onde o Amazon Regiões da AWS SES está disponível, consulte Amazon Simple Email Service (Amazon SES) no. Referência geral da AWS

  3. Salve amazon-ses-smtp-sample.php.

  4. Para executar o programa, abra um prompt de comando no mesmo diretório amazon-ses-smtp-samplede.php e digitephp amazon-ses-smtp-sample.php.

  5. Revise a saída. Se o e-mail foi enviado com sucesso, o console exibirá “E-mail enviado!” Caso contrário, ele exibirá uma mensagem de erro.

  6. Entre no cliente de e-mail do endereço de destinatário. Você verá a mensagem que enviou.