[Java] Envoyer un e-mail à l'aide d'Amazon SES

introduction

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.

À propos d'Amazon SES

--Amazon SES (Simple Email Service) est un service de livraison de courrier fourni par Amazon.

Préparation (console SES)

Avant de créer le programme, vous devez effectuer les opérations suivantes:

Vérification de l'adresse source (De), vérification de l'adresse de destination (À)

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.

procédure

  1. Connectez-vous à AWS et ouvrez la console SES
  2. Cliquez sur "Adresses e-mail"
  3. Cliquez sur le bouton "Vérifier une nouvelle adresse e-mail"
  4. Entrez l'adresse e-mail que vous souhaitez authentifier et cliquez sur le bouton «Vérifier cette adresse e-mail»
  5. Cliquez sur le lien dans l'e-mail reçu
  6. Lorsque vous ouvrez l'écran de l'étape 2, l'état de vérification de l'adresse e-mail spécifiée est vérifié.

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».

Créez un utilisateur SMTP pour obtenir les informations d'identification (nom d'utilisateur et mot de passe)

procédure

  1. Connectez-vous à AWS et ouvrez la console SES
  2. Cliquez sur "Paramètres SMTP"
  3. Cliquez sur le bouton "Créer mes informations d'identification SMTP"
  4. Entrez le nom de l'utilisateur SMTP et cliquez sur le bouton "Créer" (le nom peut être la valeur par défaut)
  5. Cliquez sur Afficher les informations d'identification de sécurité SMTP de l'utilisateur
  6. Copiez les informations d'identification affichées et enregistrez-les dans un endroit sûr ou téléchargez csv avec "Télécharger les informations d'identification"

Vous pouvez voir l'utilisateur SMTP créé dans IAM Console> Access Management> Users.

Environnement d'exploitation

$ 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)

Programme Java

  1. Créez un projet Maven avec eclipse
  2. Ajoutez une dépendance JavaMail à pom.xml (recherchez JavaMail dans MvnRepository et ajoutez la dernière version de jar)
  3. Créer un programme d'envoi de courrier

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

en conclusion

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

[Java] Envoyer un e-mail à l'aide d'Amazon SES
Envoyer des e-mails à l'aide d'Amazon SES SMTP en Java
Envoyer des e-mails à l'aide de JavaMail sur AWS
Je souhaite envoyer un e-mail en Java.
[Spring Boot] Envoyer un e-mail
[Version 2020] Comment envoyer un e-mail à l'aide d'Android Studio Javamail
J'ai envoyé un e-mail en Java
Comment formater enum à l'aide de formatter-maven-plugin (Java)
Envoyer des e-mails depuis Gmail avec Ruby
Mapper sans utiliser de tableau en java
[Java] Création d'un fichier Excel à l'aide d'Apache POI
Envoyer des notifications push à l'aide de Notification Hubs en Java
J'ai essayé d'utiliser l'instruction Extended for en Java
Envoyer un e-mail avec une pièce jointe PDF via JavaMail
Tri à l'aide du comparateur java
[Java] Installation d'Amazon Corretto 8
[java] Lancer une exception
Pratique de grattage avec Java ②
Pratique du grattage avec Java ①
Je souhaite créer une applet Java sans utiliser d'IDE
Je souhaite envoyer manuellement un e-mail d'autorisation avec Devise