aws-sdkを使用して、sesでメールを送信する


lambda内で処理した結果をsesを使用してメールで送信する。

環境

serverless -v

Framework Core: 2.1.1
Plugin: 4.0.4
SDK: 2.3.2
Components: 3.1.3

node -v

v14.7.0

目次

  1. メールアドレス登録
  2. serverless create
  3. コード追加

メールアドレス登録

awsマネジメントコンソールにアクセス、sesのコンソール画面に移動。

画面上部のVerify a New Email Addressをクリックする。

クリックしたらモーダルウィンドウが出てくるので、登録したいメールアドレスをクリック。
登録したら、awsから認証のメールが届くので、届いたメールのリンクをクリックし、認証を完了させる。

sandboxから外す

このままでは、認証を得たメールアドレスに対してしかメールを送信することができません。
登録したメールアドレスをsandboxから外しましょう。

公式ドキュメント

やることは簡単で、
Email Sending > Sending Statisticsより、Edit your account detailsをクリック

Enable Production AccessをYesに変更するだけです。
他の項目は記入しなくても承認されるかと思われます。
一応他項目の詳細を記入しておきます。

  • Mail Typeは送信する予定のメールの種類を選択します。特に理由がなければ、Transactionalのままでokです。
  • Website Urlは所属している企業の会社説明のurlがベターかと思います。これの用途はAWSが、これから送信する予定のコンテンツの種類を理解するためです。なので、個人開発をしている方はtwitterなどのリンクでもいいかと思います。
  • Use case descriptionは、Amazon SES を使用してメールを送信する方法を記入します。
  • Preferred contact languageは母国語を選択してください。

Submit for reviewをクリック後、10分ほどで、Production AccessがSandboxからEnabledに変更されると思います。変更されたら承認されたということです!🎉

serverless create

今回はTypeScriptを使用します。

serverless create -t aws-nodejs-typescript -n sample -p ./sample
npm install
npm install aws-sdk

コードを追加

今回は、受け取ったevent変数の文字列を送信してみたいと思います。

handler.ts
export const index = async (event: string) => {
  const params = {
    Destination: {
      ToAddresses: "送信先のメールアドレス",
    },
    Message: {
      Body: {
        Text: {
          Data: `event`,
          Charset: "utf-8",
        },
      },

      Subject: {
        Data: "テスト",
        Charset: "utf-8",
      },
    },
    Source: "sesに登録したメールアドレス",
  };
  return ses.sendEmail(params).promise();
};

デプロイ

sls deploy -v

AWSコンソールのlambdaの画面から今回デプロイした関数に対してテストを実行すると、引数に入れた文字列が本文となって、メールが送信されていることが確認できるかと思います。

参考url
https://docs.aws.amazon.com/ja_jp/ses/latest/DeveloperGuide/request-production-access.html
https://dev.classmethod.jp/articles/lambda-to-ses/