

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à.

# Trigger Lambda del mittente di e-mail personalizzato
<a name="user-pool-lambda-custom-email-sender"></a>

Quando assegni un trigger del mittente dell'e-mail personalizzato al pool di utenti, Amazon Cognito richiama una funzione Lambda anziché il suo comportamento predefinito quando un evento utente richiede l'invio di un messaggio e-mail. Con un trigger mittente personalizzato, la tua AWS Lambda funzione può inviare notifiche e-mail agli utenti tramite un metodo e un provider di tua scelta. Il codice personalizzato della funzione deve elaborare e distribuire tutti i messaggi e-mail del pool di utenti.

Questo trigger è utile per scenari in cui potresti voler avere un maggiore controllo sul modo in cui il tuo pool di utenti invia i messaggi e-mail. La tua funzione Lambda può personalizzare la chiamata alle operazioni dell'API di Amazon SES, ad esempio quando desideri gestire più identità verificate o incrociate. Regioni AWS La tua funzione potrebbe anche reindirizzare i messaggi verso un altro mezzo di consegna o un servizio di terze parti.

Per informazioni su come configurare un trigger personalizzato per il mittente dell'e-mail, consulta. [Attivazione dei trigger Lambda personalizzati del mittente](user-pool-lambda-custom-sender-triggers.md#enable-custom-sender-lambda-trigger)

## Origini dei trigger Lambda del mittente di e-mail personalizzato
<a name="trigger-source"></a>

La tabella che segue mostra gli eventi di attivazione per le origini dei trigger delle e-mail personalizzate nel codice Lambda.


| `TriggerSource value` | Event | 
| --- | --- | 
| CustomEmailSender\$1SignUp | Un utente si registra e Amazon Cognito invia un messaggio di benvenuto. | 
| CustomEmailSender\$1Authentication | Un utente accede e Amazon Cognito invia un codice OTP o MFA via e-mail. | 
| CustomEmailSender\$1ForgotPassword | Un utente richiede un codice per reimpostare la password. | 
| CustomEmailSender\$1ResendCode | Un utente richiede un codice di conferma dell'account sostitutivo. | 
| CustomEmailSender\$1UpdateUserAttribute | Un utente aggiorna un indirizzo e-mail o un numero di telefono e Amazon Cognito gli invia un codice per verificare l'attributo. | 
| CustomEmailSender\$1VerifyUserAttribute | Un utente crea un nuovo attributo indirizzo e-mail o numero di telefono e Amazon Cognito gli invia un codice per verificare l'attributo. | 
| CustomEmailSender\$1AdminCreateUser | Crei un nuovo utente nel tuo bacino d'utenza e Amazon Cognito gli invia una password temporanea. | 
| CustomEmailSender\$1AccountTakeOverNotification | Amazon Cognito rileva il tentativo di prendere il controllo di un account utente e invia una notifica all'utente. | 

## Parametri del trigger Lambda del mittente di e-mail personalizzato
<a name="custom-email-sender-parameters"></a>

La richiesta passata da Amazon Cognito a questa funzione Lambda è una combinazione dei parametri seguenti e dei [parametri comuni](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-working-with-lambda-triggers.html#cognito-user-pools-lambda-trigger-syntax-shared) aggiunti da Amazon Cognito a tutte le richieste.

------
#### [ JSON ]

```
{
    "request": {
        "type": "customEmailSenderRequestV1",
        "code": "string",
        "clientMetadata": {
            "string": "string",
             . . .
            },
        "userAttributes": {
            "string": "string",
            . . .
         }
}
```

------

### Parametri della richiesta del mittente di e-mail personalizzato
<a name="custom-email-sender-request-parameters"></a>

**tipo**  
La versione della richiesta. Per un evento del mittente di e-mail personalizzato, il valore di questa stringa è sempre `customEmailSenderRequestV1`.

**code**  
Il codice crittografato che la funzione può decrittografare e inviare all'utente.

**clientMetadata**  
Una o più coppie chiave-valore che puoi fornire come input personalizzato al trigger della funzione Lambda del mittente di e-mail personalizzato. Per passare questi dati alla funzione Lambda, puoi utilizzare il ClientMetadata parametro nelle azioni [AdminRespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminRespondToAuthChallenge.html)e [RespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RespondToAuthChallenge.html)API. Amazon Cognito non include i dati del ClientMetadata parametro [AdminInitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html)e le operazioni [InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html)API nella richiesta che passa alla funzione di post-autenticazione.  
Amazon Cognito invia `ClientMetadata` a e-mail personalizzate funzioni di attivazione in caso di eventi con le seguenti fonti di attivazione:  
+ `CustomEmailSender_ForgotPassword`
+ `CustomEmailSender_SignUp`
+ `CustomEmailSender_Authentication`
Amazon Cognito non invia `ClientMetadata` eventi trigger con l'origine. `CustomEmailSender_AccountTakeOverNotification`

**userAttributes**  
Una o più coppie chiave-valore che rappresentano gli attributi utente.

### Parametri di risposta del mittente di e-mail personalizzato
<a name="custom-email-sender-response-parameters"></a>

Amazon Cognito non prevede di restituire ulteriori informazioni nella risposta del mittente di e-mail personalizzato. La funzione Lambda deve interpretare l'evento e decrittografare il codice, quindi recapitare il contenuto del messaggio. Una funzione tipica assembla un messaggio e-mail e lo indirizza a un relay SMTP di terze parti.

## Esempio di codice
<a name="custom-email-sender-code-examples"></a>

Nel seguente esempio Node.js viene illustrato come elaborare un evento di messaggio e-mail nella funzione Lambda del mittente di e-mail personalizzata. Per questo esempio si presuppone che la funzione abbia due variabili d'ambiente definite.

**`KEY_ID`**  
L'ID della chiave KMS che desideri utilizzare per crittografare e decrittografare i codici degli utenti.

**`KEY_ARN`**  
Il nome della risorsa Amazon (ARN) della chiave KMS che desideri utilizzare per crittografare e decrittografare i codici degli utenti.

**Per implementare questa funzione**

1. Installa l'ultima versione di NodeJS nel tuo spazio di lavoro per sviluppatori.

1. Crea un nuovo progetto NodeJS nel tuo spazio di lavoro.

1. Inizializza il tuo progetto con. `npm init -y`

1. Crea lo script per la funzione Lambda:. `touch index.mjs`

1. Incolla il contenuto dell'esempio seguente in`index.mjs`.

1. Scarica la dipendenza del progetto, AWS Encryption SDK:`npm install @aws-crypto/client-node`.

1. Comprimi la cartella del progetto in un file:`zip -r my_deployment_package.zip .`.

1. [Implementa il file ZIP nella tua funzione.](https://docs.aws.amazon.com/lambda/latest/dg/nodejs-package.html)

Questa funzione di esempio decrittografa il codice e, per gli eventi di iscrizione, simula l'invio di un messaggio e-mail all'indirizzo e-mail dell'utente.

```
import { KmsKeyringNode, buildClient, CommitmentPolicy } from '@aws-crypto/client-node';

// Configure the encryption SDK client with the KMS key from the environment variables
const { encrypt, decrypt } = buildClient(
    CommitmentPolicy.REQUIRE_ENCRYPT_ALLOW_DECRYPT
);

const generatorKeyId = process.env.KEY_ID;
const keyIds = [process.env.KEY_ARN];
const keyring = new KmsKeyringNode({ generatorKeyId, keyIds });

// Example function to simulate sending email.
// This example logs message details to CloudWatch Logs from your Lambda function.
// Update this function with custom logic that sends an email message to 'emailaddress' with body 'message'.
const sendEmail = async (emailAddress, message) => {
    // Log the destination with the email address masked.
    console.log(`Simulating email send to ${emailAddress.replace(/[^@.]/g, '*')}`);
    // Log the message with the code masked.
    console.log(`Message content: ${message.replace(/\b\d{6,8}\b/g, '********')}`);
    // Simulate API delay
    await new Promise(resolve => setTimeout(resolve, 100));
    console.log('Email sent successfully');
    return true;
};

export const handler = async (event) => {
    try {
        // Decrypt the secret code using encryption SDK
        let plainTextCode;
        if (event.request.code) {
            const { plaintext, messageHeader } = await decrypt(keyring, Buffer.from(event.request.code, 'base64'));
            plainTextCode = Buffer.from(plaintext).toString('utf-8');
        }

        // Handle different trigger sources
        if (event.triggerSource == 'CustomEmailSender_SignUp') {
            const emailAddress = event.request.userAttributes.email;
            const message = `Welcome! Your verification code is: ${plainTextCode}`;
            await sendEmail(emailAddress, message);
        }
        else if (event.triggerSource == 'CustomEmailSender_ResendCode') {
            // Handle resend code
        }
        else if (event.triggerSource == 'CustomEmailSender_ForgotPassword') {
            // Handle forgot password
        }
        else if (event.triggerSource == 'CustomEmailSender_UpdateUserAttribute') {
            // Handle update attribute
        }
        else if (event.triggerSource == 'CustomEmailSender_VerifyUserAttribute') {
            // Handle verify attribute
        }
        else if (event.triggerSource == 'CustomEmailSender_AdminCreateUser') {
            // Handle admin create user
        }
        else if (event.triggerSource == 'CustomEmailSender_Authentication') {
            // Handle authentication
        }
        else if (event.triggerSource == 'CustomEmailSender_AccountTakeOverNotification') {
            // Handle account takeover notification
        }

        return;
    } catch (error) {
        console.error('Error in custom email sender:', error);
        throw error;
    }
};
```