

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.

# Aufrufen einer Lambda-Funktion
<a name="receiving-email-action-lambda"></a>

Die Lambda-Aktion ruft Ihren Code über eine Lambda-Funktion auf und benachrichtigt Sie optional über Amazon SNS. Diese Aktion umfasst die folgenden Optionen und Anforderungen.

**Optionen**
+ **Lambda-Funktion – **ARN der Lambda-Funktion. Ein Beispiel für einen Lambda-Funktions-ARN ist *arn:aws:lambda:us-east-1:account-id:function*:. MyFunction
+ **Invocation type** – Der Aufruftyp der Lambda-Funktion. Ein Aufruftyp von bedeutet, dass die Ausführung der Funktion zu einer sofortigen Antwort führt. **RequestResponse** Eine Aufruftyp **Event** (Ereignis) bedeutet, dass die Funktion asynchron aufgerufen wird. Wir empfehlen, den Aufruftyp **Event** (Ereignis) zu verwenden, es sei denn, für Ihren Anwendungsfall ist die synchrone Ausführung notwendig.

  Für den Aufruf von **RequestResponse** gibt es eine Zeitverzögerung von 30 Sekunden.

  Weitere Informationen finden Sie unter [Aufrufen von Lambda mit Step Functions](https://docs.aws.amazon.com/lambda/latest/dg/lambda-invocation.html) im *AWS Lambda -Entwicklerhandbuch*.
+ **SNS-Thema** – Der Name oder ARN des Amazon-SNS-Themas, das benachrichtigt werden soll, wenn die angegebene Lambda-Funktion ausgelöst wird. Ein Beispiel für einen Amazon SNS SNS-Themen-ARN ist *arn:aws:sns:us-east* - 1:123456789012:. MyTopic Weitere Informationen finden Sie unter [Amazon SNS-Thema anlegen](https://docs.aws.amazon.com/sns/latest/dg/CreateTopic.html) im *Amazon Simple Notification Service-Entwicklerhandbuch*.

**Voraussetzungen**
+ Die Lambda-Funktion, die Sie auswählen, muss sich in derselben AWS Region befinden wie der Amazon SES SES-Endpunkt, den Sie für den Empfang von E-Mails verwenden.
+ Das von Ihnen Amazon SNS SNS-Thema muss sich in derselben AWS Region befinden wie der Amazon SES SES-Endpunkt, den Sie für den E-Mail-Empfang verwenden.

## Schreiben Ihrer Lambda-Funktion
<a name="receiving-email-action-lambda-function"></a>

Zum Verarbeiten Ihrer E-Mail kann Ihre Lambda-Funktion asynchron aufgerufen werden (d. h. mit dem `Event`-Aufruftyp). Das an Ihre Lambda-Funktion übergebene "Event"-Objekt enthält Metadaten zum eingehenden E-Mail-Ereignis. Sie können auch die Metadaten für den Zugriff auf den Nachrichteninhalt aus Ihrem Amazon-S3-Bucket verwenden.

Wenn Sie den Nachrichtenfluss wirklich kontrollieren möchten, muss Ihre Lambda-Funktion synchron aufgerufen werden (d. h. mit dem `RequestResponse`-Aufruftyp) und Ihre Lambda-Funktion muss die `callback` Methode mit zwei Argumenten aufrufen: Das erste Argument lautet `null` und das zweite ist eine `disposition`-Eigenschaft, die auf `STOP_RULE`, `STOP_RULE_SET` oder `CONTINUE` eingestellt ist. Wenn das zweite Argument `null` ist oder keine gültige `disposition`-Eigenschaft besitzt, wird der Nachrichtenfluss fortgesetzt und weitere Aktionen und Regeln werden verarbeitet. Dies entspricht dem Ablauf von `CONTINUE`.

Sie können beispielsweise den Empfangsregelsatz stoppen, indem Sie die folgende Zeile an das Ende des Lambda-Funktionscodes setzen:

```
callback( null, { "disposition" : "STOP_RULE_SET" });
```

 AWS Lambda Codebeispiele finden Sie unter[Beispiele für Lambda-Funktionen](receiving-email-action-lambda-example-functions.md). Beispiele für allgemeine Anwendungsfälle finden Sie unter [Beispielanwendungsfälle](receiving-email-action-lambda-example-use-cases.md).

### Eingabeformat
<a name="receiving-email-action-lambda-input"></a>

Amazon SES übergibt Informationen an die Lambda Funktion im JSON-Format. Das Objekt auf oberster Ebene enthält ein `Records`-Array, das mit Eigenschaften `eventSource`, `eventVersion` und `ses` gefüllt ist. Das `ses`-Objekt enthält `receipt`- und `mail`-Objekte, die das gleiche Format wie die in [Benachrichtigungsinhalte](receiving-email-notifications-contents.md) beschriebenen Amazon-SNS-Benachrichtigungen aufweisen.

Die Daten, die Amazon SES an Lambda übergibt, enthalten Metadaten zur Nachricht sowie mehrere E-Mail-Header. Sie enthalten jedoch nicht den Text der Nachricht.

Im Folgenden finden Sie eine allgemeine Übersicht über die Struktur der Eingabe, die Amazon SES für die Lambda-Funktion bereitstellt.

```
{
   "Records": [
      {
        "eventSource": "aws:ses",
        "eventVersion": "1.0",
        "ses": {
           "receipt": {
               <same contents as SNS notification>
            },
           "mail": {
               <same contents as SNS notification>
           }
         }
     }
   ]
}
```

### Rückgabewerte
<a name="receiving-email-action-lambda-function-return-values"></a>

Ihre Lambda-Funktion kann den Nachrichtenfluss kontrollieren, indem einer der folgenden Werte zurückgegeben wird:
+ `STOP_RULE` – Es werden keine weiteren Aktionen in der aktuellen Empfangsregel, jedoch weitere Empfangsregeln verarbeitet.
+ `STOP_RULE_SET` – Es werden keine weiteren Aktionen oder Empfangsregeln verarbeitet.
+ `CONTINUE` oder ein anderer ungültiger Wert – Das bedeutet, dass weitere Aktionen und Empfangsregeln verarbeitet werden können.

**Topics**
+ [Schreiben Ihrer Lambda-Funktion](#receiving-email-action-lambda-function)
+ [Beispiel für ein Ereignis einer eingehenden E-Mail](receiving-email-action-lambda-event.md)
+ [Beispielanwendungsfälle](receiving-email-action-lambda-example-use-cases.md)
+ [Beispiele für Lambda-Funktionen](receiving-email-action-lambda-example-functions.md)

# Beispiel für ein Ereignis einer eingehenden E-Mail
<a name="receiving-email-action-lambda-event"></a>

Es gibt zwei Möglichkeiten, eingehende E-Mail-Ereignisse an eine Lambda-Funktion zu senden. Die erste Methode besteht darin, eine Lambda-Aktion in Ihrer Empfangsregel zu verwenden, um den Ereignisdatensatz direkt an die Funktion zu senden. Die zweite Methode besteht darin, eine Amazon-SNS-Aktion in Ihrer Empfangsregel zu verwenden, um die Ereignisdatensätze an Amazon SNS zu senden, und dann die Lambda-Funktion als abonnierenden Endpunkt für das Amazon-SNS-Thema hinzuzufügen.

Dieser Abschnitt enthält Beispiele für die Ereignisdatensätze, die Amazon SES an Lambda senden kann. Sie können diese Beispiele verwenden, um Lambda-Funktionen zu erstellen und zu testen.

**Anmerkung**  
Die Beispiele in diesem Abschnitt enthalten Zeilenumbrüche, um sie leichter lesbar zu machen. Wenn Sie die Beispiele in diesem Abschnitt kopieren, sollten Sie die zusätzlichen Zeilenumbrüche entfernen, um gültige JSON-Objekte zu erzeugen.

## Von der Lambda-Aktion bereitgestellte Ereignisdatensätze
<a name="receiving-email-action-lambda-event-lambdaaction"></a>

Wenn Sie einer Empfangsregel eine Lambda-Aktion hinzufügen, sendet Amazon SES bei jedem Empfang einer eingehenden Nachricht einen Ereignisdatensatz an Lambda. Dieses Ereignis enthält Informationen zu mehreren der E-Mail-Header für die eingehende Nachricht sowie die Ergebnisse mehrerer Tests, die Amazon SES für eingehende Nachrichten durchführt. Es wird jedoch der Text der eingehenden E-Mail weggelassen.

Das folgende Beispiel zeigt die Werte, die diese Ereignisdatensätze in der Regel enthalten.

```
{
  "Records": [{
    "eventSource": "aws:ses",
    "eventVersion": "1.0",
    "ses": {
      "mail": {
        "timestamp": "2019-08-05T21:30:02.028Z",
        "source": "prvs=144d0cba7=sender@example.com",
        "messageId": "EXAMPLE7c191be45-e9aedb9a-02f9-4d12-a87d-dd0099a07f8a-000000",
        "destination": ["recipient@example.com"],
        "headersTruncated": false,
        "headers": [{
          "name": "Return-Path",
          "value": "<prvs=144d0cba7=sender@example.com>"
        }, {
          "name": "Received",
          "value": "from smtp.example.com [203.0.113.0]) by inbound-smtp.us-east-1.amazonaws.com 
                    with SMTP id bsvpsoklfhu7u50iur7h0kk9a2ou0r7iexample for recipient@example.com;
                    Mon, 05 Aug 2019 21:30:02 +0000 (UTC)"
        }, {
          "name": "X-SES-Spam-Verdict",
          "value": "PASS"
        }, {
          "name": "X-SES-Virus-Verdict",
          "value": "PASS"
        }, {
          "name": "Received-SPF",
          "value": "pass (spfCheck: domain of example.com designates 203.0.113.0 as permitted sender) 
                    client-ip=203.0.113.0; envelope-from=prvs=144d0cba42=sender@example.com; helo=
                    smtp.example.com;"
        }, {
          "name": "Authentication-Results",
          "value": "amazonses.com; spf=pass (spfCheck: domain of example.com designates 203.0.113.0
                    as permitted sender) client-ip=203.0.113.0; envelope-from=prvs=144d0cba42=
                    sender@example.com; helo=smtp.example.com; dkim=pass header.i=@example.com; 
                    dmarc=none header.from=example.com;"
        }, {
          "name": "X-SES-RECEIPT",
          "value": "AEFBQUFBQUFBQUFHbFo0VU81VzVuYmRDNm51nhTVWpabDh6J4V2l5cG5PSHFtNzlBeUk90example"
        }, {
          "name": "X-SES-DKIM-SIGNATURE",
          "value": "a=rsa-sha256; q=dns/txt; b=Cm1emU30VcD6example=; c=relaxed/simple; s=6gbrjpgwjs
                    5zn6fwqknexample; d=amazonses.com; t=1567719002; v=1; bh=DSofsjAoUvyZj6YsBDP5en
                    pRO1otGb7Nes0Qexample=; h=From:To:Cc:Bcc:Subject:Date:Message-ID:MIME-Version:
                    Content-Type:X-SES-RECEIPT;"
        }, {
          "name": "DKIM-Signature",
          "value": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=example.com; i=@example.com; q=dns/txt; 
                    s=example12345; t=1567719001; x=1599255001; h=from:to:subject:date:message-id:
                    references:in-reply-to:mime-version; bh=sjAoUvyZj6YsBDP5enpRO1otGb7s0Qexample=; 
                    b=EQw2D4RLOW2IHE9OgfEA4WXp+AENJtaD2+63wmd5J+d+t/xoaiKUGClOS7WhpyOmlipryOz+iOhxU
                    v350xJIHjLTi9Jsnlw76mRK8o4770TaUz620joCVN21n4cxsrRZpv+1kS0EcAxaF30pmwlni+XT4ems
                    Vxn7zO0I8example=;"
        }, {
          "name": "Received",
          "value": "from mail.example.com (mail.example.com [203.0.113.0]) by email-inbound-relay-
                    1d-9ec21598.us-east-1.example.com (Postfix) with ESMTPS id 57F83A2042 for 
                    <recipient@example.com>; Mon, 5 Aug 2019 21:29:58 +0000 (UTC)"
        }, {
          "name": "From",
          "value": "\"Doe, John\" <sender@example.com>"
        }, {
          "name": "To",
          "value": "\"recipient@example.com\" <recipient@example.com>"
        }, {
          "name": "Subject",
          "value": "This is a test"
        }, {
          "name": "Thread-Topic",
          "value": "This is a test"
        }, {
          "name": "Thread-Index",
          "value": "AQHVZDAaQ58yKI8q7kaAjkhC5stGexample"
        }, {
          "name": "Date",
          "value": "Mon, 5 Aug 2019 21:29:57 +0000"
        }, {
          "name": "Message-ID",
          "value": "<F8098FDD-49A3-442D-9935-F6112example@example.com>"
        }, {
          "name": "References",
          "value": "<1FCED16B-F6B0-4506-A6F0-594DFexample@example.com>"
        }, {
          "name": "In-Reply-To",
          "value": "<1FCED16B-F6B0-4506-A6F0-594DFexample@example.com>"
        }, {
          "name": "Accept-Language",
          "value": "en-US"
        }, {
          "name": "Content-Language",
          "value": "en-US"
        }, {
          "name": "X-MS-Has-Attach",
          "value": ""
        }, {
          "name": "X-MS-TNEF-Correlator",
          "value": ""
        }, {
          "name": "x-ms-exchange-messagesentrepresentingtype",
          "value": "1"
        }, {
          "name": "x-ms-exchange-transport-fromentityheader",
          "value": "Hosted"
        }, {
          "name": "x-originating-ip",
          "value": "[203.0.113.0]"
        }, {
          "name": "Content-Type",
          "value": "multipart/alternative; boundary=\"_000_F8098FDD49A344F6112B195BDAexamplecom_\""
        }, {
          "name": "MIME-Version",
          "value": "1.0"
        }, {
          "name": "Precedence",
          "value": "Bulk"
        }],
        "commonHeaders": {
          "returnPath": "prvs=144d0cba7=sender@example.com",
          "from": ["\"Doe, John\" <sender@example.com>"],
          "date": "Mon, 5 Aug 2019 21:29:57 +0000",
          "to": ["\"recipient@example.com\" <recipient@example.com>"],
          "messageId": "<F8098FDD-49A3-442D-9935-F6112B195BDA@example.com>",
          "subject": "This is a test"
        }
      },
      "receipt": {
        "timestamp": "2019-08-05T21:30:02.028Z",
        "processingTimeMillis": 1205,
        "recipients": ["recipient@example.com"],
        "spamVerdict": {
          "status": "PASS"
        },
        "virusVerdict": {
          "status": "PASS"
        },
        "spfVerdict": {
          "status": "PASS"
        },
        "dkimVerdict": {
          "status": "PASS"
        },
        "dmarcVerdict": {
          "status": "GRAY"
        },
        "action": {
          "type": "Lambda",
          "functionArn": "arn:aws:lambda:us-east-1:123456789012:function:IncomingEmail",
          "invocationType": "Event"
        }
      }
    }
  }]
}
```

## Von der Amazon-SNS-Aktion bereitgestellte Ereignisdatensätze
<a name="receiving-email-action-lambda-event-snsaction"></a>

Wenn Sie Ihrer Empfangsregel eine Amazon-SNS-Aktion hinzufügen, enthält die Benachrichtigung den gesamten Inhalt der E-Mail. Wenn Sie möchten, dass eine Lambda-Funktion den Text der E-Mail verarbeitet, sollten Sie der Empfangsregel eine Amazon-SNS-Aktion hinzufügen und dann Ihre Lambda-Funktion in Amazon SNS mit der Amazon-SNS-Funktion abonnieren. Diese Konfiguration bewirkt, dass Ihre Lambda-Funktion aktiviert wird, wenn sie eine Benachrichtigung vom Amazon-SNS-Thema erhält.

```
{
    'Records': [
        {
            'EventSource': 'aws:sns',
            'EventVersion': '1.0',
            'EventSubscriptionArn': 'arn:aws:sns:us-east-1:123456789012:IncomingEmail:12345678',
            'Sns': {
                'Type': 'Notification',
                'MessageId': 'EXAMPLE7c191be45-e9aedb9a-02f9-4d12-a87d-dd0099a07f8a-000000',
                'TopicArn': 'arn:aws:sns:us-east-1:123456789012:IncomingEmail',
                'Subject': 'Amazon SES Email Receipt Notification',
                'Message': <message content—see below>,
                'Timestamp': '2019-09-06T18:52:16.076Z',
                'SignatureVersion': '1',
                'Signature': '012345678901example==',
                'SigningCertUrl': 'https://sns.us-east-1.amazonaws.com/SimpleNotificationService
                                   -01234567890123456789012345678901.pem',
                'UnsubscribeUrl': 'https://sns.us-east-1.amazonaws.com/?Action=Unsubscribe&
                                   SubscriptionArn=arn:aws:sns:us-east-1:0123456789012:IncomingEmail:
                                   0b863538-3f32-462e-9c89-8d8e0example',
                'MessageAttributes': {}
            }
        }
    ]
}
```

Das `Message`-Attribut enthält eine JSON-kodierte Zeichenfolge. Diese Zeichenfolge enthält die Header und den Inhalt der Nachricht. Der Nachrichtentext selbst ist base64-kodiert. Wenn Sie den Nachrichtentext in Ihrer Lambda-Funktion verwenden möchten, müssen Sie zuerst das `Message`-Attribut entschlüsseln und dann das `Content`-Objekt entschlüsseln.

Das folgende Beispiel zeigt die Werte, die im `Message`-Attribut enthalten sind.

```
{
  "notificationType": "Received",
  "mail": {
    "timestamp": "2019-09-06T18:52:14.965Z",
    "source": "0100016d07eb7477-8e1938ce-475e-4e4b-89cb-example-000000@amazonses.com",
    "messageId": "12345678901example",
    "destination": ["recipient@example.com"],
    "headersTruncated": false,
    "headers": [{
      "name": "Return-Path",
      "value": "<0100016d07eb7477-8e1938ce-475e-4e4b-89cb-example-000000@amazonses.com>"
    }, {
      "name": "Received",
      "value": "from a1-23.smtp-out.amazonses.com (a1-23.smtp-out.amazonses.com [203.0.113.0]) by
                inbound-smtp.us-east-1.amazonaws.com with SMTP id
                12345678901example for recipient@example.com; Fri, 06 Sep 2019
                18:52:14 +0000 (UTC)"
    }, {
      "name": "X-SES-Spam-Verdict",
      "value": "PASS"
    }, {
      "name": "X-SES-Virus-Verdict",
      "value": "PASS"
    }, {
      "name": "Received-SPF",
      "value": "pass (spfCheck: domain of amazonses.com designates 203.0.113.0 as permitted sender)
                client-ip=203.0.113.0; envelope-from=0100016d07eb7477-8e1938ce-475e-4e4b-89cb-example
                -000000@amazonses.com; helo=a1-23.smtp-out.amazonses.com;"
    }, {
      "name": "Authentication-Results",
      "value": "amazonses.com; spf=pass (spfCheck: domain of amazonses.com designates 203.0.113.0
                as permitted sender) client-ip=203.0.113.0; envelope-from=0100016d07eb7477-8e1938ce
                -475e-4e4b-89cb-example-000000@amazonses.com; helo=a1-23.smtp-out.amazonses.com;
                dkim=pass header.i=@amazonses.com; dmarc=none header.from=example.com;"
    }, {
      "name": "X-SES-RECEIPT",
      "value": "AEFBQUFBQUFBQUFFQkx0QUJZZENEXAMPLE="
    }, {
      "name": "X-SES-DKIM-SIGNATURE",
      "value": "a=rsa-sha256; q=dns/txt; b=d5azwgA2iBqAjA4NBm1ARzjJ95raRmy4G84iVdd3x2JzSHeUnQuTuLmJ
                AqRrYY3WpMIVRFy01hITaguCVjUPWBR0xF6fCEXH85cf3RNeFQyLfWZqoXKfBdjFRV+13troDterH2MxBUL
                8rjzcvdHetl0ImwlaK2PGmePTexample=; c=relaxed/simple; s=EXAMPLE7c191be45-e9aedb9a-02
                f9-4d12-a87d-dd0099a07f8a-000000; d=amazonses.com; t=1567795935; v=1; bh=CZ1SghsYaA
                6SSCbitzsLISeFoNlpdtH1Pyiexample=; h=From:To:Cc:Bcc:Subject:Date:Message-ID:MIME-
                Version:Content-Type:X-SES-RECEIPT;"
    }, {
      "name": "DKIM-Signature",
      "value": "v=1; a=rsa-sha256; q=dns/txt; c=relaxed/simple; s=EXAMPLE7c191be45-e9aedb9a-02f9-
                4d12-a87d-dd0099a07f8a-000000; d=amazonses.com; t=1567795934; h=From:To:Subject:
                MIME-Version:Content-Type:Message-ID:Date:Feedback-ID; bh=CZ1SghsYaA6SSCbitzsLISeFo
                NlpdtH1Pyiexample=; b=L6VXqR1PSN/FYqJI/VAfPRKFgtakcHCYJvuJqVYbuJT8I3FOhqOvkbcgHxOgs
                woxPfvGrL6S53H8Er5Do/CPvOM4Tx3ilE+a0GTYVLjKmwltNeN09YWlJAoqG5KMQPZUxRYaNvYPInLzUdGi
                rdjkbSIgZEnrvq5MzaMWexample="
    }, {
      "name": "From",
      "value": "sender@example.com"
    }, {
      "name": "To",
      "value": "recipient@example.com"
    }, {
      "name": "Subject",
      "value": "Amazon SES Test"
    }, {
      "name": "MIME-Version",
      "value": "1.0"
    }, {
      "name": "Content-Type",
      "value": "multipart/alternative;  boundary=\"----=_Part_869787_396523212.15677example\""
    }, {
      "name": "Message-ID",
      "value": "<0100016d07eb7477-8e1938ce-475e-4e4b-89cb-example-000000@email.amazonses.com>"
    }, {
      "name": "Date",
      "value": "Fri, 6 Sep 2019 18:52:14 +0000"
    }, {
      "name": "X-SES-Outgoing",
      "value": "2019.09.06-203.0.113.0"
    }, {
      "name": "Feedback-ID",
      "value": "1.us-east-1.ZitRoTk0xziun8WEJevt+cSJ17QNuCwulg2D2v3nrT0=:AmazonSES"
    }],
    "commonHeaders": {
      "returnPath": "0100016d07eb7477-8e1938ce-475e-4e4b-89cb-example-000000@amazonses.com",
      "from": ["sender@example.com"],
      "date": "Fri, 6 Sep 2019 18:52:14 +0000",
      "to": ["recipient@example.com"],
      "messageId": "<0100016d07eb7477-8e1938ce-475e-4e4b-89cb-example-000000@email.amazonses.com>",
      "subject": "Amazon SES Test"
    }
  },
  "receipt": {
    "timestamp": "2019-09-06T18:52:14.965Z",
    "processingTimeMillis": 1098,
    "recipients": ["recipient@example.com"],
    "spamVerdict": {
      "status": "PASS"
    },
    "virusVerdict": {
      "status": "PASS"
    },
    "spfVerdict": {
      "status": "PASS"
    },
    "dkimVerdict": {
      "status": "GRAY"
    },
    "dmarcVerdict": {
      "status": "GRAY"
    },
    "action": {
      "type": "SNS",
      "topicArn": "arn:aws:sns:us-east-1:123456789012:IncomingEmail",
      "encoding": "BASE64"
    }
  },
  "content": "UmV0dXJuLVBhdGg6IDwwMTAwMDE2ZDA3ZWI3NDc3LThlMTkzOGNlLTQ3NWUtNGU0Yi04OWNiLWV4YW1wbGUtM
              DAwMDAwQGFtYXpvbnNlcy5jb20+ClJlY2VpdmVkOiBmcm9tIGExLTIzLnNtdHAtb3V0LmFtYXpvbnNlcy5jb2
              0gKGExLTIzLnNtdHAtb3V0LmFtYXpvbnNlcy5jb20gWzIwMy4wLjExMy4wXSkKIGJ5IGluYm91bmQtc210cC5
              1cy1lYXN0LTEuYW1hem9uYXdzLmNvbSB3aXRoIFNNVFAgaWQgZW5xMTBpYW1lMXFjdTMxamg1ZGEyZ244OWlt
              dm90Mms2ZXhhbXBsZQogZm9yIHJlY2lwaWVudEBleGFtcGxlLmNvbTsKIEZyaSwgMDYgU2VwIDIwMTkgMTg6N
              TI6MTQgKzAwMDAgKFVUQykKWC1TRVMtU3BhbS1WZXJkaWN0OiBQQVNTClgtU0VTLVZpcnVzLVZlcmRpY3Q6IF
              BBU1MKUmVjZWl2ZWQtU1BGOiBwYXNzIChzcGZDaGVjazogZG9tYWluIG9mIGFtYXpvbnNlcy5jb20gZGVzaWd
              uYXRlcyAyMDMuMC4xMTMuMCBhcyBwZXJtaXR0ZWQgc2VuZGVyKSBjbGllbnQtaXA9MjAzLjAuMTEzLjA7IGVu
              dmVsb3BlLWZyb209MDEwMDAxNmQwN2ViNzQ3Ny04ZTE5MzhjZS00NzVlLTRlNGItODljYi1leGFtcGxlLTAwM
              DAwMEBhbWF6b25zZXMuY29tOyBoZWxvPWExLTIzLnNtdHAtb3V0LmFtYXpvbnNlcy5jb207CkF1dGhlbnRpY2
              F0aW9uLVJlc3VsdHM6IGFtYXpvbnNlcy5jb207CiBzcGY9cGFzcyAoc3BmQ2hlY2s6IGRvbWFpbiBvZiBhbWF
              6b25zZXMuY29tIGRlc2lnbmF0ZXMgMjAzLjAuMTEzLjAgYXMgcGVybWl0dGVkIHNlbmRlcikgY2xpZW50LWlw
              PTIwMy4wLjExMy4wOyBlbnZlbG9wZS1mcm9tPTAxMDAwMTZkMDdlYjc0NzctOGUxOTM4Y2UtNDc1ZS00ZTRiL
              Tg5Y2ItZXhhbXBsZS0wMDAwMDBAYW1hem9uc2VzLmNvbTsgaGVsbz1hMS0yMy5zbXRwLW91dC5hbWF6b25zZX
              MuY29tOwogZGtpbT1wYXNzIGhlYWRlci5pPUBhbWF6b25zZXMuY29tOwogZG1hcmM9bm9uZSBoZWFkZXIuZnJ
              vbT1leGFtcGxlLmNvbTsKWC1TRVMtUkVDRUlQVDogQUVGQlFVRkJRVUZCUVVGRlFreDBRVUpaWkVORVhBTVBM
              RT0KWC1TRVMtREtJTS1TSUdOQVRVUkU6IGE9cnNhLXNoYTI1NjsgcT1kbnMvdHh0OyBiPWQ1YXp3Z0EyaUJxQ
              WpBNE5CbTFBUnpqSjk1cmFSbXk0Rzg0aVZkZDN4Mkp6U0hlVW5RdVR1TG1KQXFScllZM1dwTUlWUkZ5MDFoSV
              RhZ3VDVmpVUFdCUjB4RjZmQ0VYSDg1Y2YzUk5lRlF5TGZXWnFvWEtmQmRqRlJWKzEzdHJvRHRlckgyTXhCVUw
              4cmp6Y3ZkSGV0bDBJbXdsYUsyUEdtZVBUZXhhbXBsZT07IGM9cmVsYXhlZC9zaW1wbGU7IHM9RVhBTVBMRTdj
              MTkxYmU0NS1lOWFlZGI5YS0wMmY5LTRkMTItYTg3ZC1kZDAwOTlhMDdmOGEtMDAwMDAwOyBkPWFtYXpvbnNlc
              y5jb207IHQ9MTU2Nzc5NTkzNTsgdj0xOyBiaD1DWjFTZ2hzWWFBNlNTQ2JpdHpzTElTZUZvTmxwZHRIMVB5aW
              V4YW1wbGU9OyBoPUZyb206VG86Q2M6QmNjOlN1YmplY3Q6RGF0ZTpNZXNzYWdlLUlEOk1JTUUtVmVyc2lvbjp
              Db250ZW50LVR5cGU6WC1TRVMtUkVDRUlQVDsKREtJTS1TaWduYXR1cmU6IHY9MTsgYT1yc2Etc2hhMjU2OyBx
              PWRucy90eHQ7IGM9cmVsYXhlZC9zaW1wbGU7CglzPUVYQU1QTEU3YzE5MWJlNDUtZTlhZWRiOWEtMDJmOS00Z
              DEyLWE4N2QtZGQwMDk5YTA3ZjhhLTAwMDAwMDsgZD1hbWF6b25zZXMuY29tOyB0PTE1Njc3OTU5MzQ7CgloPU
              Zyb206VG86U3ViamVjdDpNSU1FLVZlcnNpb246Q29udGVudC1UeXBlOk1lc3NhZ2UtSUQ6RGF0ZTpGZWVkYmF
              jay1JRDsKCWJoPUNaMVNnaHNZYUE2U1NDYml0enNMSVNlRm9ObHBkdEgxUHlpTWV4YW1wbGU9OwoJYj1leGFt
              cGxlPQpGcm9tOiBzZW5kZXJAZXhhbXBsZS5jb20KVG86IHJlY2lwaWVudEBleGFtcGxlLmNvbQpTdWJqZWN0O
              iBBbWF6b24gU0VTIFRlc3QKTUlNRS1WZXJzaW9uOiAxLjAKQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvYWx0ZX
              JuYXRpdmU7IAoJYm91bmRhcnk9Ii0tLS09X1BhcnRfODY5Nzg3XzM5NjUyMzIxMi4xNTY3N2V4YW1wbGUiCk1
              lc3NhZ2UtSUQ6IDwwMTAwMDE2ZDA3ZWI3NDc3LThlMTkzOGNlLTQ3NWUtNGU0Yi04OWNiLWV4YW1wbGUtMDAw
              MDAwQGVtYWlsLmFtYXpvbnNlcy5jb20+CkRhdGU6IEZyaSwgNiBTZXAgMjAxOSAxODo1MjoxNCArMDAwMApYL
              VNFUy1PdXRnb2luZzogMjAxOS4wOS4wNi0yMDMuMC4xMTMuMApGZWVkYmFjay1JRDogMS51cy1lYXN0LTEuWm
              l0Um9UazB4eml1bjhXRUpldnQrZXhhbXBsZT06QW1hem9uU0VTCgotLS0tLS09X1BhcnRfODY5Nzg3XzM5NjU
              yMzIxMi4xNTY3N2V4YW1wbGUKQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04CkNvbnRl
              bnQtVHJhbnNmZXItRW5jb2Rpbmc6IDdiaXQKCkFtYXpvbiBTRVMgVGVzdApUaGlzIGVtYWlsIHdhcyBzZW50I
              HdpdGggQW1hem9uIFNFUy4KLS0tLS0tPV9QYXJ0Xzg2OTc4N18zOTY1MjMyMTIuMTU2NzdleGFtcGxlCkNvbn
              RlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PVVURi04CkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDd
              iaXQKCjxodG1sPgo8aGVhZD48L2hlYWQ+Cjxib2R5PgogIDxoMT5BbWF6b24gU0VTIFRlc3Q8L2gxPgogIDxw
              PlRoaXMgZW1haWwgd2FzIHNlbnQgd2l0aCBBbWF6b24gU0VTLjwvcD4KPGltZyBhbHQ9IiIgc3JjPSJodHRwO
              i8vZXhhbXBsZS5yLnVzLWVhc3QtMS5hd3N0cmFjay5tZS9JMC8wMTAwMDE2ZDA3ZWI3NDc3LThlMTkzOGNlLT
              Q3NWUtNGU0Yi04OWNiLWV4YW1wbGUtMDAwMDAwL3UtWUphaHRkTTJTclhZQ2QiIHN0eWxlPSJkaXNwbGF5OiB
              ub25lOyB3aWR0aDogMXB4OyBoZWlnaHQ6IDFweDsiPgo8L2JvZHk+CjwvaHRtbD4KICAgICAgICAgICAgCi0t
              LS0tLT1fUGFydF84Njk3ODdfMzk2NTIzMjEyLjE1Njc3ZXhhbXBsZS0tCg=="
}
```

# Beispielanwendungsfälle
<a name="receiving-email-action-lambda-example-use-cases"></a>

Die folgenden Beispiele beschreiben einige Regeln, die Sie für die Verwendung der Lambda-Funktionsergebnisse zum Kontrollieren Ihres Nachrichtenflusses einrichten können. Zu Demonstrationszwecken verwenden viele dieser Beispiele die S3-Aktion als Ergebnis.

## Anwendungsfall 1: Löschen von Spam für alle Domänen
<a name="receiving-email-action-lambda-example-use-cases-1"></a>

In diesem Beispiel wird eine globale Regel dargestellt, die Spam-Nachrichten in allen Ihren Domänen löscht. Die Regeln 2 und 3 sollen demonstrieren, das Sie domänenspezifische Regeln anwenden können, nachdem die Spam-Nachrichten in allen Domänen gelöscht wurden.

### Regel 1
<a name="receiving-email-action-lambda-example-use-cases-1-rule-1"></a>

*Empfängerliste: *leer Diese Regel gilt daher für alle Empfänger im Rahmen Ihrer verifizierten Domänen.

 *Aktionen* 

1. Lambda-Aktion (synchron), die `STOP_RULE_SET` zurückgibt, wenn es sich bei der E-Mail um Spam handelt. Gibt andernfalls `CONTINUE` zurück. Weitere Informationen finden Sie im Beispiel der Lambda-Funktion zum Löschen von Spam-Nachrichten in [Beispiele für Lambda-Funktionen](receiving-email-action-lambda-example-functions.md).

### Regel 2
<a name="receiving-email-action-lambda-example-use-cases-1-rule-2"></a>

*Empfängerliste: *example1.com

 *Aktionen* 

1. Jede beliebige Aktion

### Regel 3
<a name="receiving-email-action-lambda-example-use-cases-1-rule-3"></a>

*Empfängerliste: *example2.com

 *Aktionen* 

1. Jede beliebige Aktion

## Anwendungsfall 2: Unzustellbarkeit von Spam für alle Domänen
<a name="receiving-email-action-lambda-example-use-cases-2"></a>

In diesem Beispiel wird eine globale Regel dargestellt, die Spam-Nachrichten in allen Ihren Domänen als unzustellbar einstuft. Die Regeln 2 und 3 sollen demonstrieren, das Sie domänenspezifische Regeln anwenden können, nachdem die Spam-Nachrichten in allen Domänen als unzustellbar eingestuft wurden.

### Regel 1
<a name="receiving-email-action-lambda-example-use-cases-2-rule-1"></a>

*Empfängerliste: *leer Diese Regel gilt daher für alle Empfänger im Rahmen Ihrer verifizierten Domänen.

 *Aktionen* 

1. Lambda-Aktion (synchron), die `CONTINUE` zurückgibt, wenn es sich bei der E-Mail um Spam handelt. Gibt andernfalls `STOP_RULE` zurück.

1. Bounce-Aktion ("500 5.6.1. Message content rejected").

1. Stop-Aktion

### Regel 2
<a name="receiving-email-action-lambda-example-use-cases-2-rule-2"></a>

*Empfängerliste: *example1.com

 *Aktionen* 

1. Jede beliebige Aktion

### Regel 3
<a name="receiving-email-action-lambda-example-use-cases-2-rule-3"></a>

*Empfängerliste: *example2.com

 *Aktionen* 

1. Jede beliebige Aktion

## Anwendungsfall 3: Anwenden der spezifischsten Regel
<a name="receiving-email-action-lambda-example-use-cases-3"></a>

In diesem Beispiel wird dargestellt, Sie mit der Stoß-Aktion verhindern können, dass E-Mails von mehreren Regeln verarbeitet werden. In diesem Beispiel gibt es eine Regel für eine bestimmte Adresse und eine zweite für alle E-Mail-Adressen der Domäne. Mit der Stop-Aktion werden Nachrichten, die der Regel für die spezifische E-Mail-Adresse entsprechen, nicht von der allgemeineren Regel verarbeitet, die für die Domäne gilt.

### Regel 1
<a name="receiving-email-action-lambda-example-use-cases-3-rule-1"></a>

*Empfängerliste: *user@example.com

 *Aktionen* 

1. Lambda-Aktion (asynchron)

1. Stop-Aktion

### Regel 2
<a name="receiving-email-action-lambda-example-use-cases-3-rule-2"></a>

*Empfängerliste: *example.com

 *Aktionen* 

1. Jede beliebige Aktion

## Anwendungsfall 4: E-Mail-Ereignisse protokollieren in CloudWatch
<a name="receiving-email-action-lambda-example-use-cases-4"></a>

In diesem Beispiel wird gezeigt, wie Sie ein Prüfprotokoll aller E-Mails in Ihrem System führen, bevor Sie die E-Mails in Amazon SES speichern.

### Regel 1
<a name="receiving-email-action-lambda-example-use-cases-4-rule-1"></a>

*Empfängerliste: *example.com

 *Aktionen* 

1. Lambda-Aktion (asynchron), die das Ereignisobjekt in ein CloudWatch Protokoll schreibt. Das Beispiel für Lambda-Funktionen in [Beispiele für Lambda-Funktionen](receiving-email-action-lambda-example-functions.md) log to CloudWatch.

1. S3-Aktion

## Anwendungsfall 5: Löschen von E-Mails, die den DKIM-Standard nicht erfüllen
<a name="receiving-email-action-lambda-example-use-cases-5"></a>

Dieses Beispiel zeigt, wie Sie alle eingehenden E-Mails in einem Amazon-S3-Bucket speichern, aber nur E-Mails, die an eine bestimmte E-Mail-Adresse gerichtet sind und den DKIM-erfüllen, an Ihre automatisierte E-Mail-Anwendung senden.

### Regel 1
<a name="receiving-email-action-lambda-example-use-cases-5-rule-1"></a>

*Empfängerliste: *example.com

 *Aktionen* 

1. S3-Aktion

1. Lambda-Aktion (synchron), die `STOP_RULE_SET` zurückgibt, wenn die Nachricht den DKIM-Standard nicht erfüllt. Gibt andernfalls `CONTINUE` zurück.

### Regel 2
<a name="receiving-email-action-lambda-example-use-cases-5-rule-2"></a>

*Empfängerliste: *support@example.com

 *Aktionen* 

1. Lambda-Aktion (asynchron), die die automatisierte Anwendung auslöst.

## Anwendungsfall 6: Auf E-Mail basierendes Filtern nach Betreffzeile
<a name="receiving-email-action-lambda-example-use-cases-6"></a>

Dieses Beispiel zeigt, wie Sie alle eingehenden E-Mails einer Domäne mit dem Wort "Rabatt" in der Betreffzeile löschen und dann die für ein automatisiertes System bestimmte E-Mail auf die eine Art und E-Mails, die an alle anderen Empfänger in der Domäne bestimmt sind, auf eine andere Art verarbeiten.

### Regel 1
<a name="receiving-email-action-lambda-example-use-cases-6-rule-1"></a>

*Empfängerliste: *example.com

 *Aktionen* 

1. Lambda-Aktion (synchron), die `STOP_RULE_SET` zurückgibt, wenn die Betreffzeile das Wort "Rabatt" enthält. Gibt andernfalls `CONTINUE` zurück.

### Regel 2
<a name="receiving-email-action-lambda-example-use-cases-6-rule-2"></a>

*Empfängerliste: *support@example.com

 *Aktionen* 

1. S3-Aktion mit Bucket 1.

1. Lambda-Aktion (asynchron), die die automatisierte Anwendung auslöst.

1. Stop-Aktion

### Regel 3
<a name="receiving-email-action-lambda-example-use-cases-6-rule-3"></a>

*Empfängerliste: *example.com

 *Aktionen* 

1. S3-Aktion mit Bucket 2.

1. Lambda-Aktion (asynchron), die E-Mails für die übrige Domäne verarbeitet.

# Beispiele für Lambda-Funktionen
<a name="receiving-email-action-lambda-example-functions"></a>

Dieses Thema enthält Beispiele für Lambda-Funktionen, die den Nachrichtenfluss kontrollieren.

## Beispiel 1: Löschen von Spam
<a name="receiving-email-action-lambda-example-functions-1"></a>

Dieses Beispiel stoppt die Verarbeitung von Nachrichten mit mindestens einem Spam-Indikator.

```
export const handler = async (event, context, callback) => {
    console.log('Spam filter');
    
    const sesNotification = event.Records[0].ses;
    console.log("SES Notification:\n", JSON.stringify(sesNotification, null, 2));
    
    // Check if any spam check failed
    if (sesNotification.receipt.spfVerdict.status === 'FAIL'
            || sesNotification.receipt.dkimVerdict.status === 'FAIL'
            || sesNotification.receipt.spamVerdict.status === 'FAIL'
            || sesNotification.receipt.virusVerdict.status === 'FAIL') {
                
        console.log('Dropping spam');

        // Stop processing rule set, dropping message
        callback(null, {'disposition':'STOP_RULE_SET'});
    } else {
        callback(null, {'disposition':'CONTINUE'});   
    }
};
```

## Beispiel 2: Fortsetzen, wenn ein bestimmter Header gefunden wird
<a name="receiving-email-action-lambda-example-functions-2"></a>

In diesem Beispiel wird die Verarbeitung der aktuellen Regel nur dann fortgesetzt, wenn die E-Mail einen bestimmten Header-Wert enthält.

```
export const handler = async (event, context, callback) => {
    console.log('Header matcher');
 
    const sesNotification = event.Records[0].ses;
    console.log("SES Notification:\n", JSON.stringify(sesNotification, null, 2));
    
    // Iterate over the headers
    for (let index in sesNotification.mail.headers) {
        const header = sesNotification.mail.headers[index];
        
        // Examine the header values
        if (header.name === 'X-Header' && header.value === 'X-Value') {
            console.log('Found header with value.');
            callback(null, {'disposition':'CONTINUE'});
            return;
        }
    }
    
    // Stop processing the rule if the header value wasn't found
    callback(null, {'disposition':'STOP_RULE'});
};
```

## Beispiel 3: Abrufen von E-Mail aus Amazon S3
<a name="receiving-email-action-lambda-example-functions-3"></a>

In diesem Beispiel wird die Raw-E-Mail aus Amazon S3 abgerufen und verarbeitet.

**Anmerkung**  
Sie müssen zunächst die E-Mail mit einer S3-Aktion in Amazon S3 schreiben.
[Stellen Sie sicher, dass die Lambda-Funktion über IAM-Berechtigungen zum Abrufen von Objekten aus dem S3-Bucket verfügt. Weitere Informationen finden Sie in diesem AWS re:POST-Artikel.](https://repost.aws/knowledge-center/lambda-execution-role-s3-bucket)
Es ist möglich, dass die standardmäßigen Timeouts für die Lambda-Ausführung zu kurz für Ihren Workflow sind. Erwägen Sie, sie zu erhöhen. 

```
import { S3Client, GetObjectCommand } from "@aws-sdk/client-s3"; 
const bucketName = '<Your Bucket Name>';

export const handler = async (event, context, callback) => {
    const client = new S3Client();
    console.log('Process email');
  
    var sesNotification = event.Records[0].ses;
    console.log("SES Notification:\n", JSON.stringify(sesNotification, null, 2));
    console.log("MessageId: " + sesNotification.mail.messageId)
  
    const getObjectCommand = new GetObjectCommand({
        Bucket: bucketName,
        Key: sesNotification.mail.messageId
    });
  
    try {
        const response = await client.send(getObjectCommand);
        const receivedMail = await response.Body.transformToString();
        console.log(receivedMail);
        callback(null, {'disposition':'CONTINUE'})
    } catch (e) {
        // Perform error handling here
        console.log("Encountered S3 client error: "+ e, e.stack);
        callback(null, {'disposition':'STOP_RULE_SET'})
    }
};
```

## Beispiel 4: Unzustellbarkeit von Nachrichten, bei denen die DMARC-Authentifizierung fehlschlägt
<a name="receiving-email-action-lambda-example-functions-4"></a>

In diesem Beispiel wird eine Unzustellbarkeitsnachricht gesendet, wenn die DMARC-Authentifizierung einer eingehenden E-Mail fehlschlägt.

**Anmerkung**  
Legen Sie bei der Verwendung dieses Beispiels den Wert der Umgebungsvariablen `emailDomain` auf Ihre Domäne für den E-Mail-Empfang fest.
Stellen Sie sicher, dass die Lambda-Funktion über die `ses:SendBounce` Berechtigungen für die SES-Identität verfügt, die die Bounce-Nachrichten sendet.

```
import { SESClient, SendBounceCommand } from "@aws-sdk/client-ses";
const sesClient = new SESClient();
// Assign the emailDomain environment variable to a constant.
const emailDomain = process.env.emailDomain;

export const handler = async (event, context, callback) => {
    console.log('Spam filter starting');

    const sesNotification = event.Records[0].ses;
    const messageId = sesNotification.mail.messageId;
    const receipt = sesNotification.receipt;

    console.log('Processing message:', messageId);

    // If DMARC verdict is FAIL and the sending domain's policy is REJECT
    // (p=reject), bounce the email.
    if (receipt.dmarcVerdict.status === 'FAIL' 
        && receipt.dmarcPolicy.status === 'REJECT') {
        // The values that make up the body of the bounce message.
        const sendBounceParams = {
            BounceSender: `mailer-daemon@${emailDomain}`,
            OriginalMessageId: messageId,
            MessageDsn: {
                ReportingMta: `dns; ${emailDomain}`,
                ArrivalDate: new Date(),
                ExtensionFields: [],
            },
            // Include custom text explaining why the email was bounced.
            Explanation: "Unauthenticated email is not accepted due to the sending domain's DMARC policy.",
            BouncedRecipientInfoList: receipt.recipients.map((recipient) => ({
                Recipient: recipient,
                // Bounce with 550 5.6.1 Message content rejected
                BounceType: 'ContentRejected',
            })),
        };

        console.log('Bouncing message with parameters:');
        console.log(JSON.stringify(sendBounceParams, null, 2));
        
        const sendBounceCommand = new SendBounceCommand(sendBounceParams);
        
        // Try to send the bounce. 
        try {
          const response = await sesClient.send(sendBounceCommand);
          console.log(response);
          console.log(`Bounce for message ${messageId} sent, bounce message ID: ${response.MessageId}`);
          // Stop processing additional receipt rules in the rule set.
          callback(null, {disposition: 'STOP_RULE_SET'});
        } catch (e) {
          // If something goes wrong, log the issue.
          console.log(`An error occurred while sending bounce for message: ${messageId}`, e);
          // Perform any additional error handling here
          callback(e)
        }
        
    // If the DMARC verdict is anything else (PASS, QUARANTINE or GRAY), accept
    // the message and process remaining receipt rules in the rule set.
    } else {
        console.log('Accepting message:', messageId);
        callback(null, {disposition: 'CONTINUE'});
    }
};
```