Depuis que j'ai eu l'occasion d'utiliser le SES (Simple Email Service) d'AWS, j'aimerais résumer comment envoyer un e-mail avec un programme Java en tant que révision. Il existe deux méthodes, l'une consiste à utiliser SMTP et l'autre à utiliser AWS SDK. Pour l'instant, je vais décrire la méthode SMTP. J'ajouterai le kit AWS SDK à une date ultérieure.
--Amazon SES (Simple Email Service) est un service de livraison de courrier fourni par Amazon.
Avant de créer le programme, vous devez effectuer les opérations suivantes:
Le compte est créé en tant que nouvel utilisateur dans un environnement de test appelé sandbox, vous ne pouvez donc envoyer et recevoir des e-mails qu'avec l'adresse e-mail confirmée. Pour envoyer des e-mails à des adresses e-mail non vérifiées, augmenter le nombre d'e-mails que vous pouvez envoyer par jour et envoyer des e-mails plus rapidement, vous devez déplacer votre compte hors du bac à sable.
Ceci termine la vérification de l'adresse e-mail. Vous pouvez vérifier si vous pouvez envoyer et recevoir des e-mails en cliquant sur le bouton «Envoyer un e-mail de test».
Vous pouvez voir l'utilisateur SMTP créé dans IAM Console> Access Management> Users.
$ java -version
java version "1.8.0_231"
Java(TM) SE Runtime Environment (build 1.8.0_231-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.231-b11, mixed mode)
pom.xml 
  <!--Dépendances-->
  <dependencies>
    <dependency>
      <groupId>com.sun.mail</groupId>
      <artifactId>javax.mail</artifactId>
      <version>1.6.2</version>
    </dependency>
  </dependencies>
SesSmtpSample.java
public class SesSmtpSample {
	//Adresse de l'expéditeur et nom de l'expéditeur(Adresse e-mail authentifiée par la console SES)
    static final String FROM = "[email protected]";
    static final String FROMNAME = "Sender Name";
    //adresse de destination(Adresse e-mail authentifiée par la console SES)
    static final String TO = "[email protected]";
    //Nom d'utilisateur et mot de passe SMTP créés dans la console SES
    static final String SMTP_USERNAME = "smtp_username";
    static final String SMTP_PASSWORD = "smtp_password";
    //Spécifiez le jeu de configuration créé dans la console SES. Utilisé lors de l'enregistrement des journaux de messagerie. Commentez car ce n'est pas nécessaire cette fois
    // static final String CONFIGSET = "ConfigSet";
    //Point de terminaison SMTP Amazon SES(Nous si la région est l'Oregon-west-2)
    static final String HOST = "email-smtp.us-west-2.amazonaws.com";
    //Numéro de port du point de terminaison SMTP Amazon SES.
    static final int PORT = 587;
    //Sujet du courriel
    static final String SUBJECT = "Amazon SES test (SMTP interface accessed using Java)";
    //Texte
    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 {
		
		//Définir un serveur SMTP
		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");
    	//Établir une session de messagerie
    	Session session = Session.getDefaultInstance(props);
    	//Écrire un email
        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");
        //Définissez le jeu de configuration. Je ne vais pas l'utiliser cette fois, alors commentez
        //msg.setHeader("X-SES-CONFIGURATION-SET", CONFIGSET);
        Transport transport = session.getTransport();
        //envoyer un e-mail
        try {
            System.out.println("Sending...");
            //Connectez-vous au serveur SMTP
            transport.connect(HOST, SMTP_USERNAME, SMTP_PASSWORD);
            //envoyer un e-mail
            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 {
            //Fin de connexion
            transport.close();
        }
	}
}
Les points de terminaison SMTP varient selon la région. Vous pouvez le trouver dans la référence AWS (https://docs.aws.amazon.com/general/latest/gr/rande.html#ses_region).
Puisqu'il existe un document japonais d'Amazon SES, en gros, si vous suivez le document, vous pouvez envoyer un e-mail sans aucun problème.
Recommended Posts