如何使用 Lambda 和 Amazon SES 來傳送電子郵件?
我想要使用 AWS Lambda 和 Amazon Simple Email Service (Amazon SES) 來傳送電子郵件。
簡短描述
若要使用 Amazon SES 從 Lambda 函數傳送電子郵件,請完成以下步驟:
1. 為 Lambda 建立 AWS Identity and Access Management (IAM) 政策和執行角色,以執行 API 呼叫。
2. 驗證您的 Amazon SES 身分 (網域或電子郵件地址)。
3. 建立或更新 Lambda 函數,其中包含透過 Amazon SES 傳送電子郵件的邏輯。
**注意:**若要在電子郵件中包含 PDF 附件,您必須使用 Amazon SES SendRawEmail API 操作。如需詳細資訊,請參閱 GitHub 上的使用 Amazon SES API 傳送原始電子郵件。
解決方法
**注意:**本文中的 Node.js、Python 和 Ruby Lambda 函數程式碼範例需要根據您的使用案例來修改。調整範例以適用您的使用案例,或使用您的偏好程式設計語言來設計您自己的範例。
為 Lambda 建立 IAM 政策和執行角色以執行 API 呼叫
1. 使用 JSON 政策編輯器建立 IAM 政策。您建立政策時,請將下列 JSON 政策文件貼到政策編輯器:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ses:SendEmail", "ses:SendRawEmail" ], "Resource": "*" } ] }
**注意:**如需如何限制存取此政策的詳細資訊和範例,請參閱 Amazon SES 的範例 IAM 政策。
2. 將 IAM 政策連接到 IAM 角色。如需說明,請參閱新增 IAM 身分許可 (主控台) 中將受管理政策當做身分的許可政策來使用 (主控台) 一節。
**注意:**您要依照下列步驟將此 IAM 角色指派給您的 Lambda 函數。
驗證您的 Amazon SES 身分 (網域或電子郵件地址)
若要驗證網域,請參閱驗證 DNS 提供者的 DKIM 網域身分。
若要驗證電子郵件地址,請參閱驗證電子郵件地址身分。
建立或更新 Lambda 函數,其中包含透過 Amazon SES 傳送電子郵件的邏輯
1. 如果您還沒有這樣做,請建立 Lambda 函數。
**注意:**您可以藉由使用 Lambda 主控台或建立並上傳部署套件,來建立 Lambda 函數。
2. 在 Lambda 主控台的左側導覽窗格中,選擇函數。
3. 選擇函數的名稱。
4. 在組態標籤上的許可窗格中,查看函數的執行角色。確認已列出您先前所建立具有 Amazon SES 許可的 IAM 角色。如果未列出正確的 IAM 角色,請將正確的角色指派給函數。
5. 在函數程式碼下的編輯器窗格中,貼上下列其中一個函數程式碼範例。請務必使用適用於您執行期以及 Node.js、Python 或 Ruby 版本的相關範例。
**重要:**將 us-west-2 取代為已驗證的 Amazon SES 身分所在的 AWS 區域。將 "RecipientEmailAddress", ... 取代為您想要傳送電子郵件的一個或多個電子郵件地址。將 SourceEmailAddress 取代為經過 Amazon SES 驗證的寄件者電子郵件地址,或經過 Amazon SES 驗證網域中的任何電子郵件地址。或者,編輯訊息內文 (「測試」) 和主旨行 (「測試電子郵件」)。
若為 Node.js 第 18 版及更新版本,請參閱下列範例程式碼:
// 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. } };
若為 Node.js 第 16 版及更早版本,請參閱下列範例程式碼:
// 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() };
若為 Python 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']) }
若為 Ruby 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
如需使用 sendEmail API 的詳細資訊,請參閱適用於 JavaScript、Python、Ruby 和 Java V2 的 AWS SDK 文件。
6. 選擇部署。
(選用) 傳送測試電子郵件
1. 在 Lambda 主控台中,為您的函數設定測試事件。
**注意:**測試有效負載為必要項目,但未用於此程式碼範例。
2. 選擇測試。Lambda 會使用 Amazon SES 將測試電子郵件傳送給您的收件者。
相關資訊
相關內容
- 已提問 2 個月前lg...
- 已提問 1 個月前lg...
- 已提問 20 天前lg...
- AWS 官方已更新 1 年前