[Java] Senden Sie eine E-Mail mit Amazon SES

Einführung

Da ich die Möglichkeit hatte, den SES (Simple Email Service) von AWS zu verwenden, möchte ich als Überprüfung zusammenfassen, wie eine E-Mail mit einem Java-Programm gesendet wird. Es gibt zwei Methoden: Die eine ist die Verwendung von SMTP und die andere die Verwendung von AWS SDK. Im Moment werde ich die SMTP-Methode beschreiben. Ich werde das AWS SDK zu einem späteren Zeitpunkt hinzufügen.

Über Amazon SES

Vorbereitung (SES-Konsole)

Bevor Sie das Programm erstellen, müssen Sie folgende Schritte ausführen:

Überprüfung der Quelladresse (Von), Überprüfung der Zieladresse (Bis)

Das Konto wird als neuer Benutzer in einer Testumgebung namens Sandbox erstellt, sodass Sie nur E-Mails mit der bestätigten E-Mail-Adresse senden und empfangen können. Um E-Mails an nicht bestätigte E-Mail-Adressen zu senden, die Anzahl der E-Mails zu erhöhen, die Sie pro Tag senden können, und E-Mails mit hoher Geschwindigkeit zu senden, müssen Sie Ihr Konto aus der Sandbox verschieben.

Verfahren

  1. Melden Sie sich bei AWS an und öffnen Sie die SES-Konsole
  2. Klicken Sie auf "E-Mail-Adressen".
  3. Klicken Sie auf die Schaltfläche "Neue E-Mail-Adresse überprüfen"
  4. Geben Sie die E-Mail-Adresse ein, die Sie authentifizieren möchten, und klicken Sie auf die Schaltfläche "Diese E-Mail-Adresse überprüfen"
  5. Klicken Sie auf den Link in der empfangenen E-Mail
  6. Wenn Sie den Bildschirm in Schritt 2 öffnen, wird der Überprüfungsstatus der angegebenen E-Mail-Adresse überprüft.

Damit ist die Überprüfung der E-Mail-Adresse abgeschlossen. Sie können überprüfen, ob Sie E-Mails senden und empfangen können, indem Sie auf die Schaltfläche "Test-E-Mail senden" klicken.

Erstellen Sie einen SMTP-Benutzer, um Anmeldeinformationen (Benutzername und Kennwort) abzurufen.

Verfahren

  1. Melden Sie sich bei AWS an und öffnen Sie die SES-Konsole
  2. Klicken Sie auf "SMTP-Einstellungen".
  3. Klicken Sie auf die Schaltfläche "Meine SMTP-Anmeldeinformationen erstellen"
  4. Geben Sie den Namen des SMTP-Benutzers ein und klicken Sie auf die Schaltfläche "Erstellen" (der Name kann der Standardwert sein).
  5. Klicken Sie auf Benutzer-SMTP-Sicherheitsanmeldeinformationen anzeigen
  6. Kopieren Sie die angezeigten Anmeldeinformationen und speichern Sie sie an einem sicheren Ort oder laden Sie csv mit "Anmeldeinformationen herunterladen" herunter.

Sie können den SMTP-Benutzer sehen, der unter IAM-Konsole> Zugriffsverwaltung> Benutzer erstellt wurde.

Betriebsumgebung

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

Java-Programm

  1. Erstellen Sie ein Maven-Projekt mit Eclipse
  2. Fügen Sie der pom.xml JavaMail-Abhängigkeit hinzu (suchen Sie JavaMail in MvnRepository und fügen Sie die neueste Version von jar hinzu).
  3. Erstellen Sie ein Mail-Sendeprogramm

pom.xml


  <!--Abhängigkeiten-->
  <dependencies>
    <dependency>
      <groupId>com.sun.mail</groupId>
      <artifactId>javax.mail</artifactId>
      <version>1.6.2</version>
    </dependency>
  </dependencies>

SesSmtpSample.java


public class SesSmtpSample {

	//Absenderadresse und Absendername(Von der SES-Konsole authentifizierte E-Mail-Adresse)
    static final String FROM = "[email protected]";
    static final String FROMNAME = "Sender Name";

    //Zieladresse(Von der SES-Konsole authentifizierte E-Mail-Adresse)
    static final String TO = "[email protected]";

    //SMTP-Benutzername und -Kennwort in der SES-Konsole erstellt
    static final String SMTP_USERNAME = "smtp_username";
    static final String SMTP_PASSWORD = "smtp_password";

    //Geben Sie den in der SES-Konsole erstellten Konfigurationssatz an. Wird beim Speichern von E-Mail-Protokollen verwendet. Kommentieren Sie aus, da dies diesmal nicht erforderlich ist
    // static final String CONFIGSET = "ConfigSet";

    //Amazon SES SMTP-Endpunkt(Uns, wenn die Region Oregon ist-west-2)
    static final String HOST = "email-smtp.us-west-2.amazonaws.com";

    //Amazon SES SMTP-Endpunkt-Portnummer.
    static final int PORT = 587;

    //E-Mail Betreff
    static final String SUBJECT = "Amazon SES test (SMTP interface accessed using Java)";
    //Text
    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 {
		
		//Definieren Sie einen SMTP-Server
		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");

    	//E-Mail-Sitzung einrichten
    	Session session = Session.getDefaultInstance(props);

    	//Mail schreiben
        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");

        //Stellen Sie den Konfigurationssatz ein. Ich werde es dieses Mal nicht benutzen, also kommentiere es aus
        //msg.setHeader("X-SES-CONFIGURATION-SET", CONFIGSET);

        Transport transport = session.getTransport();

        //E-Mail senden
        try {
            System.out.println("Sending...");

            //Stellen Sie eine Verbindung zum SMTP-Server her
            transport.connect(HOST, SMTP_USERNAME, SMTP_PASSWORD);

            //E-Mail senden
            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 {
            //Verbindungsende
            transport.close();
        }
	}
}

SMTP-Endpunkte variieren je nach Region. Sie finden es in der AWS-Referenz (https://docs.aws.amazon.com/general/latest/gr/rande.html#ses_region).

abschließend

Da es ein japanisches Dokument von Amazon SES gibt, können Sie, wenn Sie dem Dokument folgen, problemlos eine E-Mail senden.

Recommended Posts

[Java] Senden Sie eine E-Mail mit Amazon SES
Senden Sie E-Mails mit Amazon SES SMTP in Java
Senden Sie E-Mails mit JavaMail unter AWS
Ich möchte eine E-Mail in Java senden.
[Spring Boot] Senden Sie eine E-Mail
[Version 2020] So senden Sie eine E-Mail mit Android Studio Javamail
Ich habe eine E-Mail in Java gesendet
So formatieren Sie Enum mit dem Formatierer-Maven-Plugin (Java)
Senden Sie E-Mails von Google Mail mit Ruby
Map ohne Verwendung eines Arrays in Java
[Java] Erstellen einer Excel-Datei mit Apache POI
Senden Sie Push-Benachrichtigungen über Notification Hubs in Java
Ich habe versucht, die erweiterte for-Anweisung in Java zu verwenden
Senden Sie eine E-Mail mit einem PDF-Anhang über JavaMail
Sortieren mit Java-Komparator
[Java] Installieren von Amazon Corretto 8
[Java] Wirf eine Ausnahme aus
Schrottpraxis mit Java ②
Schrottpraxis mit Java ①
Ich möchte Java Applet ohne Verwendung einer IDE erstellen
Ich möchte manuell eine Autorisierungs-E-Mail mit Devise senden