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
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. È 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.
Importante
Le tue credenziali SMTP sono diverse dalle tue credenziali. AWS Per ulteriori informazioni sulle credenziali, consulta Tipi di credenziali Amazon SES.
-
L'indirizzo dell'endpoint SMTP. Per un elenco degli endpoint SMTP Amazon SES, consulta Connessione a un endpoint SMTP Amazon SES.
-
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.
Esempi di codice
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.
Amazon Elastic Compute Cloud (Amazon EC2) limita il traffico e-mail sulla porta 25 per impostazione predefinita. Per evitare timeout durante l'invio di e-mail tramite l'endpoint SMTP da EC2 Amazon, 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?
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.
Seleziona un linguaggio di programmazione per visualizzare l'esempio per quel linguaggio specifico:
avvertimento
Amazon SES sconsiglia 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'interfaccia SMTP di Amazon SES in un ambiente non di produzione.
- Java
-
Questo esempio utilizza l'IDE Eclipse
e l'JavaMail API 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.
Invio di un'e-mail tramite l'interfaccia SMTP Amazon SES con Java
-
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.
-
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 -
Crea un progetto in Eclipse seguendo le fasi illustrate di seguito:
-
Avvia Eclipse.
-
In Eclipse scegli File, quindi New (Nuovo) e infine Java Project (Progetto Java).
-
Nella finestra di dialogo Create a Java Project (Crea progetto Java), digita un nome di progetto, quindi scegli Next (Avanti).
-
Nella finestra di dialogo Java Settings (Impostazioni Java), scegli la scheda Libraries (Librerie).
-
Seleziona Classpath e aggiungi i due file jar esterni javax.mail.jar e jakarta.activation.jar utilizzando il pulsante Aggiungi esterno. JARs
-
Scegli JARs Aggiungi esterno.
-
Accedete alla cartella in cui avete effettuato il download JavaMail. Scegli il file
javax.mail.jar
, quindi scegli Open (Apri). -
Nella finestra di dialogo Java Settings (Impostazioni Java), scegli Finish (Fine).
-
-
In Eclipse, nella finestra Package Explorer (Esplora pacchetti), espandi il progetto.
-
Nel progetto fai clic con il pulsante destro del mouse sulla directory src, scegli New (Nuovo), quindi scegli Class (Classe).
-
Nella finestra di dialogo New Java Class (Nuova classe Java), nel campo Name (Nome), digita
AmazonSESSample
, quindi scegli Finish (Fine). -
Sostituisci l'intero contenuto di Amazon SESSample .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/ } }
-
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. -
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).
-
-
In Amazon SESSample .java sostituisci quanto segue con i tuoi valori:
-
smtp_username
— 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_password
—`fetchSMTPPasswordFromSecureStorage`
Implementare per recuperare la password.
-
-
(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 desideriHOST
utilizzare. Per un elenco di regioni in cui Amazon SES è disponibile, consulta Amazon Simple Email Service (Amazon SES) in Riferimenti generali di AWS. -
(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. -
Salva Amazon SESSample .java.
-
Per compilare il progetto, scegli Project (Progetto), quindi scegli Build Project (Compila progetto). Se questa opzione è disabilitata, è possibile che sia abilitata la compilazione automatica.
-
Per avviare il programma e inviare l'e-mail, scegli Run (Esegui), quindi di nuovo Run (Esegui).
-
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.
-
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. 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.
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
-
Installa la PHPMailer classe: dopo aver installato Composer, esegui il seguente comando per l'installazione: PHPMailer
path/to/
composer require phpmailer/phpmailerNel 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
-
Create un file denominato .phpamazon-ses-smtp-sample. 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/ } ?>
-
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. 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). Assicurati che l'indirizzo inserito sia esattamente identico a quello verificato. -
smtp_username
— Sostituire con la credenziale del nome utente SMTP, ottenuta dalla pagina Impostazioni SMTPdella 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_password
—`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. -
(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) nel. Riferimenti generali di AWS
-
-
Salva .phpamazon-ses-smtp-sample.
-
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
-
Esamina l'output. Se l'e-mail è stata inviata correttamente, la console visualizza «Email inviata!» In caso contrario, viene visualizzato un messaggio di errore.
-
Accedi al client e-mail dell'indirizzo del destinatario. Vedrai il messaggio inviato.
-