はじめに
AWS SESを利用するにあたって、初期設定の方法をまとめたので共有する。
AWS SESとは
メール送信や受信ができるAWSのサービス。メールの送信はAWS SNSでも可能だが、SESには、送信者の設定、複数の宛先設定、メール本文のカスタマイズなど豊富な機能がある。
方法
事前設定
設定IDの作成
AWS SESの左上のメニューから、ID - 「IDの作成」をクリックする。
IDのタイプは、「ドメイン」と「Eメールアドレス」があり以下の違いがある。
- ドメイン
- ドメインの前は自由にアドレスを設定できる。(例:hoge@example.com)
- 設定項目が多い
- DNS設定が必要
- Route53で、ホストゾーンを利用している場合は、簡単に設定可能
- DNS設定が必要
- 本番環境への移行が可能
- Eメールアドレス
- 簡単に利用可能
- 送信者が、このアドレスとなる
- 制約
- 本番環境への移行ができない
- ドメイン認証さえと通れば、EメールアドレスIDでも、任意の送信先へ送付できる
- 本番環境への移行ができない
以下に、ドメイン、Eメールアドレスでの初期設定方法をそれぞれ示す。
ドメイン
カスタムドメインを利用する。
Route53で設定済みのドメインを利用している場合は、設定が自動で行われるので便利。
以下のように設定する
- IDタイプ
- ドメイン
- ドメイン
- 任意のドメイン(事前にドメインをお名前ドットコムなどで取得しておく)
- こちらの記事を参照
- カスタムMAIL FROMドメインの使用
- ✓をいれる
- 任意のドメイン(事前にドメインをお名前ドットコムなどで取得しておく)
- IDの検証
- MAIL FROMドメイン
- mail
- mail.以降のドメインは、上記に入力したドメインが自動ではいる
- mail
- MAIL FROMドメイン
- ドメインの検証
- DKIMの詳細設定
- IDタイプ:Easy DKIM
- DKIM署名キーの長さ: RSA_2048_BIT
- DNSレコードのRoute53への発行
- 有効化: Route53へ自動登録される
- DKIM署名
- 有効化
- DKIMの詳細設定
「IDの作成」ボタン押して作成する。数分後、IDステータスが「検証済み」となれば成功。
なお、Route53へのレコードは自動で作成される。
Eメールアドレスの場合
- 注意事項
- Eメールアドレスでは、最初は登録済み送信アドレスにしか送信できない
-
本番環境へは移行できないので注意
- ただし、ドメイン認証で本番アクセスを有効にすればEメールIDでも送信可能
-
本番環境へは移行できないので注意
- Eメールアドレスでは、最初は登録済み送信アドレスにしか送信できない
以下の項目を入力する。
- IDの詳細
- IDタイプ
- Eメールアドレス
- Eメールアドレス
- 送信元のEメールアドレス
- IDタイプ
「IDの作成」ボタンを押すと、設定したメールアドレスに、AWSからメールが来るので、承認処理を行う。
承認処理が完了すると、以下の画面が表示される。
本番環境への移行
SESサービス開始後は、サンドボックスモードとなっている。サンドボックスモードは、テスト用の利用が制限されているモードで、任意のアドレスへ送信できないなどの制約がある。詳細は、公式ドキュメントを参照。
SES - 「アカウントダッシュボード」から、本番アクセスへのリクエストを行う。
- AWS SESのコンソールからの本番アクセス設定には、ドメイン検証済みのIDが必要となるので注意
本番アクセスをリクエスト」をクリックする。
上記画面で、以下の項目を設定する。
- メールタイプ
- マーケティング
- トランザクション
- ウェブサイトURL
- 下記記事ではRoute 53のドメインでも承認されたらしい
- 今回は、CloudFrontで配信しているWebアプリのURLを設定した
- 連絡する際の希望言語
- Japanese
リクエストが送信されると、以下のような画面となり、承認待ちとなる。
数分後に承認される。
送信テスト
AWSコンソールの場合
左側のメニューから、「設定」-「ID」から送信元のIDを選択して、「テストEメールの送信」ボタンを押す。
上記画面で、以下の項目を設定して、「テストEメールの送信」ボタンを押す。
- From-address
- シナリオ
- 「カスタム」を選択:送信先アドレスを指定可能になる
- カスタム受信者
- 送信先アドレスを入力
- ※ただし、サンドボックスモードの場合は、認証済みの送信元アドレスしか送信できない
- 送信先アドレスを入力
- 件名
- 任意の件名を入力
- 本文
- 任意の本文を入力
APIからメール送信
- TEXTまたはHTML形式で記述可能
- Teamsなどに転送する場合は、HTMLを推奨
- テキストだとリンクなどが正しく表示されない
- Teamsなどに転送する場合は、HTMLを推奨
Lambda(Python)
PythonのLambda関数の例を示す。
import boto3
from botocore.exceptions import ClientError
from datetime import datetime
import json
def lambda_handler(event, context):
# IDを設定する(Eメール、またはドメインの場合は、@より前は任意に設定する
sender = '<sender_id>'
ses = boto3.client('ses')
email_address_list = [] # 送信先アドレスを設定する
email_address_list.append('hoge@example.com')
email_address_list.append('fuga@example.com')
try:
charset = "UTF-8"
response = ses.send_email(
Source=f'{sender}',
Destination={
'ToAddresses': email_address_list
},
Message={
'Subject': {
'Charset': charset,
'Data': subject
},
'Body': {
'Html': {
'Charset': charset,
'Data': html_body,
}
# テキスト形式の場合は以下
#'Text': {
# 'Charset': charset,
# 'Data': text_body
#}
}
}
)
except ClientError as e:
print(e.response['Error']['Message'])
return {
'statusCode': 500,
'body': 'Error sending email via SES'
}
- sender
- メールIDもしくは、ドメイン
- ドメインの場合は、任意の送信アドレス@ドメイン名 となる
- メールIDもしくは、ドメイン
トラブルシューティング
テストメールを送信できない
無効なコンテンツが含まれているため、メッセージを送信できません。
Email address is not verified. The following identities failed the check in region AP-NORTHEAST-1: 885775f3.groups.jp.ricoh.com@apac.teams.ms
サンドボックスモードが解除されているかを確認する。SESは、開始後はサンドボックスモードとなっており、登録済みのメールにしか送信できない。
Teamsチャットに転送するとURLがリンクにならない
テキストメールで送ると、TeamsチャットではURLがリンクにならない。HTML形式で送る必要がある。
参考