Mit der Mail API E-Mails senden

Die Mail Service API für Java unterstützt die Schnittstelle JavaMail (javax.mail) zum Senden von E-Mail-Nachrichten.

Vorbereitung

Registrieren Sie die Absender-E-Mail-Adressen als autorisierte Absender. Weitere Informationen finden Sie unter Wer E-Mails senden kann.

E-Mail-Nachrichten senden

Mit den JavaMail-Klassen, die im App Engine SDK enthalten sind, können Sie E-Mail-Nachrichten versenden.

Wenn Sie eine JavaMail-Sitzung erstellen und keine SMTP-Serverkonfiguration angeben, versendet App Engine Nachrichten über den Mail-Dienst. Alternativ können Sie eine SMTP-Konfiguration für unterstützte E-Mail-Drittanbieter wie Mailgun, Mailjet oder SendGrid einrichten.

So senden Sie eine Nachricht:

  1. Erstellen Sie eine Nachricht mit einem JavaMail Session -Objekt.

  2. Erstellen Sie ein MimeMessage-Objekt.

  3. Verwenden Sie die Klasse InternetAddress, um den Absender und Empfänger der Nachricht festzulegen.

    1. Ermitteln Sie den Absender durch Aufrufen der Methode setFrom() für das Objekt MimeMessage. Optional können Sie im zweiten Parameter einen Personennamen als String angeben.

    2. Bestimmen Sie den Empfänger, indem Sie einen Empfängertyp und eine Adresse an die Methode addRecipient() übergeben. Der Empfängertyp kann sein Message.RecipientType.TO, Message.RecipientType.CC oder Message.RecipientType.BCC.

    Der InternetAddress-Konstruktor löst eine AddressException aus, wenn die E-Mail-Adresse offenbar ungültig ist.

  4. Verwenden Sie die Methode setReplyTo(), um eine Antwortadresse festzulegen.

  5. Legen Sie den Nachrichteninhalt durch Aufruf von Methoden für das Objekt MimeMessage fest. Legen Sie den Betreff mit setSubject() fest und legen Sie den Textkörper des Klartexts mit setText() fest.

  6. Verwenden Sie zum Senden der Nachricht die statische Methode send() für die Klasse Transport.

Der Mail-Dienst ermöglicht die Angabe einer begrenzten Zahl von Headern für ausgehende E-Mail-Nachrichten. Weitere Informationen dazu finden Sie unter Zulässige optionale Header.

Hier ein Codebeispiel für das Senden von E-Mail-Nachrichten:

Properties props = new Properties();
Session session = Session.getDefaultInstance(props, null);

try {
  Message msg = new MimeMessage(session);
  msg.setFrom(new InternetAddress("admin@example.com", "Example.com Admin"));
  msg.addRecipient(Message.RecipientType.TO,
                   new InternetAddress("user@example.com", "Mr. User"));
  msg.setSubject("Your Example.com account has been activated");
  msg.setText("This is a test");
  Transport.send(msg);
} catch (AddressException e) {
  // ...
} catch (MessagingException e) {
  // ...
} catch (UnsupportedEncodingException e) {
  // ...
}

Aufrufe an den Mail-Dienst erfolgen asynchron und werden sofort zurückgegeben. Der Mail-Dienst verwaltet die Kontaktaufnahme mit den Mailservern der Empfänger und die Nachrichtenlieferung. Tritt beim Senden der Nachricht an einen Empfänger ein Problem auf oder gibt der Mail-Server eines Empfängers eine "Bounce"-Nachricht zurück, wird die Fehlermeldung an den Absender gesendet.

Mehrteilige Nachrichten senden

Sie können mehrteilige Nachrichten senden, z. B. eine Nachricht mit Dateianhängen oder eine Nachricht mit unformatiertem und HTML-Nachrichtentext.

So senden Sie eine mehrteilige Nachricht:

  1. Erstellen Sie ein MimeMultipart-Objekt für die einzelnen Teile und ein MimeBodyPart-Objekt für jeden Anhang oder alternativen Nachrichtentext und fügen Sie diese dem Container hinzu.

  2. Weisen Sie den Container dem Inhalt für MimeMessage zu.

Hier ein Codebeispiel für den Versand einer mehrteiligen Nachricht:

String htmlBody = "";          // ...
byte[] attachmentData = null;  // ...
Multipart mp = new MimeMultipart();

MimeBodyPart htmlPart = new MimeBodyPart();
htmlPart.setContent(htmlBody, "text/html");
mp.addBodyPart(htmlPart);

MimeBodyPart attachment = new MimeBodyPart();
InputStream attachmentDataStream = new ByteArrayInputStream(attachmentData);
attachment.setFileName("manual.pdf");
attachment.setContent(attachmentDataStream, "application/pdf");
mp.addBodyPart(attachment);

msg.setContent(mp);

Aus Sicherheitsgründen müssen Nachrichtenteile und -anhänge einem von mehreren verschiedenen zulässigen Typen entsprechen und die Dateinamen der Anhänge müssen mit einer erkannten Dateinamenerweiterung für diesen Typ enden. Eine Liste der zulässigen Typen und Dateinamenerweiterungen finden Sie unter E-Mail mit Anhängen.