Senden Sie E-Mails mit Amazon SES SMTP in Java

Wenn ein Mitglied sein Anmeldekennwort vergisst, möchte es eine E-Mail an die registrierte E-Mail-Adresse senden und auf den darin enthaltenen Link klicken, um das Kennwort zurückzusetzen. Senden Sie daher eine E-Mail an die Web-App von AWS. Implementierte die Funktion.

Die Mail-Sendefunktion wird in eine JAR-Datei und in Teile umgewandelt.

Ich fand die AWS-Einstellungen problematischer als die Programmierung.

1. Umwelt

VS Code Java Extension Pack Spring Boot Extension Pack

2. Erwerb von SMTP-Anmeldeinformationen

Melden Sie sich bei der AWS-Konsole an und führen Sie die Schritte 1 bis 6 unter "Abrufen von Amazon SES-SMTP-Anmeldeinformationen mithilfe der Amazon SES-Konsole" aus, um den SMTP-Benutzernamen und das SMTP-Kennwort abzurufen, wie in der folgenden URL beschrieben. ..

Nach dem Erhalt werden auch der Name des Mailservers und die Portnummer angezeigt.

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

3. Erstellen Sie ein Gradle-Projekt

Wählen Sie in der VS Code-Befehlspalette "Spring Initializr: Generieren eines Gradle-Projekts" -> "Java" -> "Beliebige Gruppen-ID" -> "Beliebige Artefakt-ID" -> "Beliebige Version" -> "Abhängigkeiten sind leer" und wählen Sie "Gradle-Projekt". Erstellen. (Es muss nicht Spring Boot sein ...)

4. Fügen Sie Abhängigkeiten hinzu

Fügen Sie der Datei build.gradle eine Abhängigkeit hinzu, um die Datei javax.mail.jar abzurufen, die zum Senden von E-Mails mit Amazon SES SMTP erforderlich ist.

build.gradle


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

//↓ Übrigens hinzugefügt ★
bootJar {
    enabled = false
}
jar {
    enabled = true
	baseName = 'aws-ses-send'
	version = ''
	from configurations.compileClasspath.collect { it.isDirectory() ? it : zipTree(it) }
}

5. Implementierung

Verwenden Sie den Code von der AWS-Site fast so wie er ist.

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 = "Absender-E-Mail-Adresse";
    static final String FROMNAME = "Quellenname";
	
    // 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 = "SMTP-Benutzername";
    
    // Replace smtp_password with your Amazon SES SMTP password.
    static final String SMTP_PASSWORD = "SMTP-Passwort";
    
    // 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"; //← Bei Bedarf auskommentieren ★
    
    // Amazon SES SMTP host name.In diesem Beispiel wird der Westen der Vereinigten Staaten verwendet(Oregon) region.
    // See https://docs.aws.amazon.com/ses/latest/DeveloperGuide/regions.html#region-endpoints
    // for more information.
    static final String HOST = "Name des Mailservers";
    
    // The port you will connect to on the Amazon SES SMTP endpoint. 
    static final int PORT =Port-Nummer;
    
    // 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);//← Bei Bedarf auskommentieren ★
            
        // 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. Registrieren Sie eine gültige E-Mail-Adresse bei AWS als Absender

Melden Sie sich bei der AWS-Konsole an und führen Sie die Schritte 1 bis 7 unter "Überprüfen Sie Ihre E-Mail-Adresse mithilfe der Amazon SES-Konsole" aus, wie in der folgenden URL beschrieben, um eine gültige E-Mail-Adresse als Absender zu registrieren. ..

Nur die E-Mail-Adresse nach diesem Vorgang kann als Absender-E-Mail-Adresse verwendet werden.

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

7. Entfernen Sie die Zieleinschränkungen

In diesem Zustand können Sie das Ziel nicht frei auswählen und die E-Mail senden.

Wie beim Absender muss die E-Mail-Adresse des Empfängers im Voraus überprüft werden, um festzustellen, ob sie als Empfänger gesendet werden kann, und sie muss in Ordnung sein.

Die Situation ist "im Sandkasten".

Sie müssen "aus der Sandbox gehen", um das Ziel frei auszuwählen und die E-Mail zu senden.

Melden Sie sich wie in der folgenden URL beschrieben bei der AWS-Konsole an, führen Sie die Schritte 1 bis 9 unter "Aus der Amazon SES-Sandbox entfernen" aus und holen Sie die Berechtigung vom Support Center ein.

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

Mit Genehmigung ist keine Vorabprüfung des Ziels erforderlich.

8. Führen Sie aus

Erstellen Sie eine JAR-Datei, indem Sie den folgenden Befehl vom VS-Code-Terminal aus implementieren.

.\gradlew build

Sie können eine E-Mail senden, indem Sie die erstellte JAR-Datei in das aufrufende Projekt einfügen und die implementierte Sendemethode aufrufen.

das ist alles.

Recommended Posts

Senden Sie E-Mails mit Amazon SES SMTP in Java
[Java] Senden Sie eine E-Mail mit Amazon SES
Ich möchte eine E-Mail in Java senden.
Senden Sie Push-Benachrichtigungen über Notification Hubs in Java
Versuchen Sie es mit RocksDB mit Java
Implementieren Sie das Senden von E-Mails in Java
Ich habe eine E-Mail in Java gesendet
HTTPS-Verbindung mit tls1.2 in Java 6
Ich habe versucht, JWT in Java zu verwenden
Versuchen Sie es mit der Stream-API in Java
ERRORCODE = -4471 tritt in einer Java-Anwendung auf, die Db2 verwendet.
Versuchen Sie es mit der JSON-Format-API in Java
Lesen Sie Felica mit RC-S380 (PaSoRi) in Java
Senden Sie E-Mails mit JavaMail unter AWS
ChatWork4j für die Verwendung der ChatWork-API in Java
[Java] API-Erstellung mit Jerjey (Jax-rs) mit Eclipse
Versuchen Sie es mit Sourcetrail (Win-Version) mit Java-Code
Versuchen Sie, die Cloud Vision-API von GCP in Java zu verwenden
Versuchen Sie es mit Sourcetrail (MacOS-Version) mit Java-Code
Passen Sie IP-Adressen mithilfe regulärer Ausdrücke in Java an
Zeigen Sie "Hello World" im Browser mit Java an
Zeigen Sie "Hello World" im Browser mit Java an
Versuchen Sie es mit der Syntaxanalyse der COTOHA-API in Java
NLP4J Morphologische Analyse in Java (unter Verwendung von Kuromoji)
Änderungen in Java 11
Janken in Java
Umfangsrate in Java
FizzBuzz in Java
Konvertieren Sie JSON und YAML in Java (mit Jackson und SnakeYAML)
Schreiben Sie ABNF in Java und geben Sie die E-Mail-Adresse weiter
Rufen Sie die Amazon Product Advertising API 5.0 (PA-API v5) in Java auf
So konvertieren Sie A in a und a in A mit logischem Produkt und Summe in Java
Ich habe versucht, die erweiterte for-Anweisung in Java zu verwenden
Versuchen Sie es mit globalem Hooking in Java mithilfe der JNativeHook-Bibliothek
Unterschiede im Code bei Verwendung des Längensystems in Java