

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
<a name="send-using-smtp-programmatically"></a>

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](setting-up.md). Você também precisa obter as seguintes informações: 
+ Suas credenciais SMTP do Amazon SES, que permitem a conexão com o endpoint SMTP do Amazon SES. Para obter suas credenciais SMTP do Amazon SES, consulte [Obtenção de credenciais SMTP do Amazon SES](smtp-credentials.md). 
**Importante**  
Suas credenciais SMTP são diferentes das suas AWS credenciais. Para obter mais informações sobre credenciais, consulte [Tipos de credenciais do Amazon SES](send-email-concepts-credentials.md).
+ O endereço do endpoint SMTP. Para obter uma lista de endpoints SMTP do Amazon SES, consulte [Conexão com um endpoint SMTP do Amazon SES](smtp-connect.md).
+ O número da porta da interface SMTP do Amazon SES, que depende do método de conexão. Para obter mais informações, consulte [Conexão com um endpoint SMTP do Amazon SES](smtp-connect.md).

## Exemplos de código
<a name="send-email-smtp-code-examples"></a>

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](https://aws.amazon.com/premiumsupport/knowledge-center/ec2-port-25-throttle/)? 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.](send-an-email-from-console.md#send-email-simulator).

**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](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html) 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](http://www.eclipse.org/) e a [JavaMail API](https://github.com/javaee/javamail/releases) 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](setting-up.md).

**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](https://github.com/javaee/javamail/releases). 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.

1. **Em um navegador da web, acesse a [ GitHub página de ativação de Jacarta](https://github.com/eclipse-ee4j/jaf/releases) e, em [Versão final do JavaBeans Activation Framework 1.2.1](https://github.com/eclipse-ee4j/jaf/releases/tag/1.2.1), baixe o jakarta.activation.jar**

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

   1. Inicie o Eclipse.

   1. No Eclipse, escolha **File**, **New** e **Java Project**.

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

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

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

   1. Escolha **Adicionar externo JARs**.

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

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

1. No Eclipse, na janela **Package Explorer**, expanda seu projeto.

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

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

1. Substitua todo o conteúdo do **Amazon SESSample .java** pelo seguinte código:

   ```
     1. import java.util.Properties;
     2. 
     3. import javax.mail.Message;
     4. import javax.mail.Session;
     5. import javax.mail.Transport;
     6. import javax.mail.internet.InternetAddress;
     7. import javax.mail.internet.MimeMessage;
     8. 
     9. public class AmazonSESSample {
    10. 
    11.     // Replace sender@example.com with your "From" address.
    12.     // This address must be verified.
    13.     static final String FROM = "sender@example.com";
    14.     static final String FROMNAME = "Sender Name";
    15.     
    16.     // Replace recipient@example.com with a "To" address. If your account 
    17.     // is still in the sandbox, this address must be verified.
    18.     static final String TO = "recipient@example.com";
    19.     
    20.     // Replace smtp_username with your Amazon SES SMTP user name.
    21.     static final String SMTP_USERNAME = "smtp_username";
    22.       
    23.     // The name of the Configuration Set to use for this message.
    24.     // If you comment out or remove this variable, you will also need to
    25.     // comment out or remove the header below.
    26.     static final String CONFIGSET = "ConfigSet";
    27.     
    28.     // Amazon SES SMTP host name. This example uses the US West (Oregon) region.
    29.     // See https://docs.aws.amazon.com/ses/latest/DeveloperGuide/regions.html#region-endpoints
    30.     // for more information.
    31.     static final String HOST = "email-smtp.us-west-2.amazonaws.com";
    32.     
    33.     // The port you will connect to on the Amazon SES SMTP endpoint. 
    34.     static final int PORT = 587;
    35.     
    36.     static final String SUBJECT = "Amazon SES test (SMTP interface accessed using Java)";
    37.     
    38.     static final String BODY = String.join(
    39.             System.getProperty("line.separator"),
    40.             "<h1>Amazon SES SMTP Email Test</h1>",
    41.             "<p>This email was sent with Amazon SES using the ", 
    42.             "<a href='https://github.com/javaee/javamail'>Javamail Package</a>",
    43.             " for <a href='https://www.java.com'>Java</a>."
    44.         );
    45. 
    46.     public static void main(String[] args) throws Exception {
    47. 
    48.         // Create a Properties object to contain connection configuration information.
    49.         Properties props = System.getProperties();
    50.         props.put("mail.transport.protocol", "smtp");
    51.         props.put("mail.smtp.port", PORT); 
    52.         props.put("mail.smtp.starttls.enable", "true");
    53.         props.put("mail.smtp.auth", "true");
    54. 
    55.         // Create a Session object to represent a mail session with the specified properties. 
    56.         Session session = Session.getDefaultInstance(props);
    57. 
    58.         // Create a message with the specified information. 
    59.         MimeMessage msg = new MimeMessage(session);
    60.         msg.setFrom(new InternetAddress(FROM,FROMNAME));
    61.         msg.setRecipient(Message.RecipientType.TO, new InternetAddress(TO));
    62.         msg.setSubject(SUBJECT);
    63.         msg.setContent(BODY,"text/html");
    64.         
    65.         // Add a configuration set header. Comment or delete the 
    66.         // next line if you are not using a configuration set
    67.         msg.setHeader("X-SES-CONFIGURATION-SET", CONFIGSET);
    68.             
    69.         // Create a transport.
    70.         Transport transport = session.getTransport();
    71. 
    72.         // Get the password 
    73.         String SMTP_PASSWORD = fetchSMTPPasswordFromSecureStorage();
    74.                     
    75.         // Send the message.
    76.         try
    77.         {
    78.             System.out.println("Sending...");
    79.             
    80.             // Connect to Amazon SES using the SMTP username and password you specified above.
    81.             transport.connect(HOST, SMTP_USERNAME, SMTP_PASSWORD);
    82.             
    83.             // Send the email.
    84.             transport.sendMessage(msg, msg.getAllRecipients());
    85.             System.out.println("Email sent!");
    86.         }
    87.         catch (Exception ex) {
    88.             System.out.println("The email was not sent.");
    89.             System.out.println("Error message: " + ex.getMessage());
    90.         }
    91.         finally
    92.         {
    93.             // Close and terminate the connection.
    94.             transport.close();
    95.         }
    96.     }
    97. 
    98.     static String fetchSMTPPasswordFromSecureStorage() {
    99.         /* IMPLEMENT THIS METHOD */
   100.         // For example, you might fetch it from a secure location or AWS Secrets Manager: https://aws.amazon.com/secrets-manager/
   101.     }
   102. }
   ```

1. 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](verify-addresses-and-domains.md).
   + *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)](request-production-access.md).

1. Na **Amazon SESSample .java**, substitua o seguinte pelos seus próprios valores:
   + *smtp\$1username*— 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\$1password*— Implemente ``fetchSMTPPasswordFromSecureStorage`` para obter a senha.

1. (Opcional) Se você quiser usar um endpoint SMTP do Amazon SES em Região da AWS outro*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)](https://docs.aws.amazon.com/general/latest/gr/rande.html#ses_region) na *Referência geral da AWS*.

1. (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](using-configuration-sets.md).

1. Salve **Amazon SESSample .java.**

1. 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.)

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

1. Revise a saída. Se o e-mail tiver sido enviado com sucesso, o console exibirá *"E-mail enviado\$1"* Caso contrário, ele exibirá uma mensagem de erro.

1. 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](setting-up.md). 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](https://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](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:

   ```
    1. <?php
    2. 
    3. // Import PHPMailer classes into the global namespace
    4. // These must be at the top of your script, not inside a function
    5. use PHPMailer\PHPMailer\PHPMailer;
    6. use PHPMailer\PHPMailer\Exception;
    7. 
    8. // If necessary, modify the path in the require statement below to refer to the
    9. // location of your Composer autoload.php file.
   10. require 'vendor/autoload.php';
   11. 
   12. // Replace sender@example.com with your "From" address.
   13. // This address must be verified with Amazon SES.
   14. $sender = 'sender@example.com';
   15. $senderName = 'Sender Name';
   16. 
   17. // Replace recipient@example.com with a "To" address. If your account
   18. // is still in the sandbox, this address must be verified.
   19. $recipient = 'recipient@example.com';
   20. 
   21. // Replace smtp_username with your Amazon SES SMTP user name.
   22. $usernameSmtp = 'smtp_username';
   23. 
   24. // Specify a configuration set. If you do not want to use a configuration
   25. // set, comment or remove the next line.
   26. $configurationSet = 'ConfigSet';
   27. 
   28. // If you're using Amazon SES in a region other than US West (Oregon),
   29. // replace email-smtp.us-west-2.amazonaws.com with the Amazon SES SMTP
   30. // endpoint in the appropriate region.
   31. $host = 'email-smtp.us-west-2.amazonaws.com';
   32. $port = 587;
   33. 
   34. // The subject line of the email
   35. $subject = 'Amazon SES test (SMTP interface accessed using PHP)';
   36. 
   37. // The plain-text body of the email
   38. $bodyText =  "Email Test\r\nThis email was sent through the
   39.     Amazon SES SMTP interface using the PHPMailer class.";
   40. 
   41. // The HTML-formatted body of the email
   42. $bodyHtml = '<h1>Email Test</h1>
   43.     <p>This email was sent through the
   44.     <a href="https://aws.amazon.com/ses">Amazon SES</a> SMTP
   45.     interface using the <a href="https://github.com/PHPMailer/PHPMailer">
   46.     PHPMailer</a> class.</p>';
   47. 
   48. $mail = new PHPMailer(true);
   49. 
   50. try {
   51.     // Specify the SMTP settings.
   52.     $mail->isSMTP();
   53.     $mail->setFrom($sender, $senderName);
   54.     $mail->Username   = $usernameSmtp;
   55.     $mail->Password   = fetchSMTPPasswordFromSecureStorage();
   56.     $mail->Host       = $host;
   57.     $mail->Port       = $port;
   58.     $mail->SMTPAuth   = true;
   59.     $mail->SMTPSecure = 'tls';
   60.     $mail->addCustomHeader('X-SES-CONFIGURATION-SET', $configurationSet);
   61. 
   62.     // Specify the message recipients.
   63.     $mail->addAddress($recipient);
   64.     // You can also add CC, BCC, and additional To recipients here.
   65. 
   66.     // Specify the content of the message.
   67.     $mail->isHTML(true);
   68.     $mail->Subject    = $subject;
   69.     $mail->Body       = $bodyHtml;
   70.     $mail->AltBody    = $bodyText;
   71.     $mail->Send();
   72.     echo "Email sent!" , PHP_EOL;
   73. } catch (phpmailerException $e) {
   74.     echo "An error occurred. {$e->errorMessage()}", PHP_EOL; //Catch errors from PHPMailer.
   75. } catch (Exception $e) {
   76.     echo "Email not sent. {$mail->ErrorInfo}", PHP_EOL; //Catch errors from Amazon SES.
   77. }
   78. function fetchSMTPPasswordFromSecureStorage() {
   79. /* IMPLEMENT THIS METHOD */
   80. // For example, you might fetch it from a secure location or AWS Secrets Manager: https://aws.amazon.com/secrets-manager/
   81. }
   82. 
   83. ?>
   ```

1. 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](verify-addresses-and-domains.md). 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)](request-production-access.md). Certifique-se de que o endereço informado seja exatamente o mesmo que você verificou.
   + *smtp\$1username*— Substitua por sua credencial de nome de usuário SMTP, que você obteve na página de [configurações SMTP](https://console.aws.amazon.com/ses/home?#smtp-settings:) 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\$1password*— 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](using-configuration-sets.md).
   + (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)](https://docs.aws.amazon.com/general/latest/gr/rande.html#ses_region) no. *Referência geral da AWS*

1. Salve **amazon-ses-smtp-sample.php.**

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

1. Revise a saída. Se o e-mail tiver sido enviado com sucesso, o console exibirá *"E-mail enviado\$1"* Caso contrário, ele exibirá uma mensagem de erro.

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

------