はじめに
AWSでメール機能を実装する際におなじみの Amazon Simple Email Service (Amazon SES)。 今回は、外部のドメイン取得サービス(MuuMuu Domain)で取得した独自ドメインを使って、AWS上でメールの「送信」と「受信」の両方を行う手順をまとめました。
特に受信に関しては、既存のメール環境を壊さないように「受信用サブドメイン」を切ってS3で受け取る構成にします。
前提条件
- AWSアカウントを持っていること
- (今回は)ムームードメインのレジストラでドメインを取得済みであること(例: muzzumuzu.com)
- SESの受信機能が対応している 大阪リージョン (ap-northeast-3) を使用します。
1. SESでドメインの身元確認 (ID作成)
まず、AWS SESに対し「このドメインの持ち主は私です」という証明(ID作成)を行います。
AWSマネジメントコンソールで Amazon SES のページを開きます。
左メニューの [設定] > [ID] を選択します。
[ID の作成] をクリックします。
以下の設定で作成します。
ID タイプ: ドメイン
ドメイン: 取得したドメイン名(例: muzzumuzu.com)
カスタム MAIL FROM ドメイン: (今回は設定なし)
ドメインの検証: Easy DKIM
DKIM 署名キーの長さ: RSA_2048_BIT
その他はデフォルトのまま [ID の作成] をクリック。
2. DNSレコードの設定(ムームードメイン側での設定)
IDを作成すると、[認証]から、認証に必要な CNAMEレコード が3つ発行されます(画像下部のCNAMEの部分に表示されます)。
これをドメイン管理画面に登録します。SESの画面に表示されている「DNSレコード」の 名前 と 値 を控えます。ムームードメインのコントロールパネルへ移動し、[ムームーDNS] > [設定2] を開きます。以下のようにレコードを追加します。
| サブドメイン | 種別 | 内容 |
|---|---|---|
| xxxxx._domainkey | CNAME | xxxxx.dkim.amazonses.com |
| xxxxx._domainkey | CNAME | xxxxx.dkim.amazonses.com |
| xxxxx._domainkey | CNAME | xxxxx.dkim.amazonses.com |
注意点: ムームードメインでは、サブドメイン欄にドメイン名自体を含める必要はないようです。
SES側での表示が
abcde._domainkey.muzzumuzu.com
となっていた場合、ムームードメイン側では
abcde._domainkey
とします。
設定後、数分~数十分待つと、SESコンソールのIDステータスが 「検証済み (Verified)」 に変わります。これで送信の準備は完了です。
3. メール送信を試してみる (サンドボックス制限)
AWS SESはアカウント作成直後、不正利用防止のための 「サンドボックス (Sandbox)」 環境下にあります。この状態では、以下の制限があります。
- 送信元: 検証済みのドメイン/アドレスのみ可
- 送信先: 検証済みのメールアドレスのみ可 (ここが重要!)
そのため、テストメールを自分のGmail等に送るには、まずその宛先アドレスもSESに登録する必要があります。
宛先アドレスの検証*
- [ID の作成] > [Eメールアドレス] を選択。
- 自分の普段使いのアドレス(Gmailなど)を入力して作成(下記はテキトウなGmailのアドレスです)。
- 届いた確認メールのリンクをクリックして検証を完了させます。
テスト送信の実行
送信元にしたいIDを選択し、SESコンソールの右上にある [テスト E メールの送信] をクリックします。
- 送信元: 好きなユーザー名(例: test@muzzumuzu.com)
- シナリオ: カスタム
- カスタム受信者: 先ほど検証した自分のGmailアドレス
- 件名・本文: 適当に入力して [送信]
受信ボックスにメールが届けば、送信機能の実装は成功です。
注意点: 本番運用の際は、AWSサポートへ申請してサンドボックス制限を解除することで、誰にでも送れるようになります。
4. メール受信を試してみる (S3への保存)
次に、このドメイン宛のメールを受信して、S3バケットに保存する設定を行います。
今回は、メインのドメイン環境(Webサーバ等)に影響を与えないよう、受信専用のサブドメイン mail.muzzumuzu.com を作成して運用します。
MXレコードの設定
ムームードメイン側でメールの配送先をAWSに向ける設定を行います。
ムームードメイン側での設定は 2. DNSレコードの設定を参照してください。mxレコードを以下の情報をもとに追加します。10は優先度です。
mail MX inbound-smtp.ap-northeast-3.amazonaws.com 10
これにより、receiver@mail.muzzumuzu.com のようなアドレス宛のメールがAWSに届くようになります。
受信ルールの作成
「誰宛のメールをS3に保存するか」というルールを作ります。
- SESコンソールの [Eメール受信] を開く。
- [ルールセットを作成] (例:default-rule-set)。
- ルールを作成し、以下を設定します。
- 条件 (受信者): receiver@mail.muzzumuzu.com
- アクション: S3 を選択すると、バケット名を聞かれますので、適当に新しいバケットを作成すればOKです。
(余談)IAMロールのARNを指定しなくてもよいです。上記で作ったバケットは、SESからの書き込みを許可するバケットポリシーが適用されています。以下、SESの受信ルール作成時に作ったバケットポリシーです。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowSESPuts-**************",
"Effect": "Allow",
"Principal": {
"Service": "ses.amazonaws.com"
},
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::上記のバケット名/*",
"Condition": {
"StringEquals": {
"AWS:SourceAccount": "************"
},
"StringLike": {
"AWS:SourceArn": "arn:aws:ses:*"
}
}
}
]
}
最後に、作ったEメール受信ルールに対して、必ず「有効として設定」を押しておくこと(ステータスを有効にすること)。
受信テスト
自分のGmailなどから receiver@mail.muzzumuzu.com 宛にメールを送ります。 数分後、指定したS3バケットにファイルが生成されていれば成功です!
まとめ
これで、独自ドメインを使ってAWS SESで「送信」も「受信(S3保存)」もできるようになりました。 あとはLambda等をトリガーにしてS3のメールを解析すれば、お問い合わせフォームの自動処理や、メールシステムへの組み込みが可能になります。次は他のメール処理系SaaS(例:blastengine)で試してみたいと思います。


