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

Lesedauer: 5 Minute
0

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

Kurzbeschreibung

Gehen Sie wie folgt vor, um von einer Lambda-Funktion aus E-Mails mit Amazon SES zu versenden:

1.    Erstellen Sie eine AWS Identity and Access Management (IAM) -Richtlinie und eine Ausführungsrolle für Lambda, um den API-Aufruf auszuführen.

2.    Verifizieren Sie Ihre Amazon-SES-Identität (Domain oder E-Mail-Adresse).

3.Erstellen oder aktualisieren Sie eine Lambda-Funktion, die eine Logik für das Senden von E-Mails über Amazon SES enthält.

**Hinweis:**Um Ihren E-Mails einen PDF-Anhang beizufügen, müssen Sie die API-Operation Amazon SES SendRawEmail verwenden. Weitere Informationen finden Sie unter Senden von unbearbeiteten E-Mails mithilfe der Amazon SES-API auf GitHub.

Lösung

**Hinweis:**Die Codebeispiele für die Lambda-Funktionen in Node.js, Python und Ruby in diesem Artikel müssen je nach Anwendungsfall verändert werden. Passen Sie das Beispiel für Ihren Anwendungsfall an oder entwerfen Sie eigenen Code in Ihrer bevorzugten Programmiersprache.

Erstellen einer IAM-Richtlinie und einer Ausführungsrolle zur Ausführung des API-Aufrufs für Lambda

1.    Erstellen Sie eine IAM-Richtlinie mit dem JSON-Richtlinien-Editor. Fügen Sie 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 finden Sie unter Beispiel-IAM-Richtlinien für SES.

2.    Ordnen Sie die IAM-Richtlinie einer IAM-Rolle zu. Nähere Anweisungen dazu finden Sie im Abschnitt So verwenden Sie eine verwaltete Richtlinie als Berechtigungsrichtlinie für eine Identität (Konsole) unter Hinzufügen von IAM-Identitätsberechtigungen (Konsole).

**Hinweis:**In den folgenden Schritten weisen Sie Ihrer Lambda-Funktion diese IAM-Rolle zu.

Verifizieren Sie Ihre Amazon-SES-Identität (Domain oder E-Mail-Adresse)

Informationen zur Verifizierung einer Domain finden Sie unter Verifizieren einer DKIM-Domain-Identität bei Ihrem DNS-Anbieter.

Informationen zur Verifizierung einer E-Mail-Adresse finden Sie unter Verifizieren der Identität einer E-Mail-Adresse.

Erstellen oder Aktualisieren einer Lambda-Funktion, die ein Protokoll für das Senden von E-Mails über Amazon SES enthält

1.    Erstellen Sie eine Lambda-Funktion, falls noch nicht geschehen.

**Hinweis:**Sie können eine Lambda-Funktion mithilfe der Lambda-Konsole oder durch Erstellen und Hochladen eines Bereitstellungspakets erstellen.

2.    Wählen Sie in der Lambda-Konsole im linken Navigationsbereich Funktionen aus.

3.    Wählen Sie den Namen Ihrer Funktion aus.

4.    Sehen Sie sich auf der Registerkarte Konfiguration im Bereich Berechtigungen die Ausführungsrolle der Funktion an. Stellen Sie sicher, dass die IAM-Rolle mit Amazon-SES-Berechtigungen aufgeführt ist, die Sie zuvor erstellt haben. Wenn die richtige IAM-Rolle nicht aufgeführt ist, weisen Sie der Funktion die richtige Rolle zu.

5.    Fügen Sie unter Funktionscode im Editorbereich eines der folgenden Funktionscodebeispiele ein. Verwenden Sie unbedingt das entsprechende Beispiel für Ihre Laufzeit und Version von Node.js, Python oder Ruby.

**Wichtig:**Ersetzen Sie us-west-2 durch die AWS-Region, in der sich Ihre verifizierte Amazon-SES-Identität befindet. Ersetzen Sie "RecipientEmailAddress", ... durch die E-Mail-Adresse oder -Adressen, an die Sie die E-Mail senden möchten. Ersetzen Sie SourceEmailAddress durch Ihre von Amazon SES verifizierte Absender-E-Mail-Adresse oder eine beliebige E-Mail-Adresse von einer Amazon-SES-verifizierten Domain. Bearbeiten Sie optional den Nachrichtentext ("Test") und die Betreffzeile ("Test Email").

Verwenden Sie diesen Beispielcode für Node.js ab Version 18:

// 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.
  }
};

Verwenden Sie diesen Beispielcode für Node.js bis Version 16:

// 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()
};

Verwenden Sie diesen Beispielcode für Python 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'])
    }

Verwenden Sie diesen Beispielcode für Ruby 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

Weitere Informationen zur Verwendung der sendEmail-API finden Sie in der AWS-SDK-Dokumentation für JavaScript, Python, Ruby und Java V2.

6.    Wählen Sie Bereitstellen aus.

(Optional) Senden einer Test-E-Mail

1.    Konfigurieren Sie in der Lambda-Konsole ein Testereignis für Ihre Funktion.

**Hinweis:**Die Testnutzlast ist erforderlich, wird aber für dieses Codebeispiel nicht verwendet.

2.    Wählen Sie Test aus. Lambda verwendet Amazon SES, um die Test-E-Mail an Ihren Empfänger zu senden.

Verwandte Informationen

Senden von E-Mails mit Amazon SES

Identitäts- und Zugriffsmanagement in Amazon SES

AWS OFFICIAL
AWS OFFICIALAktualisiert vor einem Jahr