AWS の Amazon SES で EC2 からメール送信してみよう

Amazon Simple Email Service (Amazon SES) は、ユーザー自身のEメールアドレスとドメインを使用してEメールを送受信するための、簡単で費用対効率の高い方法を提供するEメールプラットフォームです。主なユースケースは Amazon EC2 やサーバーレス環境からのメール送信があげられます。今回は Amazon SES を活用して EC2 からメール送信するまでをご紹介します。
目次
AWS のメールサービス Amazon SES のメール受信
Amazon SES はメール送受信サービスであるためメール受信も利用可能ではあります。しかし SES をメール受信に利用するケースは少ないでしょう。
人がEメールを確認したいときには、Eメールクライアントを使用する事が一般的ですが、 Amazon SES による E メール受信に関するユースケースと制限 にあるように Amazon SES には、Eメールを受信するための POP サーバーや IMAP サーバーは含まれていません。つまり、Microsoft Outlook などのEメールクライアントを使用してEメールを受信することはできません。
そのため Amazon SES は特にメール送信に向いているサービスと言えます。
人がEメールを確認する場合は、Amazon WorkMail を使う事で上記の問題を解決する事が可能です。Amazon WorkMail の IAMP プロトコルを利用することでEメールクライアントに受信可能です。また Amazon WorkMail にはブラウザアクセス可能なクライアント機能が備わっています。
メール受信サーバーに AWS のマネージドサービスを活用したい場合は Amazon WorkMail の利用を検討しましょう。
Amazon SES の送信方法
Amazon SES では、送信方法として SDK と SMTP を利用する事ができます。
アプリケーションから直接 Amazon SES API を使用してメール送信を行いたい場合には SDK を使用します。Postfix や Sendmail 等のメール送信のミドルウェアと連携してメール送信を行いたい場合には SMTP を利用します。
送信ワークフローに進む前に SDK と SMTP のどちらを利用するか事前に検討しましょう。AWS で認証情報の作成方法に違いがある為です。
Amazon SES のメール認証情報は IAM ユーザーのクレデンシャル情報です。クレデンシャル情報はアクセスキーIDとシークレットアクセスキーの2つがあります。SDK と SMTP ではシークレットアクセスキーの認証情報に求められる形式が異なります。
SMTP の認証情報は Amazon SES コンソールの Account dashboard > Account dashboard > Create SMTP credentials から作成する方法が簡単です。

SDK の認証情報は IAM コンソールから作成します。
既存ポリシーの AmazonSESFullAccess は権限が強すぎるため、sendEmail、sendRawEmail 等を含めた Json を作成してアタッチしましょう。
一般的な API の使用の制限 の制限方法等も参考にしましょう。
SourceIp を指定する事で送信元のIP制限を行う事も可能です。
Amazon SES の認証方式
Amazon SES ではメール送信を行うためには認証を行う事が必須です。Amazon SES では認証済みのドメインまたはアドレスのみ送信元として利用可能です。
Amazon SES の認証方式はドメイン認証とメール認証の2種類があります。可能な場合はドメイン認証を推奨します。
ドメイン認証は DKIM-based domain verification という DNS レコードに DKIM 情報を登録する事で認証を行います。DKIM はメールに添付された電子署名でメール到達率を向上させてくれるものですので設定を推奨されています。認証のついでに DKIM の設定も完了できるのは嬉しいですね。またドメイン認証を行うと送信元のドメインの前部分(ユーザー名)の制限がありません。
反対にメール認証は単一のメールアドレスのみを認証します。リクエストを行うと指定したメールアドレスに認証メールが届きますので開いて認証を行います。
メール認証の場合は DKIM を利用する事ができず、認証した単一のアドレスのみ送信元に利用できます。DNS のレコード登録が難しい場合等はメール認証を行います。
Amazon SES の sandbox 制限
Amazon SES は不正使用や悪用を防止し、送信者としての評価を保つため、新しい Amazon SES アカウントには次の制限が適用されています。
- Eメールの送信先は、検証済みEメールアドレスおよびドメイン、または Amazon SES メールボックスシミュレーターに制限されます。
- 最大で 24 時間あたり 200 メッセージを送信できます。
- 最大で 1 秒あたり 1 メッセージを送信できます。
AWS へ申請を行うことで sandbox 制限を解除する事が可能です。
ユースケースの説明欄では以下の内容の記載が推奨されています。
- メーリングリストをどのように構築または取得しますか?
- バウンスや苦情はどのように処理しますか?
- 受取人はお客様からのEメールの受信をどのようにオプトアウトできますか?
- このリクエストで指定した送信レートまたは送信クォータは、どのように選択しましたか?
申請後は AWS Support チームから24 時間以内に最初の回答があります。情報が不足していた場合等は追加の質問などが返ってきますので返信が必要になります。
Amazon SES で Amazon EC2 から AWS SDK でメール送信してみる
これまでの流れで Amazon SES でメールを送信する事ができるようになりました。実際に EC2 から SDK でメール送信してみたいと思います。
Amazon Linux2 の EC2 を用意しました。サンプルプログラム送信のドキュメント を参考に進めてみましょう。
共有認証情報ファイルの作成には aws configure コマンドを使用します。AWS SDK for Python (Boto) のインストール には pip install boto3 コマンドを使用します。
[root@ip-172-31-33-153 ~]# aws configure
[root@ip-172-31-33-153 ~]# yum install pip
[root@ip-172-31-33-153 ~]# pip install boto3
amazon-ses-sample.py を作成します。CONFIGURATION_SET の箇所が未作成の場合はコメントアウトしましょう。作成できたら python コマンドでファイルを実行します。
[root@ip-172-31-33-153 ~]# vi amazon-ses-sample.py
[root@ip-172-31-33-153 ~]# python amazon-ses-sample.py
成功した場合は RECIPIENT に指定したメールアドレスにサンプルメールが届きます。

AWS の Amazon SES で EC2 からメール送信してみよう まとめ
Amazon SES の利用方法などについてご紹介致しました。
メールサーバーの構築、運用はハードルが高いので、サーバーレスのマネージドサービスであるAmazon SES は大変便利なサービスです。メール送信システムの導入を予定されている方は、ぜひ Amazon SES も検討してみましょう。
AWSサービスの導入でわからないことがあれば、弊社にてサポートさせていただきますので、お気軽に右上の[お問い合わせ]ボタンからご相談ください。

元記事発行日: 2022年09月09日、最終更新日: 2024年02月28日