Come faccio a inviare e-mail utilizzando Lambda e Amazon SES?

5 minuti di lettura
0

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

Breve descrizione

Per inviare e-mail da una funzione Lambda utilizzando Amazon SES, completa i seguenti passaggi:

1.    Crea una policy di AWS Identity and Access Management (IAM) e un ruolo di esecuzione per Lambda per eseguire la chiamata API.

2.    Verifica la tua identità Amazon SES (dominio o indirizzo e-mail).

3.    Crea o aggiorna una funzione Lambda che includa la logica per l'invio di e-mail tramite Amazon SES.

Nota: per includere un allegato PDF alle e-mail, occorre utilizzare l'operazione API ](https://docs.aws.amazon.com/ses/latest/DeveloperGuide/send-email-raw.html)SendRawEmail di Amazon SES[. Per ulteriori informazioni, consulta Sending raw email using the Amazon SES API su GitHub.

Risoluzione

Nota: gli esempi di codice delle funzioni Lambda Node.js, Python e Ruby in questo articolo richiedono modifiche in base al caso d'uso. Adatta l'esempio al tuo caso d'uso o progettane uno personalizzato nel tuo linguaggio di programmazione preferito.

Crea una policy IAM e un ruolo di esecuzione per Lambda per eseguire la chiamata API

1.    Crea una policy IAM utilizzando l'editor di policy JSON. 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 su come limitare l'accesso a questa policy, consulta Esempi di policy IAM per SES.

2.    Associa la policy IAM a un ruolo IAM. Per le istruzioni, consulta la sezione Utilizzare una policy gestita come policy delle autorizzazioni per un'identità (console) in Aggiunta di autorizzazioni per identità IAM (console).

Nota: assegnerai questo ruolo IAM alla tua funzione Lambda nei seguenti passaggi.

Verifica la tua identità Amazon SES (dominio o indirizzo e-mail)

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

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

Crea o aggiorna una funzione Lambda che includa la logica per l'invio di e-mail tramite Amazon SES

1.    Se non l'hai ancora fatto, crea una funzione Lambda.

Nota: è possibile creare una funzione Lambda utilizzando la console Lambda o creando e caricando un pacchetto di implementazione.

2.    Nella console Lambda, nel riquadro di navigazione a sinistra, scegli Functions (Funzioni).

3.    Scegli il nome della funzione.

4.    Nella scheda Configuration (Configurazione), nel riquadro Permissions (Autorizzazioni), esamina l'Execution Role (Ruolo di esecuzione) della funzione. Verifica che sia elencato il ruolo IAM con le autorizzazioni Amazon SES che hai creato in precedenza. Se il ruolo IAM corretto non è in elenco, assegna il ruolo corretto alla funzione.

5.    In Function code (Codice funzione), nel riquadro dell'editor, incolla uno dei seguenti esempi di codice di funzione. Assicurati di utilizzare l'esempio pertinente per il tuo runtime e la tua versione di Node.js, Python o Ruby.

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

Per le versioni 18 e successive di Node.js, vedi il seguente codice di esempio:

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

Per le versioni 16 e precedenti di Node.js, vedi il seguente codice di esempio:

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

Per la versione 3.9 di Python, vedi il seguente codice di esempio:

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'])
    }

Per la versione 2.7 di Ruby, vedi il seguente codice di esempio:

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

Per ulteriori informazioni sull'uso dell'API sendEmail, consulta la documentazione dell'SDK AWS per JavaScript, Python, Ruby e Java V2.

6.    Scegli Deploy (Distribuisci).

(Facoltativo) Invia un'e-mail di prova

1.    Nella console Lambda, configura un evento di test per la tua funzione.

Nota: il payload di test è obbligatorio ma non viene utilizzato per questo esempio di codice.

2.    Scegli 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 UFFICIALE
AWS UFFICIALEAggiornata un anno fa