

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Chiamata di un'operazione della funzione Lambda
<a name="receiving-email-action-lambda"></a>

L'operazione Lambda chiama il codice tramite una funzione e, eventualmente, invia una notifica tramite Amazon SNS. Questa operazione della regola presenta le seguenti opzioni e requisiti.

**Opzioni**
+ **Lambda function** (Funzione Lambda): l'ARN della funzione Lambda. *Un esempio di funzione Lambda ARN è arn:aws:lambda:us-east-1:account-id:function:. MyFunction*
+ **Invocation type** (Tipo di chiamata): tipo di chiamata della funzione Lambda. Un tipo di invocazione significa che l'esecuzione della funzione produce una risposta immediata. **RequestResponse** Un tipo di invocazione di **Event (Evento)** significa che la funzione viene richiamata in modo asincrono. Ti consigliamo di usare il tipo di chiamata **Event (Evento)**, a meno che l'esecuzione sincrona non sia assolutamente necessaria per il tuo caso d'uso.

  Nelle chiamate **RequestResponse** si verifica un timeout dopo 30 secondi.

  Per ulteriori informazioni, consulta [Richiamo di funzioni AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/lambda-invocation.html) nella *Guida per gli sviluppatori di AWS Lambda *.
+ **SNS Topic (Argomento SNS)**: nome o ARN dell'argomento Amazon SNS cui inviare una notifica quando viene attivata la funzione Lambda specificata. Un esempio di ARN per un argomento Amazon SNS è *arn:aws:sns:us-east* - 1:123456789012:. MyTopic Per le istruzioni, consulta [Creazione di un argomento Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/CreateTopic.html) nella *Guida per lo Sviluppatore di Amazon Simple Notification Service*.

**Requisiti**
+ La funzione Lambda scelta deve trovarsi nella stessa AWS regione dell'endpoint Amazon SES utilizzato per ricevere e-mail.
+ L'argomento Amazon SNS che scegli deve appartenere alla stessa AWS regione dell'endpoint Amazon SES che usi per ricevere e-mail.

## Scrittura della funzione Lambda
<a name="receiving-email-action-lambda-function"></a>

Per elaborare l'e-mail, la funzione Lambda può essere richiamata in modo asincrono, ovvero usando il tipo di chiamata `Event`. L'eventuale oggetto passato alla funzione Lambda conterrà i metadati relativi all'evento di e-mail in arrivo. Puoi usare i metadati anche per accedere al contenuto del messaggio dal bucket Amazon S3.

Se vuoi controllare effettivamente il flusso di posta, la funzione Lambda deve essere richiamata in modo sincrono, ovvero usando il tipo di chiamata `RequestResponse` e la funzione Lambda deve chiamare il metodo `callback` con due argomenti: il primo argomento è `null` e il secondo argomento è una proprietà `disposition` impostata su `STOP_RULE`, `STOP_RULE_SET` o `CONTINUE`. Se il secondo argomento è `null` o non ha una proprietà `disposition` valida, il flusso di posta continua e vengono elaborate ulteriori operazioni e regole. Questo comportamento corrisponde all'uso del valore `CONTINUE`.

Ad esempio, puoi arrestare la regola di ricezione impostata scrivendo la riga di codice seguente alla fine del codice della funzione Lambda:

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

Per esempi di AWS Lambda codice, consulta. [Esempi di funzione Lambda](receiving-email-action-lambda-example-functions.md) Per alcuni esempi di casi d'uso generali, consulta [Esempi di casi d'uso](receiving-email-action-lambda-example-use-cases.md).

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

Amazon SES passa informazioni alla funzione Lambda in formato JSON. L'oggetto di primo livello contiene una matrice `Records`, che viene popolata con le proprietà `eventSource`, `eventVersion` e `ses`. L'oggetto `ses` contiene oggetti `receipt` e `mail`, che hanno esattamente lo stesso formato delle notifiche Amazon SNS; descritte in [Contenuti delle notifiche](receiving-email-notifications-contents.md).

I dati che Amazon SES trasmette a Lambda includono metadati relativi al messaggio, oltre a diverse intestazioni di posta elettronica. Tuttavia, non contiene il corpo del messaggio.

Di seguito viene mostrata una vista generale della struttura dell'input fornito da Amazon SES per la funzione Lambda.

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

### Valori restituiti
<a name="receiving-email-action-lambda-function-return-values"></a>

La funzione Lambda può controllare il flusso di posta restituendo uno dei valori seguenti:
+ `STOP_RULE`: non verranno elaborate ulteriori operazioni nella regola di ricezione corrente, ma possono essere elaborate altre regole di ricezione.
+ `STOP_RULE_SET`: non verranno elaborate ulteriori operazioni o regole di ricezione.
+ `CONTINUE` o qualsiasi altro valore non valido: indica che è possibile elaborare ulteriori operazioni e regole di ricezione.

**Topics**
+ [Scrittura della funzione Lambda](#receiving-email-action-lambda-function)
+ [Esempio di evento di e-mail in entrata](receiving-email-action-lambda-event.md)
+ [Esempi di casi d'uso](receiving-email-action-lambda-example-use-cases.md)
+ [Esempi di funzione Lambda](receiving-email-action-lambda-example-functions.md)

# Esempio di evento di e-mail in entrata
<a name="receiving-email-action-lambda-event"></a>

Sono disponibili due modi per inviare eventi e-mail in entrata a una funzione Lambda. Il primo metodo consiste nell'utilizzare un'operazione Lambda nella regola di ricezione per inviare il registro di eventi direttamente alla funzione. Il secondo metodo consiste nell'utilizzare un'operazione Amazon SNS nella regola di ricezione per inviare i record di eventi ad Amazon SNS, quindi aggiungere la funzione Lambda come un endpoint di sottoscrizione all'argomento Amazon SNS.

Questa sezione contiene esempi dei record di eventi che Amazon SES può inviare a Lambda. Puoi utilizzare questi esempi per creare e testare le funzioni Lambda.

**Nota**  
Gli esempi in questa sezione includono interruzioni di riga per facilitarne la lettura. Se copi gli esempi in questa sezione, devi rimuovere le interruzioni di riga aggiuntive per produrre oggetti JSON validi.

## Registro di eventi forniti dall'operazione Lambda
<a name="receiving-email-action-lambda-event-lambdaaction"></a>

Quando aggiungi un'operazione Lambda a una regola di ricezione, Amazon SES invia un record di eventi a Lambda ogni volta che riceve un messaggio in entrata. Questo evento contiene informazioni su alcune intestazioni e-mail per il messaggio in entrata, nonché i risultati di diversi test eseguiti da Amazon SES sui messaggi in entrata. Tuttavia, omette il corpo dell'e-mail in entrata.

L'esempio seguente mostra i valori generalmente contenuti in questi record di eventi.

```
{
  "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"
        }
      }
    }
  }]
}
```

## Record di eventi forniti dall'operazione Amazon SNS
<a name="receiving-email-action-lambda-event-snsaction"></a>

Quando aggiungi un'operazione Amazon SNS alla regola di ricezione, la notifica contiene l'intero contenuto dell'e-mail. Se desideri che una funzione Lambda elabori il corpo dell'e-mail, devi aggiungere un'azione Amazon SNS alla regola di ricezione e poi, in Amazon SNS, sottoscrivere la funzione Lambda alla funzione Amazon SNS. Questa configurazione determina l'attivazione della funzione Lambda quando riceve una notifica dall'argomento Amazon SNS.

```
{
    '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': {}
            }
        }
    ]
}
```

L'attributo `Message` contiene una stringa codificata JSON. Questa stringa contiene le intestazioni e i contenuti del messaggio. Il corpo del messaggio stesso è codificato base64. Per utilizzare il corpo del messaggio nella funzione Lambda, è necessario prima decodificare l'attributo `Message`, quindi decodificare l'oggetto `Content`.

L'esempio seguente mostra i valori contenuti nell'attributo `Message`.

```
{
  "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=="
}
```

# Esempi di casi d'uso
<a name="receiving-email-action-lambda-example-use-cases"></a>

Gli esempi seguenti mostrano alcune regole che puoi configurare per usare i risultati della funzione Lambda in modo da controllare il flusso di posta. Per scopi dimostrativi, molti di questi esempi usano l'operazione S3 come risultato.

## Caso d'uso 1: eliminazione della spam in tutti i domini
<a name="receiving-email-action-lambda-example-use-cases-1"></a>

Questo esempio mostra una regola globale che elimina la spam in tutti i domini. Le regole 2 e 3 sono incluse per mostrare che puoi applicare regole specifiche del dominio dopo l'eliminazione dello spam in tutti i domini.

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

*Elenco di destinatari: *vuoto. Di conseguenza, questa regola si applica a tutti i destinatari in tutti i domini verificati.

 *Azioni* 

1. Operazione Lambda (sincrona) che restituisce `STOP_RULE_SET` se l'e-mail è spam. In caso contrario, restituisce `CONTINUE`. Consulta la funzione Lambda come esempio per l'eliminazione di spam in [Esempi di funzione Lambda](receiving-email-action-lambda-example-functions.md).

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

*Elenco di destinatari: *esempio1.com

 *Azioni* 

1. Qualsiasi operazione.

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

*Elenco di destinatari: *esempio2.com

 *Azioni* 

1. Qualsiasi operazione.

## Caso d'uso 2: mancato recapito di spam in tutti i domini
<a name="receiving-email-action-lambda-example-use-cases-2"></a>

Questo esempio mostra una regola globale che specifica il mancato recapito dello spam in tutti i domini. Le regole 2 e 3 sono incluse per mostrare che puoi applicare regole specifiche del dominio dopo il mancato recapito della spam in tutti i domini.

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

*Elenco di destinatari: *vuoto. Di conseguenza, questa regola si applica a tutti i destinatari in tutti i domini verificati.

 *Azioni* 

1. Operazione Lambda (sincrona) che restituisce `CONTINUE` se l'e-mail è spam. In caso contrario, restituisce `STOP_RULE`.

1. Operazione di mancato recapito ("500 5.6.1. Message content rejected" (500 5.6.1 Contenuto messaggio rifiutato)).

1. Operazione Stop (Interrompi).

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

*Elenco di destinatari: *esempio1.com

 *Azioni* 

1. Qualsiasi operazione

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

*Elenco di destinatari: *esempio2.com

 *Azioni* 

1. Qualsiasi operazione

## Caso d'uso 3: applicazione della regole più specifica
<a name="receiving-email-action-lambda-example-use-cases-3"></a>

Questo esempio mostra come usare l'operazione di interruzione per impedire l'elaborazione delle e-mail tramite più regole. In questo esempio, supponi di aver definito una regola per un indirizzo specifico e un'altra per tutti gli indirizzi e-mail nel dominio. Usando l'operazione di interruzione, i messaggi che corrispondono alla regola per l'indirizzo e-mail specifico non vengono elaborati dalla regola più generica applicata al dominio.

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

*Elenco di destinatari: *user@example.com

 *Azioni* 

1. Operazione Lambda (asincrona).

1. Operazione Stop (Interrompi).

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

*Elenco di destinatari: *example.com

 *Azioni* 

1. Qualsiasi operazione.

## Caso d'uso 4: registrare gli eventi di posta elettronica su CloudWatch
<a name="receiving-email-action-lambda-example-use-cases-4"></a>

Questo esempio mostra come mantenere un registro di verifica di tutta la posta trasmessa nel sistema prima di salvare la posta in Amazon SES.

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

*Elenco di destinatari: *example.com

 *Azioni* 

1. Azione Lambda (asincrona) che scrive l'oggetto evento in un registro. CloudWatch L'esempio di funzioni Lambda in [Esempi di funzione Lambda](receiving-email-action-lambda-example-functions.md) log to. CloudWatch

1. Operazione S3.

## Caso d'uso 5: eliminazione di posta che non supera la convalida DKIM
<a name="receiving-email-action-lambda-example-use-cases-5"></a>

Questo esempio mostra come salvare tutte le e-mail in arrivo in un bucket Amazon S3 inviando solo le e-mail destinate a un indirizzo e-mail specifico e che superano la convalida DKIM nella tua applicazione di e-mail automatica.

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

*Elenco di destinatari: *example.com

 *Azioni* 

1. Operazione S3.

1. Operazione Lambda (sincrona) che restituisce `STOP_RULE_SET` se il messaggio non supera la convalida DKIM. In caso contrario, restituisce `CONTINUE`.

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

*Elenco di destinatari: *support@example.com

 *Azioni* 

1. Operazione Lambda (asincrona) che attiva l'applicazione automatica.

## Caso d'uso 6: esclusione della posta in base all'oggetto
<a name="receiving-email-action-lambda-example-use-cases-6"></a>

Questo esempio mostra come eliminare tutta la posta in arrivo di un dominio che contiene la parola "discount" nell'oggetto, quindi elaborare la posta destinata a un sistema automatico in un modo, elaborando invece la posta indirizzata a tutti gli altri destinatari nel dominio in un modo diverso.

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

*Elenco di destinatari: *example.com

 *Azioni* 

1. Operazione Lambda (sincrona) che restituisce `STOP_RULE_SET` se l'oggetto contiene la parola "discount". In caso contrario, restituisce `CONTINUE`.

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

*Elenco di destinatari: *support@example.com

 *Azioni* 

1. Operazione S3 con bucket 1.

1. Operazione Lambda (asincrona) che attiva l'applicazione automatica.

1. Operazione Stop (Interrompi).

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

*Elenco di destinatari: *example.com

 *Azioni* 

1. Operazione S3 con bucket 2.

1. Operazione Lambda (asincrona) che elabora l'e-mail per il resto del dominio.

# Esempi di funzione Lambda
<a name="receiving-email-action-lambda-example-functions"></a>

Questo argomento contiene alcuni esempi di funzioni Lambda che controllano il flusso di posta.

## Esempio 1: eliminazione della spam
<a name="receiving-email-action-lambda-example-functions-1"></a>

Questo esempio interrompe l'elaborazione dei messaggi che includono almeno un indicatore di spam.

```
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'});   
    }
};
```

## Esempio 2: continua se viene trovata una particolare intestazione
<a name="receiving-email-action-lambda-example-functions-2"></a>

Questo esempio continua a elaborare la regola corrente solo se l'e-mail contiene un valore di intestazione specifico.

```
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'});
};
```

## Esempio 3: recupero dell'e-mail da Amazon S3
<a name="receiving-email-action-lambda-example-functions-3"></a>

Questo esempio ottiene l'e-mail in formato RAW da Amazon S3 e la elabora.

**Nota**  
Devi prima scrivere l'e-mail in Amazon S3 usando un'operazione S3.
[Assicurati che la funzione Lambda disponga delle autorizzazioni IAM per recuperare oggetti dal bucket S3. Per ulteriori informazioni, consulta questo articolo di re:POST.AWS](https://repost.aws/knowledge-center/lambda-execution-role-s3-bucket)
È possibile che i timeout di esecuzione Lambda predefiniti siano troppo brevi per il tuo flusso di lavoro. Valuta la possibilità di aumentarli. 

```
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'})
    }
};
```

## Esempio 4: mancato recapito dei messaggi per i quali l'autenticazione DMARC ha avuto esito negativo
<a name="receiving-email-action-lambda-example-functions-4"></a>

Questo esempio invia un messaggio di mancato recapito se l'autenticazione DMARC di un'e-mail in arrivo ha esito negativo.

**Nota**  
Quando usi questo esempio, imposta il valore della variabile di ambiente `emailDomain` sul dominio di ricezione delle e-mail.
Assicurati che la funzione Lambda disponga delle `ses:SendBounce` autorizzazioni per l'identità SES che invia i messaggi di rimbalzo.

```
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'});
    }
};
```