Envio de e-mails de forma programática por meio da interface da Amazon SES SMTP - 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 forma programática por meio da interface da Amazon SES SMTP

Para enviar um e-mail usando a SES SMTP interface da Amazon, você pode usar uma linguagem SMTP de programação, servidor de e-mail ou aplicativo habilitado. 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 SES SMTP interface da Amazon usando uma linguagem de programação SMTP habilitada. Você fornece o SES SMTP nome do host e o número da porta da Amazon junto com suas SMTP credenciais e, em seguida, usa as SMTP funções genéricas da linguagem de programação para enviar o e-mail.

O Amazon Elastic Compute Cloud (AmazonEC2) restringe o tráfego de e-mail pela porta 25 por padrão. Para evitar tempos limite ao enviar e-mails pelo SMTP endpoint da AmazonEC2, 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.

Veja os exemplos de código nesta seção para Java e PHP use 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 mais experiências ou testes de carga, use o simulador de SES caixa de correio da Amazon. 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

A 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 SES SMTP interface da Amazon em um ambiente que não seja de produção.

Java

Este exemplo usa o Eclipse IDE e o JavaMail APIpara enviar e-mails pela Amazon SES usando a SMTP interface.

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 SES SMTP interface da Amazon 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 de A mazonSESSample .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. Em A mazonSESSample .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 A mazonSESSample .java, substitua o seguinte pelos seus próprios valores:

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

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

  10. (Opcional) Se você quiser usar um SES SMTP endpoint da Amazon em um local Região da AWS diferente 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 em que a Amazon SES está disponível, consulte Amazon Simple Email Service (AmazonSES) no 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 ao nome do conjunto de configurações. Para obter mais informações sobre os conjuntos de configurações, consulte Usando conjuntos de configurações na Amazon SES.

  12. Salve um mazonSESSample .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 PHPMailer classe para enviar e-mails pela Amazon SES usando a SMTP interface.

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 a Amazon, SES você deve preencher os seguintes pré-requisitos para enviar e-mails com: PHP

Pré-requisitos:
  • Instalação PHP — PHP está disponível em http://php.net/downloads.php. Depois de instalarPHP, adicione o caminho às suas variáveis PHP de ambiente para que você possa executar a PHP 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 instalarPHPMailer:

    path/to/composer require phpmailer/phpmailer

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

Para enviar um e-mail usando a SES SMTP interface da Amazon 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 a AmazonSES. Para obter mais informações, consulte Identidades. Os endereços de e-mail na 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 (saindo do SES sandbox da Amazon). Certifique-se de que o endereço informado seja exatamente o mesmo que você verificou.

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

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

    • (Optional) 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 Usando conjuntos de configurações na Amazon SES.

    • (Optional) email-smtp.us-west-2.amazonaws.com — Se você quiser usar um SES SMTP endpoint da Amazon em uma região diferente do Oeste dos EUA (Oregon), substitua-o pelo SES SMTP endpoint da Amazon na região que você deseja usar. Para obter uma lista de SMTP endpoints URLs em Regiões da AWS que a Amazon SES está disponível, consulte Amazon Simple Email Service (AmazonSES) 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.