Envoyer des e-mails à l'aide d'Amazon SES SMTP en Java

Lorsqu'un membre oublie son mot de passe de connexion, il souhaite envoyer un e-mail à l'adresse e-mail enregistrée et appuyer sur le lien pour réinitialiser le mot de passe, alors envoyez un e-mail à l'application Web sur AWS. Implémentation de la fonction.

La fonction d'envoi de courrier est transformée en un fichier jar et en plusieurs parties.

J'ai trouvé les paramètres AWS plus gênants que la programmation.

1. Environnement

VS Code Java Extension Pack Spring Boot Extension Pack

2. Acquisition des informations d'identification SMTP

Comme décrit dans l'URL ci-dessous, connectez-vous à la console AWS et effectuez les étapes 1 à 6 de «Obtention des informations d'identification SMTP Amazon SES à l'aide de la console Amazon SES» pour obtenir le nom d'utilisateur SMTP et le mot de passe SMTP. ..

Une fois obtenus, le nom du serveur de messagerie et le numéro de port seront également affichés.

https://docs.aws.amazon.com/ja_jp/ses/latest/DeveloperGuide/smtp-credentials.html

3. Créer un projet Gradle

Dans la palette de commandes VS Code, sélectionnez «Spring Initializr: Generate a Gradle Project» -> «Java» -> «Any GroupId» -> «Any ArtifactId» -> «Any version» -> «Les dépendances sont vides» et sélectionnez Gradle Project. Créer. (Il n'est pas nécessaire que ce soit Spring Boot ...)

4. Ajouter des dépendances

Ajoutez une dépendance au fichier build.gradle pour obtenir le javax.mail.jar nécessaire pour envoyer du courrier à l'aide d'Amazon SES SMTP.

build.gradle


dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-web'
	compileOnly 'com.sun.mail:javax.mail:1.6.2' //← Ajouter ★
	testImplementation('org.springframework.boot:spring-boot-starter-test') {
		exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
	}
}

//↓ Ajouté au fait ★
bootJar {
    enabled = false
}
jar {
    enabled = true
	baseName = 'aws-ses-send'
	version = ''
	from configurations.compileClasspath.collect { it.isDirectory() ? it : zipTree(it) }
}

5. Mise en œuvre

Utilisez le code du site AWS presque tel quel.

AmazonSES.java


package com.xxx.aws;

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 AmazonSES {

    // Replace [email protected] with your "From" address.
    // This address must be verified.
    static final String FROM = "Adresse e-mail de l'expéditeur";
    static final String FROMNAME = "Nom de la source";
	
    // Replace [email protected] with a "To" address. If your account 
    // is still in the sandbox, this address must be verified.
    // static final String TO = "[email protected]";
    
    // Replace smtp_username with your Amazon SES SMTP user name.
    static final String SMTP_USERNAME = "Nom d'utilisateur SMTP";
    
    // Replace smtp_password with your Amazon SES SMTP password.
    static final String SMTP_PASSWORD = "Mot de passe SMTP";
    
    // 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"; //← Commentez si inutile ★
    
    // Amazon SES SMTP host name.Cet exemple utilise l'ouest des États-Unis(Oregon) region.
    // See https://docs.aws.amazon.com/ses/latest/DeveloperGuide/regions.html#region-endpoints
    // for more information.
    static final String HOST = "Nom du serveur de messagerie";
    
    // The port you will connect to on the Amazon SES SMTP endpoint. 
    static final int PORT =numéro de port;
    
    // 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 void send(String to,
								String subject,
								String body) 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);//← Commentez si inutile ★
            
        // Create a transport.
        Transport transport = session.getTransport();
                    
        // 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();
        }
    }
}

https://docs.aws.amazon.com/ja_jp/ses/latest/DeveloperGuide/send-using-smtp-java.html

6. Enregistrez une adresse e-mail valide auprès d'AWS en tant qu'expéditeur

Connectez-vous à la console AWS et exécutez les étapes 1 à 7 de «Vérifier votre adresse e-mail à l'aide de la console Amazon SES» comme décrit dans l'URL ci-dessous pour enregistrer une adresse e-mail valide en tant qu'expéditeur. ..

Seule l'adresse e-mail après cette procédure peut être utilisée comme adresse e-mail de l'expéditeur.

https://docs.aws.amazon.com/ja_jp/ses/latest/DeveloperGuide/verify-email-addresses-procedure.html

7. Supprimer les restrictions de destination

Dans cet état, vous ne pouvez pas sélectionner librement la destination et envoyer le courrier.

Comme pour l'expéditeur, l'adresse e-mail du destinataire doit être vérifiée à l'avance pour voir si elle peut être envoyée en tant que destinataire et elle doit être correcte.

La situation est "dans le bac à sable".

Vous devez "sortir du bac à sable" pour sélectionner librement la destination et envoyer le mail.

Comme décrit dans l'URL ci-dessous, connectez-vous à la console AWS, effectuez les étapes 1 à 9 de «Sortir du bac à sable Amazon SES» et obtenez l'autorisation du centre de support.

https://docs.aws.amazon.com/ja_jp/ses/latest/DeveloperGuide/request-production-access.html

Avec permission, la vérification préalable de la destination n'est pas requise.

8. Exécuter

Créez un fichier jar en implémentant la commande suivante à partir du terminal VS Code.

.\gradlew build

Vous pouvez envoyer un e-mail en plaçant le fichier jar créé dans le projet appelant et en appelant la méthode d'envoi implémentée.

c'est tout.

Recommended Posts

Envoyer des e-mails à l'aide d'Amazon SES SMTP en Java
[Java] Envoyer un e-mail à l'aide d'Amazon SES
Je souhaite envoyer un e-mail en Java.
Envoyer des notifications push à l'aide de Notification Hubs en Java
Essayez d'utiliser RocksDB avec Java
Implémenter l'envoi d'e-mails en Java
J'ai envoyé un e-mail en Java
Connexion HTTPS utilisant tls1.2 dans Java 6
J'ai essayé d'utiliser JWT en Java
Essayez d'utiliser l'API Stream en Java
ERRORCODE = -4471 se produit dans une application Java qui utilise Db2.
Essayez d'utiliser l'API au format JSON en Java
Lire Felica en utilisant RC-S380 (PaSoRi) en Java
Envoyer des e-mails à l'aide de JavaMail sur AWS
ChatWork4j pour l'utilisation de l'API ChatWork en Java
[Java] Création d'API à l'aide de Jerjey (Jax-rs) avec eclipse
Essayez d'utiliser Sourcetrail (version win) avec du code Java
Essayez d'utiliser l'API Cloud Vision de GCP en Java
Essayez d'utiliser Sourcetrail (version macOS) avec du code Java
Faire correspondre les adresses IP à l'aide d'expressions régulières en Java
Afficher "Hello World" dans le navigateur à l'aide de Java
Afficher "Hello World" dans le navigateur à l'aide de Java
Essayez d'utiliser l'analyse syntaxique de l'API COTOHA en Java
NLP4J [001b] Analyse morphologique en Java (utilisant kuromoji)
Changements dans Java 11
Janken à Java
Taux circonférentiel à Java
FizzBuzz en Java
Convertir JSON et YAML en Java (en utilisant Jackson et SnakeYAML)
Écrivez ABNF en Java et transmettez l'adresse e-mail
Appelez l'API Amazon Product Advertising 5.0 (PA-API v5) en Java
Comment convertir A en A et A en A en utilisant le produit logique et la somme en Java
J'ai essayé d'utiliser l'instruction Extended for en Java
Essayez le hooking global en Java à l'aide de la bibliothèque JNativeHook
Différences de code lors de l'utilisation du système de longueur en Java