テックブログ

友達の結婚式のWEB招待状をAWSで作ってみた_7


https://immersed-in-knowing.com/?p=326 の続きです。

サーバーに届いた情報をAmazon Simple Email Service (Amazon SES)を使用してメールを送信します。
https://docs.aws.amazon.com/ja_jp/ses/latest/dg/Welcome.html
SESの詳しい説明は公式を見てください。

本記事でやること

  1. SESの登録
  2. SES設定をIAMに付与する
  3. WebサーバーからSES経由でメールを送信する


1.SESの登録

AWSのコンソールよりSESと検索してSESサービス画面を開きます。「使用を開始」を押下します。

自分で受け取れる(任意の)メールアドレスを入力して、「次へ」を押下します。
最終的にはここで登録したメールアドレスへ送信します。

ドメインを入力して「次へ」を押下します。
ドメインは以下で取得しています。
https://immersed-in-knowing.com/?p=301#:~:text=%E5%BF%B5%E3%81%AE%E3%81%9F%E3%82%81%EF%BC%89-,4.AWS%E4%B8%8A%E3%81%A7%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%E3%82%92%E5%8F%96%E5%BE%97%E3%81%99%E3%82%8B,-%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%E5%8F%96%E5%BE%97%E3%81%AF

「MAIL FROM ドメイン」はサブドメインがあれば入力してください。
「MX 障害時の動作」はデフォルトにしています。こちらは名前解決失敗時にドメインを利用するかメールを選択できます。
「次へ」を押下します。

確認して問題なければ「Get started」を押下します。

AWSコンソール上に完了が表示されればメールが送信されていると思います。

”メールアドレスを追加” で追加したのメールが送信されているのでリンクをクリックすると「おめでとうございます。」を表示されます。


2.SES設定をIAMに付与する

AWSのコンソールよりIAMを検索して機能を表示する。
「ロール」を押下して表示後、「ロール作成」を押下する。

信頼されたエンティティを選択画面からユースケース欄に「EC2」を入力して「次へ」を押下する。

「AmazonSESFullAccess」にチェックを入れて「次へ」を押下する。


ロール名を入力して「ロールを作成」を押下してロールを作成する。
今回はシンプルに「SES」で設定しました。

AWSコンソールからEC2を入力して、インスタンス画面を表示する。
Webサーバーにチェックを入れて、アクションからセキュリティ、IAMロールを変更を押下する。



IAMロールから先ほど作成したSESを選択して「IAMロールの更新」を押下する。


3.WebサーバーからSES経由でメールを送信する

EC2からNodemailerを利用してSES経由でメールを送信します。
Nodemailerはnodeのアプリからメールを送信できるオープンソースです。
また、aws-sdkをいれます。AWSの各種サービスにアクセスするためのライブラリです。

npm install nodemailer aws-sdk

こちらのコマンドで2つのライブラリをまとめて入れます。
次にWebサーバー側に設定します。

const nodemailer = require('nodemailer');
const aws = require('aws-sdk');

ソースコード上でNodemailerとaws-sdkの使用を宣言します。

// AWS SDKの設定
aws.config.update({
  region: 'ap-northeast-1' // SESのリージョンを指定
});

SESのリージョンを設定します。東京リージョンなので「ap-northeast-1」を設定しています。

// メールオプションの設定
const mailOptions = {
  from: ‘SESに設定したメールアドレス’,
  to: ‘送信したいメールアドレス’,
  subject: ‘Test email from SES’,
  text: ‘Hello from SES!’
};

メールアドレスの設定をします。


// NodemailerのSESトランスポートの設定
const transporter = nodemailer.createTransport({
  SES: new aws.SES({
    apiVersion: ‘2010-12-01’
  })
});

// メール送信
transporter.sendMail(mailOptions, (err, info) => {
  if (err) {
    console.error(‘Error sending email:’, err);
  } else {
    console.log(‘Email sent:’, info);
  }
});

こちらでメールを送信します。


最終的なアーキテクチャはこんな感じです。





コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です