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

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 remover a restrição da porta 25 na minha instância do Amazon EC2 ou função do AWS Lambda? na Central de Conhecimento da AWS.

Os exemplos de código nesta seção para C#, 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 mais informações, consulte Uso do simulador de caixa postal manualmente..

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

C#

O procedimento a seguir mostra como usar o Microsoft Visual Studio para criar uma aplicação de console C# que envia um e-mail por meio do Amazon SES. Os procedimentos nesta seção aplicam-se ao Visual Studio 2017, mas o processo de criação de aplicações de console C# é semelhante em todas as edições do Microsoft Visual Studio.

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 C#

  1. Crie um projeto de console no Visual Studio realizando as seguintes etapas:

    1. Abra o Microsoft Visual Studio.

    2. No menu File (Arquivo), escolha New (Novo) , Project (Projeto).

    3. Na janela New Project, no painel esquerdo, expanda Installed, expanda Templates e, em seguida, expanda Visual C#.

    4. Em Visual C#, escolha Windows Classic Desktop.

    5. No menu na parte superior da janela, escolha .NET Framework 4.5, conforme mostrado na imagem a seguir.

      
                                            O menu de seleção do .NET Framework na janela New Project.
      nota

      Você pode escolher uma versão posterior do .NET Framework, se necessário.

    6. Escolha Console App (.NET Framework).

    7. No campo Name (Nome), digite AmazonSESSample.

    8. Escolha OK.

  2. No seu projeto do Visual Studio, substitua todo o conteúdo de Program.cs pelo seguinte código:

    using System; using System.Net; using System.Net.Mail; namespace AmazonSESSample { class Program { static void Main(string[] args) { // Replace sender@example.com with your "From" address. // This address must be verified with Amazon SES. String FROM = "sender@example.com"; 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. String TO = "recipient@amazon.com"; // Replace smtp_username with your Amazon SES SMTP user name. String SMTP_USERNAME = "smtp_username"; // Replace smtp_password with your Amazon SES SMTP password. String SMTP_PASSWORD = "smtp_password"; // (Optional) the name of a configuration set to use for this message. // If you comment out this line, you also need to remove or comment out // the "X-SES-CONFIGURATION-SET" header below. String CONFIGSET = "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 AWS Region. String HOST = "email-smtp.us-west-2.amazonaws.com"; // The port you will connect to on the Amazon SES SMTP endpoint. We // are choosing port 587 because we will use STARTTLS to encrypt // the connection. int PORT = 587; // The subject line of the email String SUBJECT = "Amazon SES test (SMTP interface accessed using C#)"; // The body of the email String BODY = "<h1>Amazon SES Test</h1>" + "<p>This email was sent through the " + "<a href='https://aws.amazon.com/ses'>Amazon SES</a> SMTP interface " + "using the .NET System.Net.Mail library.</p>"; // Create and build a new MailMessage object MailMessage message = new MailMessage(); message.IsBodyHtml = true; message.From = new MailAddress(FROM, FROMNAME); message.To.Add(new MailAddress(TO)); message.Subject = SUBJECT; message.Body = BODY; // Comment or delete the next line if you are not using a configuration set message.Headers.Add("X-SES-CONFIGURATION-SET", CONFIGSET); using (var client = new System.Net.Mail.SmtpClient(HOST, PORT)) { // Pass SMTP credentials client.Credentials = new NetworkCredential(SMTP_USERNAME, SMTP_PASSWORD); // Enable SSL encryption client.EnableSsl = true; // Try to send the message. Show status in console. try { Console.WriteLine("Attempting to send email..."); client.Send(message); Console.WriteLine("Email sent!"); } catch (Exception ex) { Console.WriteLine("The email was not sent."); Console.WriteLine("Error message: " + ex.Message); } } } } }
  3. Em Program.cs, substitua os seguintes endereços de e-mail por 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 "From" (De). Você deve verificar esse endereço antes de executar esse programa. Para mais informações, consulte Identidades verificadas no Amazon SES.

    • RECIPIENT@EXAMPLE.COM: substitua pelo seu endereço de e-mail "To" (Para). Se sua conta ainda estiver na sandbox, você precisará verificar esse endereço antes de usá-lo. Para mais informações, consulte Saída da sandbox do Amazon SES.

  4. Em Program.cs, substitua as seguintes credenciais SMTP pelos valores obtidos em Obtenção de credenciais SMTP do Amazon SES:

    Importante

    Suas credenciais SMTP são diferentes das suas credenciais da AWS. Para obter mais informações sobre credenciais, consulte Tipos de credenciais do Amazon SES.

    • YOUR_SMTP_USERNAME: substitua pelo seu 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.

    • YOUR_SMTP_PASSWORD—Substitua pela sua senha SMTP.

  5. (Opcional) Se quiser usar um endpoint SMTP do Amazon SES em uma região que não seja Oeste dos EUA (Oregon), altere o valor da variável HOST para o endpoint que deseja usar. Para obter uma lista de URLs de endpoints SMTP para as Regiões da AWS onde o Amazon SES está disponível, consulte Amazon Simple Email Service (Amazon SES) na Referência geral da AWS.

  6. (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.

  7. Salvar Program.cs.

  8. Para construir o projeto, escolha Build e, em seguida, escolha Build Solution.

  9. Para executar o programa, escolha Debug e escolha Start Debugging.

  10. Revise a saída. Se o e-mail foi enviado com êxito, o console exibirá "Email sent!"; do contrário, ele exibirá uma mensagem de erro.

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

Java

Este exemplo usa Eclipse IDE e a API JavaMail para enviar e-mail 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, vá para a página do JavaMail Github. Em Downloads, escolha javax.mail.jar para fazer download da versão mais recente do JavaMail.

    Importante

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

  2. 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. Escolha Add External JARs.

    6. Procure a pasta em que você baixou JavaMail. Escolha o arquivo javax.mail.jar e Open.

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

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

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

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

  6. Substitua o todo o conteúdo de AmazonSESSample.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"; // Replace smtp_password with your Amazon SES SMTP password. static final String SMTP_PASSWORD = "smtp_password"; // 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(); // 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(); } } }
  7. Em AmazonSESSample.java, substitua os seguintes endereços de e-mail por 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 "From" (De). Você deve verificar esse endereço antes de executar esse programa. Para mais informações, consulte Identidades verificadas no Amazon SES.

    • RECIPIENT@EXAMPLE.COM: substitua pelo seu endereço de e-mail "To" (Para). Se sua conta ainda estiver na sandbox, você precisará verificar esse endereço antes de usá-lo. Para mais informações, consulte Saída da sandbox do Amazon SES.

  8. Em AmazonSESSample.java, substitua as seguintes credenciais SMTP pelos valores obtidos em Obtenção de credenciais SMTP do Amazon SES:

    Importante

    Suas credenciais SMTP são diferentes das suas credenciais da AWS. Para obter mais informações sobre credenciais, consulte Tipos de credenciais do Amazon SES.

    • YOUR_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.

    • YOUR_SMTP_PASSWORD — Substitua pela sua senha SMTP.

  9. (Opcional) Se quiser usar um endpoint SMTP do Amazon SES em uma Região da AWS que não seja a região Oeste dos EUA (Oregon), altere o valor da variável HOST para o endpoint que 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.

  10. (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.

  11. Salvar AmazonSESSample.java.

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

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

  14. Revise a saída. Se o e-mail foi enviado com êxito, o console exibirá "Email sent!"; do contrário, ele exibirá uma mensagem de erro.

  15. 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 Composer: após instalar o gerenciador de dependências 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: após instalar o Composer, execute o comando a seguir 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'; // Replace smtp_password with your Amazon SES SMTP password. $passwordSmtp = 'smtp_password'; // 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 = $passwordSmtp; $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. } ?>
  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ê verificou com o Amazon SES. Para 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 mais informações, consulte Saída da 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, que você obteve na página Configurações de 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: substitua pela sua senha SMTP, que você obteve na página Configurações de SMTP do console do Amazon SES. Essa não é igual à chave de acesso secreta da AWS.

    • (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 de Oeste dos EUA (Oregon), substitua pelo endpoint SMTP do da região que você deseja usar. Para obter uma lista de URLs de endpoints SMTP para as Regiões da AWS onde o Amazon SES está disponível, consulte Amazon Simple Email Service (Amazon SES) na Referência geral da AWS.

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

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

  5. Revise a saída. Se o e-mail foi enviado com êxito, o console exibirá "Email sent!"; do 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.