Passer au contenu

Comment puis-je envoyer un e-mail à l'aide de Lambda et d'Amazon SES ?

Lecture de 5 minute(s)
0

Je souhaite envoyer des e-mails à l'aide d'AWS Lambda et d'Amazon Simple Email Service (Amazon SES).

Brève description

Pour envoyer des e-mails à l’aide de Lambda et d’Amazon SES, procédez comme suit :

  1. Créez une politique de Gestion des identités et des accès AWS (AWS IAM) et un rôle d'exécution afin que Lambda exécute l'appel d'API.
  2. Vérifiez votre identité Amazon SES (domaine ou adresse e-mail).
  3. Créer ou mettre à jour une fonction Lambda qui inclut une logique d'envoi d'e-mails via Amazon SES

Remarque : Pour inclure une pièce jointe au format PDF dans vos e-mails, vous devez utiliser l'API SendRawEmail d’Amazon SES.

Résolution

Créer une politique IAM et l’associer à un rôle afin que Lambda exécute l'appel d'API

Procédez comme suit :

  1. Ouvrez la console IAM.

  2. Utilisez l'éditeur de stratégie JSON pour créer une politique IAM. Lorsque vous créez la politique, collez le document de politique JSON suivant dans l'éditeur de politique :

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

    Remarque : Pour plus d'informations et des exemples sur la manière de restreindre l'accès à cette politique, consultez la section Exemples de politiques IAM pour SES.

  3. Associez la politique IAM à un rôle IAM.

Vérifier votre identité Amazon SES

Pour vérifier un domaine, consultez la section Vérification de l'identité d'un domaine DKIM auprès de votre fournisseur DNS.

Pour vérifier une adresse e-mail, consultez la section Vérification de l'identité d'une adresse e-mail.

Créer ou mettre à jour une fonction Lambda qui inclut une logique d’envoi d’e-mails

Dans les exemples de code de fonction Lambda Node.js, Python et Ruby, si nécessaire, remplacez ces variables pour votre environnement :

  • us-west-2 par la région AWS dans laquelle se trouve votre identité Amazon SES vérifiée.
  • « RecipientEmailAddress »,... par l'adresse e-mail ou les adresses auxquelles vous souhaitez envoyer l'e-mail.
  • SourceEmailAddress par votre adresse e-mail d'expéditeur vérifiée par Amazon SES ou par toute adresse e-mail provenant d'un domaine vérifié par Amazon SES. Vous pouvez éventuellement modifier le corps du message («Test») et la ligne d'objet («Test Email»).

Remarque : Vous pouvez également concevoir votre propre code de fonction Lambda dans vos environnements d'exécution pris en charge préférés.

Procédez comme suit :

  1. Ouvrez la console Lambda, puis sélectionnez Fonctions.

  2. Si cela n'est pas déjà fait, créez une fonction Lambda.
    Remarque : Vous pouvez utiliser la console Lambda ou créer et charger un package de déploiement.

  3. Choisissez le nom de votre fonction, puis choisissez l'onglet Configuration.

  4. Dans le volet Autorisations, examinez le rôle d'exécution de la fonction.

  5. Vérifiez que le rôle IAM doté des autorisations Amazon SES que vous avez créé précédemment est répertorié. Si le rôle IAM correct n'est pas répertorié, attribuez-le à la fonction.

  6. Sélectionnez l’onglet Code. Dans l'éditeur de code intégré, collez l'un des exemples de code de fonction suivants. 
    Exemple de code Node.js versions 18 et ultérieures :

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

    Exemple de code Node.js versions 16 et antérieures :

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

    Exemple de code Python version 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'])
        }

    Exemple de code Ruby version 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. Sélectionnez Déployer.

(Facultatif) Envoyer un e-mail de test

Procédez comme suit :

  1. Ouvrez la console Lambda, puis choisissez votre fonction.
  2. Configurez un événement de test pour votre fonction.
    Remarque : Les données utiles de test sont requises mais ne sont pas utilisées pour cet exemple de code.
  3. Sélectionnez Tester. Lambda utilise Amazon SES pour envoyer l'e-mail de test à votre destinataire.

Informations connexes

Envoi d'e-mails à l'aide d'Amazon SES

Gestion des identités et des accès dans Amazon SES

AWS OFFICIELA mis à jour il y a 8 mois