Amazon SES を使用してEメールを送信します - AWS SDK for JavaScript

AWS SDK for JavaScript V3 API リファレンスガイドでは、AWS SDK for JavaScript バージョン3 (V3) のすべての API オペレーションについて詳しく説明します。

Amazon SES を使用してEメールを送信します

JavaScript code example that applies to Node.js execution

この Node.js コード例は以下を示しています。

  • テキストまたは HTML の E メールを送信します。

  • E メールテンプレートに基づいて E メールを送信します。

  • E メールテンプレートに基づいて一括 E メールを送信します。

Amazon SES API は、E メールメッセージの構成に対する制御の程度に応じて、フォーマット済みと raw の 2 つの異なる方法で E メールを送信できます。詳細については、「Amazon SESAPIを使用したフォーマット済みEメールの送信」および「AmazonSESAPIを使用した生のEメールの送信」を参照してください。

シナリオ

この例では、一連の Node.js モジュールを使用してさまざまな方法で E メールを送信します。Node.js モジュールは SDK for JavaScript を使用し、SES クライアントクラスの次のメソッドを使用して E メールテンプレートを作成して使用します。

前提条件タスク

この例をセットアップして実行するには、まず次のタスクを完了する必要があります。

  • これらの Node TypeScript の例を実行するようにプロジェクト環境を設定し、必要な AWS SDK for JavaScript とサードパーティーのモジュールをインストールします。「GitHub」の指示に従います。 

  • ユーザーの認証情報を使用して、共有設定ファイルを作成します。共有認証情報ファイルの提供の詳細については、「AWS SDK とツールのリファレンスガイド」の「共有設定ファイルおよび認証情報ファイル」を参照してください。

重要

これらの例は、ECMAScript6 (ES6) を使用してクライアントサービスオブジェクトとコマンドをimport/export する方法を示します。

  • これには Node.js バージョン13.x以降が必要です。Node.js の最新バージョンをダウンロードしてインストールするには、「Node.js ダウンロード」を参照してください。

  • CommonJS 構文を使用する場合は、「JavaScript ES6/CommonJS 構文」を参照してください。

E メールメッセージの送信要件

Amazon SES は E メールメッセージを作成し、送信するメッセージをすぐにキューに入れます。SendEmailCommand メソッドを使用して E メールを送信するには、メッセージが以下の要件を満たしている必要があります。

  • 検証済みの E メールアドレスまたはドメインからメッセージを送信する必要があります。検証されていないアドレスまたはドメインを使用して E メールを送信しようとすると、"Email address not verified" エラーが発生します。

  • アカウントがまだ Amazon SES サンドボックスにある場合は、検証済みのアドレスまたはドメイン、または Amazon SES メールボックスシミュレーターに関連付けられた E メールアドレスにのみ送信できます。詳細については、Amazon Simple Email Service デベロッパーガイドの [ Eメールアドレスとドメインの検証]を参照してください。

  • 添付ファイルを含むメッセージの合計サイズは 10 MB より小さくなければなりません。

  • メッセージには少なくとも 1 つの受信者の E メールアドレスを含める必要があります。受信者アドレスは、To: アドレス、CC: アドレス、または BCC: アドレスのいずれかです。受信者の E メールアドレスが無効な場合 (つまり、UserName@[SubDomain.]Domain.TopLevelDomain のフォーマットではない場合)、メッセージに他の有効な受信者が含まれていても、メッセージ全体が拒否されます。

  • メッセージには、To:、CC:、BCC: のフィールド全体で 50 人を超える受信者を含めることはできません。それ以上の数のユーザーに E メールメッセージを送信する必要がある場合は、受信者リストを 50 ユーザー以下のグループに分割し、sendEmail メソッドを数回呼び出して各グループにメッセージを送信することができます。

E メールを送信する

この例では、Node.js モジュールを使用して Amazon SES で E メールを送信します。

libsディレクトリを作成し、ファイル名sesClient.jsでNode.js モジュールを作成します。以下のコードをコピーし、ペーストしてAmazon SES クライアントオブジェクトを作成します。REGION(地域)を、AWS地域に置き換えます。

import { SESClient } from "@aws-sdk/client-ses"; // Set the AWS Region. const REGION = "us-east-1"; // Create SES service object. const sesClient = new SESClient({ region: REGION }); export { sesClient };

このサンプルコードは、このGitHubにで見つけられます。

ses_sendemail.jsというファイル名で Node.js モジュールを作成します。必要なクライアントとパッケージのインストールを含め、前述のようにSDKを設定します。

送信者と受信者のアドレス、件名、プレーンテキストおよび HTML 形式のEメール本文などを含む、送信するEメールを定義するパラメータ値を SESクライアントクラスのSendEmailCommandメソッドに渡すオブジェクトを作成します。SendEmailCommandメソッドを呼び出すには、Amazon SES サービスオブジェクトを起動し、パラメータを渡します。

注記

この例では、必要なAWSサービス V3 パッケージクライアント、V3 コマンドをインポートして使用し、また非同期/待機パターンでsendメソッドを使用します。この例は、代わりに少し変更を加えてV2コマンドで作成できます。詳細については、「v3 コマンドの使用」を参照してください。

注記

toAddress をE メールの宛先の E メールアドレスに、fromAddress を E メールの送信元の E メールアドレスに置き換えます。

import { SendEmailCommand } from "@aws-sdk/client-ses"; import { sesClient } from "./libs/sesClient.js"; const createSendEmailCommand = (toAddress, fromAddress) => { return new SendEmailCommand({ Destination: { /* required */ CcAddresses: [ /* more items */ ], ToAddresses: [ toAddress, /* more To-email addresses */ ], }, Message: { /* required */ Body: { /* required */ Html: { Charset: "UTF-8", Data: "HTML_FORMAT_BODY", }, Text: { Charset: "UTF-8", Data: "TEXT_FORMAT_BODY", }, }, Subject: { Charset: "UTF-8", Data: "EMAIL_SUBJECT", }, }, Source: fromAddress, ReplyToAddresses: [ /* more items */ ], }); }; const run = async () => { const sendEmailCommand = createSendEmailCommand( "recipient@example.com", "sender@example.com", ); try { return await sesClient.send(sendEmailCommand); } catch (caught) { if (caught instanceof Error && caught.name === "MessageRejected") { /** @type { import('@aws-sdk/client-ses').MessageRejected} */ const messageRejectedError = caught; return messageRejectedError; } throw caught; } };

この例を実行するには、コマンドプロンプトで以下を入力します。E メールは Amazon SES による送信のためにキューに登録されます。

node ses_sendemail.js

このサンプルコードは、 [ here on GitHub ]で見つけられます。

テンプレートを使用した E メールを送信する

この例では、Node.js モジュールを使用して Amazon SES で E メールを送信します。ses_sendtemplatedemail.js というファイル名で Node.js モジュールを作成します。必要なクライアントとパッケージのインストールを含め、前述のようにSDKを設定します。

送信者と受信者のアドレス、件名、プレーンテキストおよび HTML 形式の E メール本文など、送信する E メールを定義するパラメータ値を SendTemplatedEmailCommand クライアントクラスの SES メソッドに渡すオブジェクトを作成します。SendTemplatedEmailCommandメソッドを呼び出すには、Amazon SES クライアントサービスオブジェクトを起動し、パラメータを渡します。

注記

この例では、必要なAWSサービス V3 パッケージクライアント、V3 コマンドをインポートして使用し、また非同期/待機パターンでsendメソッドを使用します。この例は、代わりに少し変更を加えてV2コマンドで作成できます。詳細については、「v3 コマンドの使用」を参照してください。

注記

REGION を AWS リージョンに、USER を E メールの宛先のユーザー名と E メールアドレスに、VERIFIED_EMAIL を E メールの送信元の E メールアドレスに、TEMPLATE_NAME をテンプレート名に置き換えます。

import { SendTemplatedEmailCommand } from "@aws-sdk/client-ses"; import { getUniqueName, postfix, } from "@aws-doc-sdk-examples/lib/utils/util-string.js"; import { sesClient } from "./libs/sesClient.js"; /** * Replace this with the name of an existing template. */ const TEMPLATE_NAME = getUniqueName("ReminderTemplate"); /** * Replace these with existing verified emails. */ const VERIFIED_EMAIL = postfix(getUniqueName("Bilbo"), "@example.com"); const USER = { firstName: "Bilbo", emailAddress: VERIFIED_EMAIL }; /** * * @param { { emailAddress: string, firstName: string } } user * @param { string } templateName - The name of an existing template in Amazon SES. * @returns { SendTemplatedEmailCommand } */ const createReminderEmailCommand = (user, templateName) => { return new SendTemplatedEmailCommand({ /** * Here's an example of how a template would be replaced with user data: * Template: <h1>Hello {{contact.firstName}},</h1><p>Don't forget about the party gifts!</p> * Destination: <h1>Hello Bilbo,</h1><p>Don't forget about the party gifts!</p> */ Destination: { ToAddresses: [user.emailAddress] }, TemplateData: JSON.stringify({ contact: { firstName: user.firstName } }), Source: VERIFIED_EMAIL, Template: templateName, }); }; const run = async () => { const sendReminderEmailCommand = createReminderEmailCommand( USER, TEMPLATE_NAME, ); try { return await sesClient.send(sendReminderEmailCommand); } catch (caught) { if (caught instanceof Error && caught.name === "MessageRejected") { /** @type { import('@aws-sdk/client-ses').MessageRejected} */ const messageRejectedError = caught; return messageRejectedError; } throw caught; } };

この例を実行するには、コマンドプロンプトで以下を入力します。E メールは Amazon SES による送信のためにキューに登録されます。

node ses_sendtemplatedemail.js

このサンプルコードは、この GitHub にで見つけられます。

テンプレートを使用した一括Eメールを送信します

この例では、Node.js モジュールを使用して Amazon SES で E メールを送信します。

libsディレクトリを作成し、ファイル名sesClient.jsでNode.js モジュールを作成します。以下のコードをコピーし、ペーストしてAmazon SES クライアントオブジェクトを作成します。REGION(地域)を、AWS地域に置き換えます。

import { SESClient } from "@aws-sdk/client-ses"; // Set the AWS Region. const REGION = "us-east-1"; // Create SES service object. const sesClient = new SESClient({ region: REGION }); export { sesClient };

このサンプルコードは、このGitHubにで見つけられます。

ses_sendbulktemplatedemail.jsというファイル名で Node.js モジュールを作成します。必要なクライアントとパッケージのインストールを含め、前述のようにSDKを設定します。

送信者と受信者のアドレス、件名、プレーンテキストおよび HTML 形式のEメール本文などを含む、送信するEメールを定義するパラメータ値を SESクライアントクラスのSendBulkTemplatedEmailCommandメソッドに渡すオブジェクトを作成します。SendBulkTemplatedEmailCommandメソッドを呼び出すには、Amazon SES サービスオブジェクトを起動し、パラメータを渡します。

注記

この例では、必要なAWSサービス V3 パッケージクライアント、V3 コマンドをインポートして使用し、また非同期/待機パターンでsendメソッドを使用します。この例は、代わりに少し変更を加えてV2コマンドで作成できます。詳細については、「v3 コマンドの使用」を参照してください。

注記

USERS を E メールの宛先のユーザー名と E メールアドレスに、VERIFIED_EMAIL_1 を E メールの送信元の E メールアドレスに、TEMPLATE_NAME をテンプレート名に置き換えます。

import { SendBulkTemplatedEmailCommand } from "@aws-sdk/client-ses"; import { getUniqueName, postfix, } from "@aws-doc-sdk-examples/lib/utils/util-string.js"; import { sesClient } from "./libs/sesClient.js"; /** * Replace this with the name of an existing template. */ const TEMPLATE_NAME = getUniqueName("ReminderTemplate"); /** * Replace these with existing verified emails. */ const VERIFIED_EMAIL_1 = postfix(getUniqueName("Bilbo"), "@example.com"); const VERIFIED_EMAIL_2 = postfix(getUniqueName("Frodo"), "@example.com"); const USERS = [ { firstName: "Bilbo", emailAddress: VERIFIED_EMAIL_1 }, { firstName: "Frodo", emailAddress: VERIFIED_EMAIL_2 }, ]; /** * * @param { { emailAddress: string, firstName: string }[] } users * @param { string } templateName the name of an existing template in SES * @returns { SendBulkTemplatedEmailCommand } */ const createBulkReminderEmailCommand = (users, templateName) => { return new SendBulkTemplatedEmailCommand({ /** * Each 'Destination' uses a corresponding set of replacement data. We can map each user * to a 'Destination' and provide user specific replacement data to create personalized emails. * * Here's an example of how a template would be replaced with user data: * Template: <h1>Hello {{name}},</h1><p>Don't forget about the party gifts!</p> * Destination 1: <h1>Hello Bilbo,</h1><p>Don't forget about the party gifts!</p> * Destination 2: <h1>Hello Frodo,</h1><p>Don't forget about the party gifts!</p> */ Destinations: users.map((user) => ({ Destination: { ToAddresses: [user.emailAddress] }, ReplacementTemplateData: JSON.stringify({ name: user.firstName }), })), DefaultTemplateData: JSON.stringify({ name: "Shireling" }), Source: VERIFIED_EMAIL_1, Template: templateName, }); }; const run = async () => { const sendBulkTemplateEmailCommand = createBulkReminderEmailCommand( USERS, TEMPLATE_NAME, ); try { return await sesClient.send(sendBulkTemplateEmailCommand); } catch (caught) { if (caught instanceof Error && caught.name === "MessageRejected") { /** @type { import('@aws-sdk/client-ses').MessageRejected} */ const messageRejectedError = caught; return messageRejectedError; } throw caught; } };

この例を実行するには、コマンドプロンプトで以下を入力します。E メールは Amazon SES による送信のためにキューに登録されます。

node ses_sendbulktemplatedemail.js

このサンプルコードは、このGitHubにで見つけられます。