Invio di e-mail in modo programmatico tramite l'interfaccia Amazon SES SMTP - Amazon Simple Email Service

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Invio di e-mail in modo programmatico tramite l'interfaccia Amazon SES SMTP

Per inviare un'e-mail utilizzando l'SESSMTPinterfaccia Amazon, puoi utilizzare un linguaggio di programmazione, un server di posta elettronica o un'applicazione SMTP abilitati. Prima di iniziare, completa le attività in Impostazione di Amazon Simple Email Service. È inoltre necessario disporre delle seguenti informazioni aggiuntive:

Esempi di codice

Puoi accedere all'SESSMTPinterfaccia Amazon utilizzando un linguaggio di programmazione SMTP abilitato. Fornisci il SES SMTP nome host e il numero di porta di Amazon insieme alle tue SMTP credenziali, quindi utilizzi le SMTP funzioni generiche del linguaggio di programmazione per inviare l'e-mail.

Amazon Elastic Compute Cloud (AmazonEC2) limita il traffico e-mail sulla porta 25 per impostazione predefinita. Per evitare timeout durante l'invio di e-mail tramite l'SMTPendpoint da AmazonEC2, puoi richiedere la rimozione di queste restrizioni. Per ulteriori informazioni, consulta Come faccio a rimuovere la restrizione sulla porta 25 dalla mia EC2 istanza o AWS Lambda funzione Amazon? nel AWS Knowledge Center.

Gli esempi di codice in questa sezione riguardano Java e PHP la porta 587 per evitare questo problema.

Nota

In questo tutorial invierai un'e-mail a te stesso, in modo da controllare se la ricevi. Per ulteriori sperimentazioni o test di carico, usa il simulatore di SES mailbox di Amazon. Le e-mail inviate al simulatore di mailbox non vengono conteggiate ai fini della quota di invio o delle percentuali di mancati recapiti (bounce) e reclami. Per ulteriori informazioni, consulta Utilizzo manuale del simulatore di mailbox.

Seleziona un linguaggio di programmazione per visualizzare l'esempio per quel linguaggio specifico:

avvertimento

Amazon SES non consiglia l'uso di credenziali statiche. Fai riferimento AWS Secrets Managera come migliorare il tuo livello di sicurezza rimuovendo le credenziali codificate dal codice sorgente. Questo tutorial viene fornito solo allo scopo di testare l'SESSMTPinterfaccia Amazon in un ambiente non di produzione.

Java

Questo esempio utilizza Eclipse IDE e il JavaMail APIper inviare e-mail tramite Amazon SES utilizzando l'SMTPinterfaccia.

Prima di eseguire la procedura seguente, completa le attività di impostazione descritte in Impostazione di Amazon Simple Email Service.

Per inviare un'e-mail utilizzando l'SESSMTPinterfaccia Amazon con Java
  1. In un browser Web, vai alla JavaMail GitHub pagina. In Risorse, scegli javax.mail.jar per scaricare la versione più recente di. JavaMail

    Importante

    Questo tutorial richiede JavaMail la versione 1.5 o successiva. Queste procedure sono state testate utilizzando la JavaMail versione 1.6.1.

  2. In un browser Web, vai alla GitHub pagina di attivazione di Jakarta e, nella versione finale di Activation Framework 1.2.1, scarica jakarta.activation.jar JavaBeans

  3. Crea un progetto in Eclipse seguendo le fasi illustrate di seguito:

    1. Avvia Eclipse.

    2. In Eclipse scegli File, quindi New (Nuovo) e infine Java Project (Progetto Java).

    3. Nella finestra di dialogo Create a Java Project (Crea progetto Java), digita un nome di progetto, quindi scegli Next (Avanti).

    4. Nella finestra di dialogo Java Settings (Impostazioni Java), scegli la scheda Libraries (Librerie).

    5. Seleziona Classpath e aggiungi i due file jar esterni javax.mail.jar e jakarta.activation.jar utilizzando il pulsante Aggiungi esterno. JARs

    6. JARsScegliete Aggiungi esterno.

    7. Accedete alla cartella in cui avete scaricato JavaMail. Scegli il file javax.mail.jar, quindi scegli Open (Apri).

    8. Nella finestra di dialogo Java Settings (Impostazioni Java), scegli Finish (Fine).

  4. In Eclipse, nella finestra Package Explorer (Esplora pacchetti), espandi il progetto.

  5. Nel progetto fai clic con il pulsante destro del mouse sulla directory src, scegli New (Nuovo), quindi scegli Class (Classe).

  6. Nella finestra di dialogo New Java Class (Nuova classe Java), nel campo Name (Nome), digita AmazonSESSample, quindi scegli Finish (Fine).

  7. Sostituisci l'intero contenuto di A mazonSESSample .java con il seguente codice:

    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. In A mazonSESSample .java, sostituisci i seguenti indirizzi e-mail con i tuoi valori:

    Importante

    Gli indirizzi e-mail distinguono tra maiuscole e minuscole. Assicurati che gli indirizzi siano esattamente identici a quelli verificati.

    • sender@example.com — Sostituiscilo con il tuo indirizzo email «Da». Devi verificare questo indirizzo prima di eseguire il programma. Per ulteriori informazioni, consulta Identità verificate in Amazon SES.

    • recipient@example.com — Sostituiscilo con il tuo indirizzo email «A». Se il tuo account si trova ancora nella sandbox (ambiente di sperimentazione), devi verificare questo indirizzo prima di poterlo usare. Per ulteriori informazioni, consulta Richiedi l'accesso alla produzione (uscita dalla SES sandbox di Amazon).

  9. In A mazonSESSample .java sostituisci quanto segue con i tuoi valori:

    • smtp_username — Sostituisci la credenziale con il tuo nome SMTP utente. Tieni presente che la credenziale del nome SMTP utente è una stringa di 20 caratteri di lettere e numeri, non un nome comprensibile.

    • smtp_password`fetchSMTPPasswordFromSecureStorage` Implementa per recuperare la password.

  10. (Facoltativo) Se desideri utilizzare un SES SMTP endpoint Amazon in un Regione AWS altro email-smtp.us-west-2.amazonaws.com, modifica il valore della variabile HOST sull'endpoint che desideri utilizzare. Per un elenco delle regioni in cui Amazon SES è disponibile, consulta Amazon Simple Email Service (AmazonSES) nel Riferimenti generali di AWS.

  11. (Facoltativo) Se desideri utilizzare un set di configurazione per l'invio di questa e-mail, modifica il valore della variabile ConfigSet al nome del set di configurazione. Per ulteriori informazioni sui set di configurazione, consulta Utilizzo dei set di configurazione in Amazon SES.

  12. Salva un mazonSESSample file .java.

  13. Per compilare il progetto, scegli Project (Progetto), quindi scegli Build Project (Compila progetto). Se questa opzione è disabilitata, è possibile che sia abilitata la compilazione automatica.

  14. Per avviare il programma e inviare l'e-mail, scegli Run (Esegui), quindi di nuovo Run (Esegui).

  15. Esamina l'output. Se l'e-mail è stata inviata con successo, la console visualizza «Email inviata!» In caso contrario, viene visualizzato un messaggio di errore.

  16. Accedi al client e-mail dell'indirizzo del destinatario. Vedrai il messaggio inviato.

PHP

Questo esempio utilizza la PHPMailer classe per inviare e-mail tramite Amazon SES utilizzando l'SMTPinterfaccia.

Prima di eseguire la procedura seguente, è necessario completare le attività di impostazione descritte in Impostazione di Amazon Simple Email Service. Oltre a configurare Amazon, SES devi completare i seguenti prerequisiti per inviare e-mail conPHP:

Prerequisiti:
  • Installazione PHP: PHP è disponibile all'indirizzo http://php.net/downloads.php. Dopo l'installazionePHP, aggiungi il percorso alle variabili di ambiente PHP in modo da poterlo eseguire PHP da qualsiasi prompt dei comandi.

  • Installa il gestore delle dipendenze di Composer: dopo aver installato il gestore delle dipendenze di Composer, puoi scaricare e installare la classe e le PHPMailer relative dipendenze. Per installare Composer, segui le istruzioni riportate in https://getcomposer.org/download.

  • Installa la PHPMailer classe: dopo aver installato Composer, esegui il seguente comando per l'installazione: PHPMailer

    path/to/composer require phpmailer/phpmailer

    Nel comando precedente, sostituisci path/to/ con il percorso in cui hai installato Composer.

Per inviare un'e-mail utilizzando l'SESSMTPinterfaccia Amazon con PHP
  1. Crea un file chiamato amazon-ses-smtp-sample.php. Apri il file con un editor di testo e incolla il codice seguente:

    <?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. In amazon-ses-smtp-sample.php, sostituisci quanto segue con i tuoi valori:

    • sender@example.com — Sostituiscilo con un indirizzo email che hai verificato con AmazonSES. Per ulteriori informazioni, consulta Identità verificate. Gli indirizzi e-mail in Amazon SES fanno distinzione tra maiuscole e minuscole. Assicurati che l'indirizzo inserito sia esattamente identico a quello verificato.

    • recipient@example.com — Sostituiscilo con l'indirizzo del destinatario. Se il tuo account si trova ancora nella sandbox (ambiente di sperimentazione), devi verificare questo indirizzo prima di poterlo usare. Per ulteriori informazioni, consulta Richiedi l'accesso alla produzione (uscita dalla SES sandbox di Amazon). Assicurati che l'indirizzo inserito sia esattamente identico a quello verificato.

    • smtp_username — Sostituiscila con la credenziale del tuo nome SMTP utente, che hai ottenuto dalla pagina SMTPImpostazioni della SES console Amazon. Questo non corrisponde all'ID chiave di accesso AWS . Tieni presente che la credenziale del tuo nome SMTP utente è una stringa di 20 caratteri di lettere e numeri, non un nome comprensibile.

    • smtp_password`fetchSMTPPasswordFromSecureStorage` Implementa per recuperare la password.

    • (Facoltativo) ConfigSet — Se si desidera utilizzare un set di configurazione per l'invio di questa e-mail, sostituire questo valore con il nome del set di configurazione. Per ulteriori informazioni sui set di configurazione, consulta Utilizzo dei set di configurazione in Amazon SES.

    • (Facoltativo) email-smtp.us-west-2.amazonaws.com — Se desideri utilizzare un SES SMTP endpoint Amazon in una regione diversa dagli Stati Uniti occidentali (Oregon), sostituiscilo con l'SESSMTPendpoint Amazon nella regione che desideri utilizzare. Per un elenco di SMTP endpoint URLs per i Regioni AWS quali Amazon SES è disponibile, consulta Amazon Simple Email Service (AmazonSES) nel Riferimenti generali di AWS.

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

  4. Per eseguire il programma, aprite un prompt dei comandi nella stessa directory del amazon-ses-smtp-samplefile.php, quindi digitate. php amazon-ses-smtp-sample.php

  5. Esamina l'output. Se l'e-mail è stata inviata con successo, la console visualizza «Email inviata!» In caso contrario, viene visualizzato un messaggio di errore.

  6. Accedi al client e-mail dell'indirizzo del destinatario. Vedrai il messaggio inviato.