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

Lecture de 6 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 un e-mail à partir d'une fonction Lambda à l'aide d'Amazon SES, procédez comme suit :

1.    Créez une politique AWS de gestion des identités et des accès (IAM) et un rôle d'exécution pour que Lambda exécute l'appel d'API.

2.    Vérifiez votre identité Amazon SES (domaine ou adresse e-mail).

3.    Créez ou mettez à 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'opération d'API Amazon SES SendRawEmail. Pour plus d'informations, reportez-vous à Envoi d'e-mails bruts à l'aide de l'API Amazon SES sur GitHub.

Résolution

Remarque : les exemples de code de fonctions Lambda Node.js, Python et Ruby présentés dans cet article doivent être modifiés en fonction de votre cas d'utilisation. Adaptez l'exemple à votre cas d'utilisation ou créez le vôtre dans le langage de programmation de votre choix.

Créer une politique IAM et un rôle d'exécution pour que Lambda exécute l'appel d'API

1.    Créez une politique IAM à l'aide de l'éditeur de stratégie JSON. Lorsque vous créez la politique, collez le document de stratégie JSON suivant dans l'éditeur de stratégie :

{
 "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, reportez-vous à Exemples de politiques IAM pour Amazon SES.

2.    Associez la politique IAM à un rôle IAM. Pour obtenir des instructions, reportez-vous à Pour utiliser une politique gérée en tant que politique d'autorisations pour une identité (console) dans Ajouter des autorisations d'identité IAM (console).

Remarque : vous allez attribuer ce rôle IAM à votre fonction Lambda au cours des étapes suivantes.

Vérifiez votre identité Amazon SES (domaine ou adresse e-mail)

Pour vérifier un domaine, reportez-vous à Vérification de l'identité d'un domaine DKIM auprès de votre fournisseur DNS.

Pour vérifier une adresse e-mail, reportez-vous à 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 via Amazon SES

1.    Si ce n'est pas déjà fait, créez une fonction Lambda.

Remarque : vous pouvez créer une fonction Lambda à l'aide de la console Lambda ou en créant et en chargeant un package de déploiement.

2.    Dans la console Lambda, dans le volet de navigation de gauche, choisissez Fonctions.

3.    Choisissez le nom de votre fonction.

4.    Dans l'onglet Configuration, dans le volet Autorisations, examinez le rôle d'exécution de la fonction. 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.

5.    Sous Code de fonction, dans le volet de l'éditeur, collez l'un des exemples de code de fonction suivants. Veillez à utiliser l'exemple correspondant à votre environnement d'exécution et à votre version de Node.js, Python ou Ruby.

Important : remplacez us-west-2 par la région AWS dans laquelle se trouve votre identité Amazon SES vérifiée. Remplacez « RecipientEmailAddress »,... par l'adresse e-mail ou les adresses auxquelles vous souhaitez envoyer l'e-mail. Remplacez 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. Modifiez éventuellement le corps du message («Test») et la ligne d'objet («Test Email»).

Pour les versions 18 et ultérieures de Node.js, consultez l'exemple de code suivant :

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

Pour les versions 16 et antérieures de Node.js, reportez-vous à l'exemple de code suivant :

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

Pour la version 3.9 de Python, reportez-vous à l'exemple de code suivant :

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

Pour la version 2.7 de Ruby, reportez-vous à l'exemple de code suivant :

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

Pour plus d'informations sur l'utilisation de l'API sendEmail, reportez-vous à la documentation du kit AWS SDK pour JavaScript, Python, Ruby et Java V2.

6.    Choisissez Déployer.

(Facultatif) Envoyer un e-mail de test

1.    Dans la console Lambda, configurez un événement de test pour votre fonction.

Remarque : la charge utile de test est requise mais n'est pas utilisée pour cet exemple de code.

2.    Choisissez Test. 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 OFFICIEL
AWS OFFICIELA mis à jour il y a un an