Skip to content

Wie verwende ich Lambda und Amazon SES zum Senden von E-Mails?

Lesedauer: 5 Minute
0

Ich möchte AWS Lambda verwenden, um eine E-Mail mit Amazon Simple Email Service (Amazon SES) zu senden.

Kurzbeschreibung

Gehe wie folgt vor, um Lambda und Amazon SES zum Senden von E-Mails zu verwenden:

  1. Erstelle eine AWS Identity and Access Management (IAM)-Richtlinie und eine Rolle für Lambda, um den API-Aufruf auszuführen.
  2. Verifiziere die Amazon-SES-Identität (Domain oder E-Mail-Adresse).
  3. Erstelle oder aktualisiere eine Lambda-Funktion, die eine Logik enthält, um E-Mails über Amazon SES zu senden.

**Hinweis:**Um den E-Mails einen PDF-Anhang beizufügen, musst du die API Amazon SES SendRawEmail verwenden.

Lösung

Eine IAM-Richtlinie erstellen und sie einer Rolle zur Ausführung des API-Aufrufs für Lambda anhängen

Führe die folgenden Schritte aus:

  1. Öffne die IAM-Konsole.

  2. Verwende den JSON-Richtlinieneditor, um eine IAM-Richtlinie zu erstellen. Füge beim Erstellen der Richtlinie das folgende JSON-Richtliniendokument in den Richtlinien-Editor ein:

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "ses:SendEmail",
                    "ses:SendRawEmail"
                ],
                "Resource": "*"
            }
        ]
    }
    

    Hinweis: Weitere Informationen und Beispiele zur Einschränkung des Zugriffs auf diese Richtlinie findest du unter Beispiel-IAM-Richtlinien für SES.

  3. Ordne die IAM-Richtlinie einer IAM-Rolle zu.

Die Amazon SES-Identität bestätigen

Informationen zur Verifizierung einer Domain findest du unter Verifizieren einer DKIM-Domain-Identität beim DNS-Anbieter.

Informationen zur Verifizierung einer E-Mail-Adresse findest du unter Verifizieren der Identität einer E-Mail-Adresse.

Eine Lambda-Funktion, die Logik zum Senden von E-Mails enthält, erstellen und aktualisieren

Ersetze in den folgenden Beispielen für Lambda-Funktionscodes Node.js, Python und Ruby bei Bedarf diese Variablen durch deine Umgebung:

  • us-west-2 durch die AWS-Region, in der sich die verifizierte Amazon-SES-Identität befindet.
  • "RecipientEmailAddress", ... durch die E-Mail-Adresse oder -Adressen, an die du die E-Mail senden möchtest.
  • SourceEmailAddress durch die von Amazon SES verifizierte Absender-E-Mail-Adresse oder eine beliebige E-Mail-Adresse von einer Amazon-SES-verifizierten Domain. Bearbeite optional den Nachrichtentext („Test“) und die Betreffzeile („Test Email“).

Hinweis: Du kannst auch den eigenen Lambda-Funktionscode in den bevorzugten unterstützten Laufzeiten entwerfen.

Führe die folgenden Schritte aus:

  1. Öffne die Lambda-Konsole und wähle Funktionen.

  2. Erstelle eine Lambda-Funktion, falls noch nicht geschehen.
    Hinweis: Du kannst entweder die Lambda-Konsole verwenden oder ein Bereitstellungspaket erstellen und hochladen.

  3. Wähle den Namen der Funktion und wähle dann die Registerkarte Konfiguration.

  4. Überprüfe im Bereich Berechtigungen die Ausführungsrolle der Funktion.

  5. Stelle sicher, dass die IAM-Rolle mit Amazon-SES-Berechtigungen aufgeführt ist, die du zuvor erstellt hast. Wenn die richtige IAM-Rolle nicht aufgeführt ist, weise der Funktion die richtige Rolle zu.

  6. Wähle die Registerkarte Code. Füge im integrierten Code-Editor eines der folgenden Funktionscodebeispiele ein. 
    Beispielcode für Node.js der Version 18 und höher:

    // Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.
    // SPDX-License-Identifier: Apache-2.0
    
    import { SESClient, SendEmailCommand } from "@aws-sdk/client-ses";
    const ses = new SESClient({ region: "us-west-2" });
    
    export const handler = async(event) => {
      const command = new SendEmailCommand({
        Destination: {
          ToAddresses: ["RecipientEmailAddress", ...],
        },
        Message: {
          Body: {
            Text: { Data: "Test" },
          },
    
          Subject: { Data: "Test Email" },
        },
        Source: "SourceEmailAddress",
      });
    
      try {
        let response = await ses.send(command);
        // process data.
        return response;
      }
      catch (error) {
        // error handling.
      }
      finally {
        // finally.
      }
    };

    Beispielcode für Node.js der Version 16 und früher:

     // Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.
    // SPDX-License-Identifier: Apache-2.0
    
    var aws = require("aws-sdk");
    var ses = new aws.SES({ region: "us-west-2" });
    exports.handler = async function (event) {
      var params = {
        Destination: {
          ToAddresses: ["RecipientEmailAddress", ...],
        },
        Message: {
          Body: {
            Text: { Data: "Test" },
          },
    
          Subject: { Data: "Test Email" },
        },
        Source: "SourceEmailAddress",
      };
    
      return ses.sendEmail(params).promise()
    };

    Beispielcode für Python der Version 3.9: 

    import json
    import boto3
    
    client = boto3.client('ses', region_name='us-west-2')
    
    def lambda_handler(event, context):
    
        response = client.send_email(
        Destination={
            'ToAddresses': ['RecipientEmailAddress']
        },
        Message={
            'Body': {
                'Text': {
                    'Charset': 'UTF-8',
                    'Data': 'This is the message body in text format.',
                }
            },
            'Subject': {
                'Charset': 'UTF-8',
                'Data': 'Test email',
            },
        },
        Source='SourceEmailAddress'
        )
    
        print(response)
    
        return {
            'statusCode': 200,
            'body': json.dumps("Email Sent Successfully. MessageId is: " + response['MessageId'])
        }

    Beispielcode für Ruby der Version 2.7:

    require "aws-sdk-ses"
    
    $ses = Aws::SES::Client.new(region: "us-west-2")
    
    def lambda_handler(event:, context:)
    
      resp = $ses.send_email({
      destination: {
        to_addresses: ["RecipientEmailAddress"],
      },
      message: {
        body: {
          text: {
            charset: "UTF-8",
            data: "This is the message body in text format.",
          },
        },
        subject: {
          charset: "UTF-8",
          data: "Test email",
        },
      },
      source: "SourceEmailAddress"
    })
        { statusCode: 200, body: JSON.generate("Message Sent Successfully. #{resp.to_h} ") }
    end
  7. Wähle Bereitstellen.

(Optional) Senden einer Test-E-Mail

Führe die folgenden Schritte aus:

  1. Öffne die Lambda-Konsole und wähle dann die Funktionen.
  2. Konfiguriere ein Testereignis für die Funktion.
    Hinweis: Die Testnutzdaten sind erforderlich, werden aber für dieses Codebeispiel nicht verwendet.
  3. Wähle Testen. Lambda verwendet Amazon SES, um die Test-E-Mail an den Empfänger zu senden.

Verwandte Informationen

Senden von E-Mails mit Amazon SES

Identitäts- und Zugriffsmanagement in Amazon SES