

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 a livello di programmazione tramite l'interfaccia SMTP di Amazon SES
<a name="send-using-smtp-programmatically"></a>

Per inviare un'e-mail utilizzando l'interfaccia SMTP di Amazon SES, puoi utilizzare linguaggi di programmazione, server e-mail o applicazione compatibili con SMTP. Prima di iniziare, completa le attività in [Impostazione di Amazon Simple Email Service](setting-up.md). È inoltre necessario disporre delle seguenti informazioni aggiuntive: 
+ Il nome utente e la password SMTP di SES, che ti permettono di connetterti all'endpoint SMTP di Amazon SES. Per ottenere le credenziali SMTP Amazon SES, consulta [Richiesta delle credenziali SMTP Amazon SES](smtp-credentials.md). 
**Importante**  
Le tue credenziali SMTP sono diverse dalle tue credenziali. AWS Per ulteriori informazioni sulle credenziali, consulta [Tipi di credenziali Amazon SES](send-email-concepts-credentials.md).
+ L'indirizzo dell'endpoint SMTP. Per un elenco degli endpoint SMTP Amazon SES, consulta [Connessione a un endpoint SMTP Amazon SES](smtp-connect.md).
+ Il numero di porta dell'interfaccia SMTP di Amazon SES, il quale dipende dal metodo di connessione. Per ulteriori informazioni, consulta [Connessione a un endpoint SMTP Amazon SES](smtp-connect.md).

## Esempi di codice
<a name="send-email-smtp-code-examples"></a>

Puoi accedere all'interfaccia SMTP di Amazon SES utilizzando un linguaggio di programmazione compatibile con SMTP. Oltre alle credenziali SMTP, fornisci il nome host e il numero di porta SMTP di Amazon SES, quindi utilizza le funzioni SMTP generiche del linguaggio di programmazione per inviare l'e-mail.

Per impostazione predefinita, Amazon Elastic Compute Cloud (Amazon EC2) limita il traffico di e-mail sulla porta 25. Per evitare timeout durante l'invio di e-mail tramite l'endpoint SMTP da Amazon EC2, puoi richiedere che queste restrizioni vengano rimosse. Per ulteriori informazioni, consulta [Come faccio a rimuovere la restrizione sulla porta 25 dalla mia istanza AWS Lambda o funzione Amazon EC2](https://aws.amazon.com/premiumsupport/knowledge-center/ec2-port-25-throttle/)? nel AWS Knowledge Center.

Gli esempi di codice in questa sezione per Java e PHP, utilizzano 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 per effettuare il test di carico, utilizza il simulatore di mailbox Amazon SES. 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](send-an-email-from-console.md#send-email-simulator).

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

**avvertimento**  
Amazon SES sconsiglia l'uso di credenziali statiche. Fai riferimento [Gestione dei segreti AWS](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html)a come migliorare il tuo livello di sicurezza rimuovendo le credenziali codificate dal codice sorgente. Questo tutorial viene fornito solo allo scopo di testare l'interfaccia SMTP di Amazon SES in un ambiente non di produzione.

------
#### [ Java ]

Questo esempio utilizza l'[IDE Eclipse](http://www.eclipse.org/) e l'[JavaMail API](https://github.com/javaee/javamail/releases) per inviare e-mail tramite Amazon SES utilizzando l'interfaccia SMTP.

Prima di eseguire la procedura seguente, completa le attività di impostazione descritte in [Impostazione di Amazon Simple Email Service](setting-up.md).

**Invio di un'e-mail tramite l'interfaccia SMTP Amazon SES con Java**

1. [In un browser Web, vai alla JavaMail GitHub pagina.](https://github.com/javaee/javamail/releases) 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.

1. **In un browser Web, vai alla [ GitHub pagina di attivazione di Jakarta](https://github.com/eclipse-ee4j/jaf/releases) e, nella [versione finale di Activation Framework 1.2.1](https://github.com/eclipse-ee4j/jaf/releases/tag/1.2.1), scarica jakarta.activation.jar JavaBeans **

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

   1. Avvia Eclipse.

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

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

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

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

   1. **Scegli JARs** Aggiungi esterno.

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

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

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

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

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

1. Sostituisci l'intero contenuto di **Amazon SESSample .java** con il seguente codice:

   ```
     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. In **Amazon SESSample .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 e-mail «Da». Devi verificare questo indirizzo prima di eseguire il programma. Per ulteriori informazioni, consulta [Identità verificate in Amazon SES](verify-addresses-and-domains.md).
   + *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 sandbox di Amazon SES)](request-production-access.md).

1. In **Amazon SESSample .java** sostituisci quanto segue con i tuoi valori:
   + *smtp\$1username*— Sostituiscila con la tua credenziale del nome utente SMTP. Nota che il nome utente SMTP è una stringa composta da 20 caratteri comprensive di lettere e numeri, non un nome intelligibile.
   + *smtp\$1password*— ``fetchSMTPPasswordFromSecureStorage`` Implementare per recuperare la password.

1. (Facoltativo) Se desideri utilizzare un endpoint SMTP di Amazon SES in un Regione AWS altro modo*email-smtp.us-west-2.amazonaws.com*, modifica il valore della variabile con l'endpoint che desideri `HOST` utilizzare. Per un elenco di regioni in cui Amazon SES è disponibile, consulta [Amazon Simple Email Service (Amazon SES)](https://docs.aws.amazon.com/general/latest/gr/rande.html#ses_region) in *Riferimenti generali di AWS*.

1. (Opzionale) Se desideri utilizzare un set di configurazione durante l'invio di questa e-mail, modifica il valore della variabile *ConfigSet* per il nome del set di configurazione. Per ulteriori informazioni sui set di configurazione, consulta [Utilizzo dei set di configurazione in Amazon SES](using-configuration-sets.md).

1. Salva **Amazon SESSample .java.**

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

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

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

1. 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'interfaccia SMTP. 

Prima di eseguire la procedura seguente, è necessario completare le attività di impostazione descritte in [Impostazione di Amazon Simple Email Service](setting-up.md). Oltre a configurare Amazon SES, devi completare i seguenti prerequisiti per l'invio di e-mail con PHP:

**Prerequisiti:**
+ **Installa PHP**[: PHP è disponibile all'indirizzo http://php.net/downloads.php.](https://php.net/downloads.php) Dopo aver installato PHP, aggiungi il relativo percorso alle variabili di ambiente in modo da poter 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 relative dipendenze. PHPMailer [Per installare Composer, segui le istruzioni di installazione su poser.org/download. https://getcom](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, sostituiscilo *path/to/* con il percorso in cui hai installato Composer.

**Invio di un'e-mail utilizzando l'interfaccia SMTP Amazon SES con PHP**

1. **Create un file denominato .phpamazon-ses-smtp-sample.** Apri il file con un editor di testo e incolla il codice seguente:

   ```
    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. In **amazon-ses-smtp-sample.php**, sostituisci quanto segue con i tuoi valori:
   + *sender@example.com*— Sostituiscilo con un indirizzo e-mail che hai verificato con Amazon SES. Per ulteriori informazioni, consulta [Identità verificate](verify-addresses-and-domains.md). Gli indirizzi e-mail in Amazon SES distinguono 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 sandbox di Amazon SES)](request-production-access.md). Assicurati che l'indirizzo inserito sia esattamente identico a quello verificato.
   + *smtp\$1username*— Sostituire con la credenziale del nome utente SMTP, ottenuta dalla pagina [Impostazioni SMTP](https://console.aws.amazon.com/ses/home?#smtp-settings:) della console Amazon SES. Questo **non** corrisponde all'ID chiave di accesso AWS . Nota che il nome utente SMTP è una stringa composta da 20 caratteri comprensive di lettere e numeri, non un nome intelligibile.
   + *smtp\$1password*— ``fetchSMTPPasswordFromSecureStorage`` Implementa per recuperare la password.
   + (Facoltativo) *ConfigSet* — Se desideri utilizzare un set di configurazione per l'invio di questa e-mail, sostituisci 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](using-configuration-sets.md).
   + (Facoltativo)*email-smtp.us-west-2.amazonaws.com*: se desideri utilizzare un endpoint SMTP Amazon SES in una regione diversa dagli Stati Uniti occidentali (Oregon), sostituiscilo con l'endpoint SMTP Amazon SES nella regione che desideri utilizzare. Per un elenco degli endpoint SMTP URLs per i Regioni AWS quali è disponibile Amazon SES, consulta [Amazon Simple Email Service (Amazon SES](https://docs.aws.amazon.com/general/latest/gr/rande.html#ses_region)) nel. *Riferimenti generali di AWS*

1. **Salva .phpamazon-ses-smtp-sample.**

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

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

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

------