

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Programmatisches Senden einer E-Mail über die Amazon-SES-SMTP-Schnittstelle
<a name="send-using-smtp-programmatically"></a>

Um eine E-Mail über die Amazon-SES-SMTP-Schnittstelle zu versenden, können Sie eine SMTP-fähige Programmiersprache, einen Mailserver oder eine Anwendung verwenden. Bevor Sie beginnen, führen Sie die Aufgaben in [Amazon Simple Email Service einrichten](setting-up.md) durch. Außerdem benötigen Sie die folgenden zusätzlichen Informationen: 
+ Ihre SMTP-Anmeldeinformationen für Amazon SES, mit denen Sie sich mit dem SMTP-Endpunkt von Amazon SES verbinden können. Informationen zum Abrufen Ihrer SMTP-Anmeldeinformationen für Amazon SES finden Sie unter [Abrufen Ihrer Amazon-SES-SMTP-Anmeldeinformationen](smtp-credentials.md). 
**Wichtig**  
Ihre SMTP-Anmeldeinformationen unterscheiden sich von Ihren AWS Anmeldeinformationen. Weitere Informationen zu Anmeldeinformationen finden Sie unter [Arten von Amazon-SES-Anmeldeinformationen](send-email-concepts-credentials.md).
+ Die SMTP-Endpunktadresse. Eine Liste der Amazon SES-SMTP-Endpunkte finden Sie unter [Herstellen einer Verbindung mit dem Amazon-SES-SMTP-Endpunkt](smtp-connect.md).
+ Die Port-Nummer der Amazon-SES-SMTP-Schnittstelle. Diese hängt von der Verbindungsmethode ab. Weitere Informationen finden Sie unter [Herstellen einer Verbindung mit dem Amazon-SES-SMTP-Endpunkt](smtp-connect.md).

## Codebeispiele
<a name="send-email-smtp-code-examples"></a>

Sie können auf die Amazon-SES-SMTP-Schnittstelle zugreifen, indem Sie eine SMTP-fähige Programmiersprache verwenden. Sie geben den Amazon-SES-SMTP-Hostnamen und die Port-Nummer zusammen mit Ihren SMTP-Anmeldeinformationen an und verwenden dann die generischen SMTP-Funktionen der Programmiersprache, um die E-Mail zu versenden.

Amazon Elastic Compute Cloud (Amazon EC2) schränkt standardmäßig den E-Mail-Datenverkehr über Port 25. Um Zeitüberschreitungen beim Senden von E-Mails über den SMTP-Endpunkt von Amazon EC2 zu vermeiden, können Sie beantragen, dass diese Einschränkungen entfernt werden. Weitere Informationen finden Sie unter [Wie entferne ich die Beschränkung für Port 25 aus meiner Amazon EC2 EC2-Instance oder AWS Lambda -Funktion](https://aws.amazon.com/premiumsupport/knowledge-center/ec2-port-25-throttle/)? im AWS Knowledge Center.

Die Codebeispiele in diesem Abschnitt für Java und PHP verwenden Port 587, um dieses Problem zu vermeiden. 

**Anmerkung**  
In diesem Tutorial senden Sie eine E-Mail an sich selbst, um zu prüfen, ob diese bei Ihnen ankommt. Für weitere Experimente oder Lasttests nutzen Sie den Amazon SES-Postfachsimulator. E-Mails, die Sie an den Postfachsimulator senden, zählen nicht zu Ihrer Sendequote oder Ihre Unzustellbarkeits- und Beschwerderate. Weitere Informationen finden Sie unter [Manuelles Verwenden des Postfachsimulators](send-an-email-from-console.md#send-email-simulator).

**Wählen Sie eine Programmiersprache aus, um das Beispiel für diese Sprache anzuzeigen:**

**Warnung**  
Amazon SES empfiehlt nicht, statische Anmeldeinformationen zu verwenden. Unter erfahren [AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html)Sie, wie Sie Ihre Sicherheitslage verbessern können, indem Sie hartcodierte Anmeldeinformationen aus Ihrem Quellcode entfernen. Dieses Tutorial dient nur dazu, die Amazon SES SMTP-Schnittstelle in einer Nicht-Produktionsumgebung zu testen.

------
#### [ Java ]

In diesem Beispiel werden die [Eclipse-IDE](http://www.eclipse.org/) und die [JavaMail API](https://github.com/javaee/javamail/releases) verwendet, um E-Mails über Amazon SES mithilfe der SMTP-Schnittstelle zu senden.

Führen Sie erst die unter [Amazon Simple Email Service einrichten](setting-up.md) beschriebenen Aufgaben aus, bevor Sie mit dem folgenden Verfahren beginnen.

**So senden Sie eine E-Mail über die Amazon-SES-SMTP-Schnittstelle mit C\$1**

1. Rufen Sie die [JavaMail GitHub Seite in einem Webbrowser auf.](https://github.com/javaee/javamail/releases) Wählen Sie unter **Assets** die Option **javax.mail.jar aus, um die neueste Version** von herunterzuladen. JavaMail
**Wichtig**  
Für dieses Tutorial ist Version 1.5 oder höher erforderlich JavaMail . Diese Verfahren wurden mit JavaMail Version 1.6.1 getestet.

1. **Rufen Sie in einem Webbrowser die [ GitHub Jakarta-Aktivierungsseite](https://github.com/eclipse-ee4j/jaf/releases) auf und laden Sie unter JavaBeans Activation [Framework 1.2.1 Final Release](https://github.com/eclipse-ee4j/jaf/releases/tag/1.2.1) die Datei jakarta.activation.jar herunter**

1. Erstellen Sie ein Projekt in Eclipse, indem Sie die folgenden Schritte ausführen:

   1. Starten Sie Eclipse.

   1. Wählen Sie in Eclipse die Optionen **File** (Datei), **New** (Neu) und dann **Java Project** (Java–Projekt) aus.

   1. Geben Sie im Dialogfeld **Create a Java Project** (Ein Java-Projekt erstellen) einen Projektnamen ein und klicken Sie auf **Next** (Weiter).

   1. Wählen Sie im Dialogfeld **Java Settings** (Java-Einstellungen) die Registerkarte **Libraries** (Bibliotheken) aus.

   1. ******Wählen Sie **Classpath** aus und fügen Sie die beiden externen JAR-Dateien javax.mail.jar und jakarta.activation.jar hinzu, indem Sie auf die Schaltfläche External hinzufügen klicken. JARs******

   1. **Wählen** Sie Extern JARs hinzufügen.

   1. Navigieren Sie zu dem Ordner, in den Sie die Datei heruntergeladen haben JavaMail. Wählen Sie die Datei `javax.mail.jar` und dann **Open** (Öffnen) aus.

   1. Klicken Sie im Dialogfeld **Java Settings** (Java-Einstellungen) auf **Finish** (Abschließen).

1. Erweitern Sie im Eclipse-Fenster **Package Explorer** (Paket-Explorer) das Projekt.

1. Klicken Sie unter Ihrem Projekt mit der rechten Maustaste auf das Verzeichnis **src** und wählen Sie **New** (Neu) und dann **Class** (Klasse) aus.

1. Geben Sie im Dialogfeld **New Java Class** (Neue Java-Klasse) im Feld **Name** die Zeichenfolge `AmazonSESSample` ein und klicken Sie auf **Finish** (Abschließen).

1. Ersetzen Sie den gesamten Inhalt von **Amazon SESSample .java** durch den folgenden Code:

   ```
     1. import java.util.Properties;
     2. 
     3. import javax.mail.Message;
     4. import javax.mail.Session;
     5. import javax.mail.Transport;
     6. import javax.mail.internet.InternetAddress;
     7. import javax.mail.internet.MimeMessage;
     8. 
     9. public class AmazonSESSample {
    10. 
    11.     // Replace sender@example.com with your "From" address.
    12.     // This address must be verified.
    13.     static final String FROM = "sender@example.com";
    14.     static final String FROMNAME = "Sender Name";
    15.     
    16.     // Replace recipient@example.com with a "To" address. If your account 
    17.     // is still in the sandbox, this address must be verified.
    18.     static final String TO = "recipient@example.com";
    19.     
    20.     // Replace smtp_username with your Amazon SES SMTP user name.
    21.     static final String SMTP_USERNAME = "smtp_username";
    22.       
    23.     // The name of the Configuration Set to use for this message.
    24.     // If you comment out or remove this variable, you will also need to
    25.     // comment out or remove the header below.
    26.     static final String CONFIGSET = "ConfigSet";
    27.     
    28.     // Amazon SES SMTP host name. This example uses the US West (Oregon) region.
    29.     // See https://docs.aws.amazon.com/ses/latest/DeveloperGuide/regions.html#region-endpoints
    30.     // for more information.
    31.     static final String HOST = "email-smtp.us-west-2.amazonaws.com";
    32.     
    33.     // The port you will connect to on the Amazon SES SMTP endpoint. 
    34.     static final int PORT = 587;
    35.     
    36.     static final String SUBJECT = "Amazon SES test (SMTP interface accessed using Java)";
    37.     
    38.     static final String BODY = String.join(
    39.             System.getProperty("line.separator"),
    40.             "<h1>Amazon SES SMTP Email Test</h1>",
    41.             "<p>This email was sent with Amazon SES using the ", 
    42.             "<a href='https://github.com/javaee/javamail'>Javamail Package</a>",
    43.             " for <a href='https://www.java.com'>Java</a>."
    44.         );
    45. 
    46.     public static void main(String[] args) throws Exception {
    47. 
    48.         // Create a Properties object to contain connection configuration information.
    49.         Properties props = System.getProperties();
    50.         props.put("mail.transport.protocol", "smtp");
    51.         props.put("mail.smtp.port", PORT); 
    52.         props.put("mail.smtp.starttls.enable", "true");
    53.         props.put("mail.smtp.auth", "true");
    54. 
    55.         // Create a Session object to represent a mail session with the specified properties. 
    56.         Session session = Session.getDefaultInstance(props);
    57. 
    58.         // Create a message with the specified information. 
    59.         MimeMessage msg = new MimeMessage(session);
    60.         msg.setFrom(new InternetAddress(FROM,FROMNAME));
    61.         msg.setRecipient(Message.RecipientType.TO, new InternetAddress(TO));
    62.         msg.setSubject(SUBJECT);
    63.         msg.setContent(BODY,"text/html");
    64.         
    65.         // Add a configuration set header. Comment or delete the 
    66.         // next line if you are not using a configuration set
    67.         msg.setHeader("X-SES-CONFIGURATION-SET", CONFIGSET);
    68.             
    69.         // Create a transport.
    70.         Transport transport = session.getTransport();
    71. 
    72.         // Get the password 
    73.         String SMTP_PASSWORD = fetchSMTPPasswordFromSecureStorage();
    74.                     
    75.         // Send the message.
    76.         try
    77.         {
    78.             System.out.println("Sending...");
    79.             
    80.             // Connect to Amazon SES using the SMTP username and password you specified above.
    81.             transport.connect(HOST, SMTP_USERNAME, SMTP_PASSWORD);
    82.             
    83.             // Send the email.
    84.             transport.sendMessage(msg, msg.getAllRecipients());
    85.             System.out.println("Email sent!");
    86.         }
    87.         catch (Exception ex) {
    88.             System.out.println("The email was not sent.");
    89.             System.out.println("Error message: " + ex.getMessage());
    90.         }
    91.         finally
    92.         {
    93.             // Close and terminate the connection.
    94.             transport.close();
    95.         }
    96.     }
    97. 
    98.     static String fetchSMTPPasswordFromSecureStorage() {
    99.         /* IMPLEMENT THIS METHOD */
   100.         // For example, you might fetch it from a secure location or AWS Secrets Manager: https://aws.amazon.com/secrets-manager/
   101.     }
   102. }
   ```

1. Ersetzen Sie in **Amazon SESSample .java** die folgenden E-Mail-Adressen durch Ihre eigenen Werte:
**Wichtig**  
Bei den E-Mail-Adressen ist die Groß-/Kleinschreibung nicht relevant. Vergewissern Sie sich, dass die Adressen exakt mit denen übereinstimmen, die Sie verifiziert haben.
   + *sender@example.com*— Ersetzen Sie es durch Ihre „Von“ -E-Mail-Adresse. Sie müssen diese Adresse verifizieren, bevor Sie das Programm ausführen. Weitere Informationen finden Sie unter [Verifizierte Identitäten in Amazon SES](verify-addresses-and-domains.md).
   + *recipient@example.com*— Ersetze es durch deine „An“ -E-Mail-Adresse. Wenn sich Ihr Konto noch in der Sandbox befindet, müssen Sie diese Adresse verifizieren, bevor Sie sie verwenden. Weitere Informationen finden Sie unter [Produktionszugriff anfordern (Verlassen der Amazon SES SES-Sandbox)](request-production-access.md).

1. Ersetzen Sie in **Amazon SESSample .java** Folgendes durch Ihre eigenen Werte:
   + *smtp\$1username*— Ersetzen Sie es durch Ihre SMTP-Benutzernamen-Anmeldedaten. Beachten Sie, dass der SMTP-Benutzername eine 20-stellige Zeichenfolge aus Buchstaben und Zahlen ist und kein wirklicher Name.
   + *smtp\$1password*— Implementieren``fetchSMTPPasswordFromSecureStorage``, um das Passwort abzurufen.

1. (Optional) Wenn Sie einen Amazon SES SMTP-Endpunkt in einem AWS-Region anderen als verwenden möchten*email-smtp.us-west-2.amazonaws.com*, ändern Sie den Wert der Variablen `HOST` auf den Endpunkt, den Sie verwenden möchten. Eine Liste der Regionen, in denen Amazon SES verfügbar ist, finden Sie unter [Amazon Simple Email Service (Amazon SES)](https://docs.aws.amazon.com/general/latest/gr/rande.html#ses_region) in der *Allgemeine AWS-Referenz*.

1. (Optional) Wenn Sie beim Senden dieser E-Mail einen Konfigurationssatz senden möchten, ändern Sie den Wert der Variable *ConfigSet* in den Namen des Konfigurationssatzes. Weitere Informationen zu Konfigurationssätzen finden Sie unter [Verwenden von Amazon SES-Konfigurationssätzen im](using-configuration-sets.md).

1. Speichern Sie **Amazon SESSample .java.**

1. Wählen Sie **Project** (Projekt) und dann **Build Project** (Projekt entwickeln) aus. (Falls diese Option deaktiviert ist, kann die automatische Erstellung aktiviert sein.)

1. Wählen Sie **Run** (Ausführen) und dann erneut **Run** (Ausführen) aus, um das Programm zu starten und die E-Mail zu senden.

1. Überprüfen Sie die Ausgabe. Wenn die E-Mail erfolgreich gesendet wurde, zeigt die Konsole *„E-Mail gesendet\$1*“ Andernfalls wird eine Fehlermeldung angezeigt.

1. Melden Sie sich am E-Mail-Client der Empfängeradresse an. Sie finden die Nachricht, die Sie gesendet haben.

------
#### [ PHP  ]

In diesem Beispiel wird die PHPMailer Klasse verwendet, um E-Mails über Amazon SES mithilfe der SMTP-Schnittstelle zu senden. 

Bevor Sie das folgende Verfahren ausführen, müssen Sie den Vorgang in [Amazon Simple Email Service einrichten](setting-up.md) abschließen. Zusätzlich zur Einrichtung von Amazon SES müssen Sie die folgenden Voraussetzungen für das Senden von E-Mails mit PHP erfüllen:

**Voraussetzungen:**
+ **PHP installieren** — PHP ist unter [http://php.net/downloads.php](https://php.net/downloads.php) verfügbar. Fügen Sie nach der Installation von PHP Ihren Umgebungsvariablen den Pfad zu PHP hinzu, damit Sie PHP von jeder Eingabeaufforderung aus ausführen können.
+ **Installieren Sie den Composer-Abhängigkeitsmanager** — Nachdem Sie den Composer-Abhängigkeitsmanager installiert haben, können Sie die PHPMailer Klasse und ihre Abhängigkeiten herunterladen und installieren. Folgen Sie den Installationsanweisungen unter [https://getcomposer.org/download, um Composer](https://getcomposer.org/download) zu installieren.
+ ** PHPMailer Klasse installieren — Führen Sie nach der** Installation von Composer den folgenden Befehl aus, um die Klasse zu installieren: PHPMailer 

  ```
  path/to/composer require phpmailer/phpmailer
  ```

  Ersetzen Sie den Befehl im vorherigen Befehl *path/to/* durch den Pfad, in dem Sie Composer installiert haben.

**So senden Sie eine E-Mail über die Amazon-SES-SMTP-Schnittstelle mit PHP**

1. Erstellen Sie eine Datei mit dem Namen **amazon-ses-smtp-sample.php.** Öffnen Sie die Datei mit einem Texteditor und fügen Sie folgenden Code ein:

   ```
    1. <?php
    2. 
    3. // Import PHPMailer classes into the global namespace
    4. // These must be at the top of your script, not inside a function
    5. use PHPMailer\PHPMailer\PHPMailer;
    6. use PHPMailer\PHPMailer\Exception;
    7. 
    8. // If necessary, modify the path in the require statement below to refer to the
    9. // location of your Composer autoload.php file.
   10. require 'vendor/autoload.php';
   11. 
   12. // Replace sender@example.com with your "From" address.
   13. // This address must be verified with Amazon SES.
   14. $sender = 'sender@example.com';
   15. $senderName = 'Sender Name';
   16. 
   17. // Replace recipient@example.com with a "To" address. If your account
   18. // is still in the sandbox, this address must be verified.
   19. $recipient = 'recipient@example.com';
   20. 
   21. // Replace smtp_username with your Amazon SES SMTP user name.
   22. $usernameSmtp = 'smtp_username';
   23. 
   24. // Specify a configuration set. If you do not want to use a configuration
   25. // set, comment or remove the next line.
   26. $configurationSet = 'ConfigSet';
   27. 
   28. // If you're using Amazon SES in a region other than US West (Oregon),
   29. // replace email-smtp.us-west-2.amazonaws.com with the Amazon SES SMTP
   30. // endpoint in the appropriate region.
   31. $host = 'email-smtp.us-west-2.amazonaws.com';
   32. $port = 587;
   33. 
   34. // The subject line of the email
   35. $subject = 'Amazon SES test (SMTP interface accessed using PHP)';
   36. 
   37. // The plain-text body of the email
   38. $bodyText =  "Email Test\r\nThis email was sent through the
   39.     Amazon SES SMTP interface using the PHPMailer class.";
   40. 
   41. // The HTML-formatted body of the email
   42. $bodyHtml = '<h1>Email Test</h1>
   43.     <p>This email was sent through the
   44.     <a href="https://aws.amazon.com/ses">Amazon SES</a> SMTP
   45.     interface using the <a href="https://github.com/PHPMailer/PHPMailer">
   46.     PHPMailer</a> class.</p>';
   47. 
   48. $mail = new PHPMailer(true);
   49. 
   50. try {
   51.     // Specify the SMTP settings.
   52.     $mail->isSMTP();
   53.     $mail->setFrom($sender, $senderName);
   54.     $mail->Username   = $usernameSmtp;
   55.     $mail->Password   = fetchSMTPPasswordFromSecureStorage();
   56.     $mail->Host       = $host;
   57.     $mail->Port       = $port;
   58.     $mail->SMTPAuth   = true;
   59.     $mail->SMTPSecure = 'tls';
   60.     $mail->addCustomHeader('X-SES-CONFIGURATION-SET', $configurationSet);
   61. 
   62.     // Specify the message recipients.
   63.     $mail->addAddress($recipient);
   64.     // You can also add CC, BCC, and additional To recipients here.
   65. 
   66.     // Specify the content of the message.
   67.     $mail->isHTML(true);
   68.     $mail->Subject    = $subject;
   69.     $mail->Body       = $bodyHtml;
   70.     $mail->AltBody    = $bodyText;
   71.     $mail->Send();
   72.     echo "Email sent!" , PHP_EOL;
   73. } catch (phpmailerException $e) {
   74.     echo "An error occurred. {$e->errorMessage()}", PHP_EOL; //Catch errors from PHPMailer.
   75. } catch (Exception $e) {
   76.     echo "Email not sent. {$mail->ErrorInfo}", PHP_EOL; //Catch errors from Amazon SES.
   77. }
   78. function fetchSMTPPasswordFromSecureStorage() {
   79. /* IMPLEMENT THIS METHOD */
   80. // For example, you might fetch it from a secure location or AWS Secrets Manager: https://aws.amazon.com/secrets-manager/
   81. }
   82. 
   83. ?>
   ```

1. Ersetzen Sie in **amazon-ses-smtp-sample.php** Folgendes durch Ihre eigenen Werte:
   + *sender@example.com*— Ersetzen Sie durch eine E-Mail-Adresse, die Sie bei Amazon SES verifiziert haben. Weitere Informationen finden Sie unter [Verifizierte Identitäten](verify-addresses-and-domains.md). Bei den E-Mail-Adressen in Amazon SES wird die Groß-/Kleinschreibung beachtet. Stellen Sie sicher, dass die von Ihnen eingegebene Adresse exakt mit der verifizierten Adresse übereinstimmt.
   + *recipient@example.com*— Durch die Adresse des Empfängers ersetzen. Wenn sich Ihr Konto noch in der Sandbox befindet, müssen Sie diese Adresse verifizieren, bevor Sie sie verwenden. Weitere Informationen finden Sie unter [Produktionszugriff anfordern (Verlassen der Amazon SES SES-Sandbox)](request-production-access.md). Stellen Sie sicher, dass die von Ihnen eingegebene Adresse exakt mit der verifizierten Adresse übereinstimmt.
   + *smtp\$1username*— Ersetzen Sie es durch Ihre SMTP-Benutzernamen-Anmeldedaten, die Sie auf der Seite mit den [SMTP-Einstellungen](https://console.aws.amazon.com/ses/home?#smtp-settings:) der Amazon SES SES-Konsole abgerufen haben. Dieser Benutzername ist **nicht** mit Ihrer AWS -Zugriffsschlüssel-ID identisch. Beachten Sie, dass der SMTP-Benutzername eine 20-stellige Zeichenfolge aus Buchstaben und Zahlen ist und kein wirklicher Name.
   + *smtp\$1password*— Implementieren``fetchSMTPPasswordFromSecureStorage``, um das Passwort abzurufen.
   + (Optional) *ConfigSet* — Wenn Sie beim Senden dieser E-Mail einen Konfigurationssatz verwenden möchten, ersetzen Sie diesen Wert durch den Namen des Konfigurationssatzes. Weitere Informationen zu Konfigurationssätzen finden Sie unter [Verwenden von Amazon SES-Konfigurationssätzen im](using-configuration-sets.md).
   + (Optional) *email-smtp.us-west-2.amazonaws.com* — Wenn Sie einen Amazon SES SES-SMTP-Endpunkt in einer anderen Region als USA West (Oregon) verwenden möchten, ersetzen Sie diesen durch den Amazon SES SES-SMTP-Endpunkt in der Region, die Sie verwenden möchten. Eine Liste der SMTP-Endpunkte URLs , auf AWS-Regionen denen Amazon SES verfügbar ist, finden Sie unter [Amazon Simple Email Service (Amazon SES)](https://docs.aws.amazon.com/general/latest/gr/rande.html#ses_region) in der *Allgemeine AWS-Referenz*.

1. Speichern Sie die Datei **amazon-ses-smtp-sample.php.**

1. Um das Programm auszuführen, öffnen Sie eine Eingabeaufforderung im selben Verzeichnis wie **amazon-ses-smtp-sample.php** und geben Sie dann Folgendes ein. **php amazon-ses-smtp-sample.php**

1. Überprüfen Sie die Ausgabe. Wenn die E-Mail erfolgreich gesendet wurde, zeigt die Konsole *„E-Mail gesendet\$1*“ an Andernfalls wird eine Fehlermeldung angezeigt.

1. Melden Sie sich am E-Mail-Client der Empfängeradresse an. Sie finden die Nachricht, die Sie gesendet haben.

------