Salta al contenuto

Come posso inviare e-mail utilizzando Lambda e Amazon SES?

5 minuti di lettura
0

Desidero utilizzare AWS Lambda e Amazon Simple Email Service (Amazon SES) per inviare e-mail.

Breve descrizione

Per utilizzare Lambda e Amazon SES per inviare e-mail, completa questi passaggi:

  1. Crea una policy AWS Identity and Access Management (AWS IAM) e un ruolo di esecuzione per consentire a Lambda di eseguire la chiamata API.
  2. Verifica l'identità Amazon SES (dominio o indirizzo e-mail).
  3. Crea o aggiorna una funzione Lambda che includa la logica per inviare e-mail tramite Amazon SES.

Nota: per includere un allegato PDF nelle e-mail, devi utilizzare l'API SendRawEmail di Amazon SES.

Risoluzione

Crea una policy IAM e collegala a un ruolo per consentire a Lambda di eseguire la chiamata API

Completa i seguenti passaggi:

  1. Apri la console IAM.

  2. Utilizza l'editor di policy JSON per creare una policy IAM. Quando crei la policy, incolla il seguente documento di policy JSON nell'editor di policy:

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

    Nota: per ulteriori informazioni ed esempi sulla limitazione dell'accesso a questa policy, consulta Esempi di policy IAM per SES.

  3. Associa la policy IAM a un ruolo IAM.

Verifica l'identità Amazon SES

Per verificare un dominio, consulta Verifica dell'identità di un dominio DKIM con il provider DNS.

Per verificare un indirizzo e-mail, consulta Verifica dell’identità di un indirizzo e-mail.

Crea o aggiorna una funzione Lambda che includa la logica per inviare e-mail

Nei seguenti esempi di codice di funzione Lambda Node.js, Python e Ruby, ove del caso, sostituisci queste variabili per il tuo ambiente:

  • us-west-2 con la Regione AWS in cui si trova l'identità Amazon SES verificata.
  • "RecipientEmailAddress", ... con l'indirizzo o gli indirizzi e-mail a cui desideri inviare l'e-mail.
  • SourceEmailAddress con l'indirizzo e-mail verificato del mittente Amazon SES o con qualsiasi indirizzo e-mail di un dominio Amazon SES verificato. Facoltativamente, modifica il corpo del messaggio ("Test") e la riga dell'oggetto ("Test Email").

Nota: puoi anche progettare il codice funzione Lambda nei runtime supportati che preferisci.

Completa i seguenti passaggi:

  1. Apri la console Lambda, quindi scegli Funzioni.

  2. Se non l'hai ancora fatto, crea una funzione Lambda.
    Nota: puoi utilizzare la console Lambda o creare e caricare un pacchetto di implementazione.

  3. Scegli il nome della funzione, quindi la scheda Configurazione.

  4. Nel pannello Autorizzazioni, esamina il ruolo di esecuzione della funzione.

  5. Verifica che sia presente il ruolo IAM con le autorizzazioni Amazon SES che hai creato in precedenza. Se il ruolo IAM corretto non è presente, assegna il ruolo corretto alla funzione.

  6. Scegli la scheda Codice. Nell'editor di codice integrato, incolla uno dei seguenti esempi di codice funzione. 
    Esempio di codice Node.js versione 18 e successive:

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

    Esempio di codice Node.js versione 16 e precedenti:

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

    Esempio di codice Python versione 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'])
        }

    Esempio di codice Ruby versione 2.7:

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

(Facoltativo) Invia un'e-mail di prova

Completa i seguenti passaggi:

  1. Apri la console Lambda, quindi scegli la funzione.
  2. Configura un evento di test per la funzione.
    Nota: il payload di test è indispensabile, ma non viene utilizzato per questo esempio di codice.
  3. Scegli Esegui il test. Lambda utilizza Amazon SES per inviare l'e-mail di prova al destinatario.

Informazioni correlate

Invio di e-mail tramite Amazon SES

Identity and Access Management in Amazon SES

AWS UFFICIALEAggiornata un anno fa