1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

[AWS]SESによるメール送信をやってみた

Last updated at Posted at 2023-03-26

目次

  1. Amazon SESとは
  2. どうしてSESを使うのか?
  3. 実際に使ってみた
  4. NestJSによる実装
  5. 結果

Amazon SESとは

Amazon SESは(Amazon Simple Email Service)の略で、既存ドメインまたは既存メールアドレスを利用して、メール配信をしてくれるサービスです。

どうしてAmazon SESを使うのか?

Amazon SESを使うことでEC2や様々なAWS内のサービスと連携され、機能の追加であったり管理が簡単になるためです。また、通常大規模なEメールプラットフォームは複雑でコストがかかったり、各社のメールボックスプランのSMTPを利用して大量のメールを送信する場合は通信制限などの問題があったりします。そこでAmazon SESを用いることでメール送信機能における費用対効果を向上させることができるといったメリットが存在します。

実際に使ってみた

今回はEC2、NestJS(TS)を用いて、NestJSからSESに対してメール送信の要求を行います。

  1. AWS management consoleにサインインし、SES consoleにアクセス

  2. サイドバーの「検証済みID」> 「IDの作成」をクリックすると以下の画面が表示される

  3. IDタイプを今回は「Eメールアドレス」に指定して、メールの送信に用いるEメールアドレスを以下の赤枠に入力し、「IDの作成」をクリック
    Screen Shot 2023-03-26 at 13.37.27.png

  4. 先ほど作成したEメールアドレスのIDステータスが「検証保留中」の状態で追加されていることを確認(この時点ではまだEC2を介してメール送信はできない)
    Screen Shot 2023-03-26 at 22.08.30.png

  5. 作成したメールアドレスに確認メールが届くため、その本文に添付されている確認URLをクリックすることで検証が完了

  6. 先ほど「検証保留中」だったIDステータスが「検証済み」に変わっていたらそのメールアドレスは利用可能
    Screen Shot 2023-03-26 at 22.04.05.png

これにてメールアドレスの検証が完了しました。

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

あとは任意のタイミングでこの関数に適切な引数を渡して呼び出すだけです。

結果

きちんとSESによるメール送信ができていることを確認できました!
Screen Shot 2023-03-26 at 22.45.07.png

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?