目次
- Amazon SESとは
- どうしてSESを使うのか?
- 実際に使ってみた
- NestJSによる実装
- 結果
Amazon SESとは
Amazon SESは(Amazon Simple Email Service)の略で、既存ドメインまたは既存メールアドレスを利用して、メール配信をしてくれるサービスです。
どうしてAmazon SESを使うのか?
Amazon SESを使うことでEC2や様々なAWS内のサービスと連携され、機能の追加であったり管理が簡単になるためです。また、通常大規模なEメールプラットフォームは複雑でコストがかかったり、各社のメールボックスプランのSMTPを利用して大量のメールを送信する場合は通信制限などの問題があったりします。そこでAmazon SESを用いることでメール送信機能における費用対効果を向上させることができるといったメリットが存在します。
実際に使ってみた
今回はEC2、NestJS(TS)を用いて、NestJSからSESに対してメール送信の要求を行います。
-
AWS management consoleにサインインし、SES consoleにアクセス
-
サイドバーの「検証済みID」> 「IDの作成」をクリックすると以下の画面が表示される
-
IDタイプを今回は「Eメールアドレス」に指定して、メールの送信に用いるEメールアドレスを以下の赤枠に入力し、「IDの作成」をクリック
-
先ほど作成したEメールアドレスのIDステータスが「検証保留中」の状態で追加されていることを確認(この時点ではまだEC2を介してメール送信はできない)
-
作成したメールアドレスに確認メールが届くため、その本文に添付されている確認URLをクリックすることで検証が完了
これにてメールアドレスの検証が完了しました。
NestJS設定
AWS SDKをインストール
yarn add aws-sdk
環境変数名
自分のプロジェクトのenvファイルを参照してください
# aws ses
ACCESS_KEY=""
SECRET_KEY=""
REGION=""
ラッパー関数作成
自分は共通関数をまとめるためのutilsディレクトリを作成し、その配下のファイルにこのラッパー関数を記述しました。
import AWS from 'aws-sdk';
export async function sendEmail(from: string, to: string, subject: string, body: string) {
if (process.env.NODE_ENV === 'development')
// ローカル環境ならメールを送らない
return console.log({ from, to, subject, html });
const ses = new AWS.SES({
accessKeyId: process.env.ACCESS_KEY,
secretAccessKey: process.env.SECRET_KEY,
region: process.env.REGION,
});
const params: AWS.SES.SendEmailRequest = {
Destination: {
ToAddresses: [to],
},
Message: {
Body: {
Text: {
Data: body,
},
},
Subject: {
Data: subject,
},
},
Source: from,
};
return this.ses.sendEmail(params).promise();
}
あとは任意のタイミングでこの関数に適切な引数を渡して呼び出すだけです。