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 tempos limite ao enviar e-mails pelo endpoint SMTP da 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 EC2 instância ou AWS Lambda função da Amazon? 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 obter 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 Manager para saber como melhorar seu procedimento de segurança ao remover credenciais com codificação rígida do código-fonte. Este tutorial é fornecido apenas 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 externo. JARs

    6. Escolha Adicionar externo 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 Amazon SESSample .java pelo seguinte 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/ } }
  8. No Amazon SESSample .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.

    • sender@example.com— Substitua pelo seu endereço de e-mail “De”. Você deve verificar esse endereço antes de executar esse programa. Para obter mais informações, consulte Identidades verificadas no Amazon SES.

    • recipient@example.com— Substitua pelo seu endereço de e-mail “Para”. Se sua conta ainda estiver na sandbox, você precisará verificar esse endereço antes de usá-lo. Para obter mais informações, consulte Solicitar acesso à produção (sair da sandbox do Amazon SES).

  9. Na Amazon SESSample .java, substitua o seguinte pelos seus próprios valores:

    • smtp_username— Substitua por 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 outroemail-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 ConfigSet 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.

  12. Salve Amazon SESSample .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 tiver sido 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 PHPMailer classe para enviar e-mails 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:
  • Instalar 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 PHPMailer classe e suas dependências. Para instalar o Composer, siga as instruções de instalação em https://getcomposer.org/download.

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

    path/to/composer require phpmailer/phpmailer

    No comando anterior, path/to/ substitua pelo caminho em que 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 obter 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 obter mais informações, consulte Solicitar acesso à produção (sair da sandbox do Amazon SES). Certifique-se de que o endereço informado seja exatamente o mesmo que você verificou.

    • smtp_username— Substitua por sua credencial de nome de usuário SMTP, que você obteve 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 endpoints URLs SMTP em Regiões da AWS que o Amazon 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 tiver sido 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.