-
AWSからのEmail送信
Amazon Data Services Japan
-
AWSからのメール配信の選択肢
1. EC2上にMail Transfer Agent (MTA)を構築して配信
2. Amazon Simple Email Service (SES)の利 用
3. 外部Email配信サービスの利 用
3.についてはAWS特有の 手順はないため省 略 して以降 では
1., 2.を取り扱います
2
-
EC2上にMTAを構築して配信
" 利 点
慣れたMTAや既存のノウハウを活かして構築・運 用が可能
携帯キャリア向けの送信ルールの適 用など、柔軟な制御が可能
" 注意点
構築・運 用・障害対策やスケールの調整などは 自 身で 行 わなけ
ればならない
Email送信のための制限解除やDNS逆引きなどフォームによる
申請が必要な項 目あり(後述)
3
-
Simple Email Service (SES)の利 用
" 利 点
AWSが管理 するクリーンに保たれた(Spammer登録などされてい
ない) 大きなIPアドレスプールを使ってメール送信可能
MTAを 自前で 立 てなくてもAPIを叩く事でメール送信可
簡単DKIM設定
" 注意点
現状 日本国内の携帯キャリアの制限を 十分考慮した配信アルゴリズ
ムにはなっていない(特に迷惑メールフィルタの考慮など)
BounceやComplaintの処理 を 行 っていないと送信レートの抑制や
送信停 止措置が取られる事もある
(IPアドレスプールをクリーンに保つとともに、世の中のメールの
信頼性・健全性向上を促すため)
SESのエンドポイント及び送信元IPアドレスはUS-- east-- 1となる
(2013年 12 月現在)
4
-
2つの選択肢から適切 な 方法を選ぶ基準
5
Bounce処理
を実装予定
No
Bounce処理 はどちら
の 方法でも重要です。
実装しましょう。
携帯キャリア
のアドレスに
送信予定あり
Yes
Yes 1. EC2上のMTA構築
を検討
No
Bounceやコンテン
ツの問題による送信
レート抑制を受 入可
No
2. SESの利 用も考慮に
Yes
-
EC2からメール送信を 行 う前の準備
-
EC2インスタンスからのメール送信
" デフォルトでは外向きTCP 25番ポートは制限対象
Spamのリレーを防ぐ
誤ったSpam送信から利 用者様を守る
7
SMTP
(TCP: 25)
SMTPS
(TCP: 587)
587番を使って認証付き
で外部サービスを利 用す
るのは特に制限なし
この制限は申請ベースで解除出来ます
MTA
-
EC2でMTAを構築するまで
1. MTAのホスト名とIPアドレスを 用意
ホスト名を決める
Elastic IPを取得
ホストのAレコードをドメインに登録する
2. 制限解除と逆引きDNSの登録を申請する
3. メール関連のDNS設定を 行 う
SPFレコード
DKIM
MXレコード (Optional: 受信もする場合)
8
-
構成とDNSレコードの例
" DNSレコード例
9
;; example.com
@ IN A 203.0.113.3
@ IN MX 10 mx1
@ IN MX 20 mx2
mx1 IN A 203.0.113.4
mx1 IN A 203.0.113.5
mta1 IN A 203.0.113.6
mta2 IN A 203.0.113.7
@ IN TXT "v=sfp1 ip……"
@ IN SPF "v=sfp1 ip……"
mta1 mta2 mx1 mx2
DNS
*.113.0.203
1.
RCPT TO alice@receiver.com
MAIL FROM bounce@example.com
mx.receiver.com
2.
203.0.113.6?
3. PTR
mta1.example.com
(Bounce/error) *
DNS
example.com
4. SPF?
5. SPF
"v=sfp1 ip…"
逆引き申請
で登録
* 一般にバウンス等のエラーは受信側MXサーバによりセットされるreturn-- pathヘッダに記載のア
ドレスに返される。
-
1. MTAのホスト名とIPアドレス
" MTAのホスト名を決める
例 :mta1.example.com, mta2.example.com
" IPアドレスの取得
通常通りElastic IPをホスト名の数だけ取得
" DNS Aレコードを登録
mta1.example.com IN A <EIP 1>
mta2.example.com IN A <EIP 2>
10
-
2. 制限解除と逆引きDNSの登録を申請
" 専 用フォームより申請
AWSのHP下部
11
-
申請フォーム
" メール送信の 目的を記 入
" 申請対象のEIP
" EIPの逆引き結果
となるべきホスト
名を記 入
12
DNSの正引きの
一致が必要
-
申請時の注意点
" ユースケースはUS側で対応するため英語でご記 入下さい
難しい場合は担当営業にご相談下さい
" DNS
正引き結果が申請内容と 一致する場合のみ逆引き設定を 行 います
正引きの設定をした上で申請をお願いします
13
-
3. SPF, DKIMの設定
-
SMTPにおける送信元認証のための技術
" 送信元IPアドレスに基づく認証
Sender Policy Framework (SPF)
Sender ID
各ドメインでメール送信元であるべきホストのIPアドレスやド
メイン名をDNSで公開
各DNSドメインにレコードを追加するだけで開始できる
" 送信元による署名に基づく認証
Domain Keys Identi ed Mail (DKIM)
送信元で各メールにデジタル署名をし、公開鍵をDNSで公開
送信者あるいは送信元サーバでの対応が必要
-
SPFの設定例
" 送信元サーバの逆引き結果が*.example.comである場
合に正当な送信者であると宣 言する場合の設定例
一致しない場合はソフトフェイルとする場合
example.com. TXT "v=spf1 include:example.com ~ all"
example.com. SPF "v=spf1 include:example.com ~ all"
一致しない場合はハードフェイルとする場合
( 一致しない場合に受信側MTAに受信拒否を要求)
example.com. TXT "v=spf1 include:example.com -- all"
example.com. SPF "v=spf1 include:example.com -- all"
16
注:RFC4408によれば、SPFかTXTどちらかが定義されていれば動作
するものの、両 方のレコードに同内容を設定することが推奨される
-
SPFの設定例 (SESの場合)
" 送信元サーバの逆引き結果が*.example.comである場
合に正当な送信者であると宣 言する場合の設定例
一致しない場合はソフトフェイルとする場合
example.com. TXT "v=spf1 include:amazonses.com ~ all"
example.com. SPF "v=spf1 include:amazonses.com ~ all"
一致しない場合はハードフェイルとする場合
( 一致しない場合に受信側MTAに受信拒否を要求)
example.com. TXT "v=spf1 include:amazonses.com -- all"
example.com. SPF "v=spf1 include:amazonses.com -- all"
17
注:RFC4408によれば、SPFかTXTどちらかが定義されていれば動作
するものの、両 方のレコードに同内容を設定することが推奨される
-
DKIM有効化時のメール送受信の流 れ
" MTAでキーペアを管理 、公開鍵をTXTレコードで送信元
ドメインに設定
sender.com
MTA smtp.receiver.com
2. 署名付きEmail送信
From: foo@sender.com
To: bar@receiver.com
DKIM-- Signature: s=xyz; d=sender.com …
1. Email送信
From: foo@sender.com
To: bar@receiver.com
3. 公開鍵問い合わせ
TXT xyz._ domainkey.sender.com
4. 公開鍵返答
TXT "公開鍵"
MTA及びDNSに必要な設定をすることで導 入
-
DKIM有効化時のメール送受信の流 れ
(SESの場合)
" SES側でキーペアを管理 、公開鍵をCNAMEでユーザド
メインに設定
sender.com
amazonses.com
SES smtp.receiver.com
2. 署名付きEmail送信
From: foo@sender.com
To: bar@receiver.com
DKIM-- Signature: s=xyz; d=sender.com …
1. Email送信
From: foo@sender.com
To: bar@receiver.com
3. 公開鍵問い合わせ
TXT xyz._ domainkey.sender.com
4. CNAMEレコード返答
CNAME xyz.dkim.amazonses.com
5. 公開鍵問い合わせ
TXT xyz.dkim.amazonses.com
6. 公開鍵返答
TXT "公開鍵"
-
SESの簡単DKIM設定機能
1. ドメインを選択
2. DKIMタブで有効化
3. DNSにレコードを追加
Route53なら2クリック!
4. 設定完了 通知を待つ
-
Bounce処理 の実装
-
SMTPの正常時のシグナリング
Sender.example.com
HELO sender.example.com
250 OK
MAIL FROM: user@example.com
250 OK
RCPT TO: user1@example.jp
250 OK
example.jp
DATA
354 Start
ヘッダ,本 文.. <CRLF>.<CRLF>
250 OK
QUIT
250 OK
MTA
MUA
-
SMTPのステータスコード
" 200番台
正常応答
情報提供
" 300番台
データ 入 力 を促す(354)
" 400番台
一時的なエラー: サーバシャットダウン、メールボックスbusy、
メールボックス溢れ
" 500番台
システムエラー: コマンド間違い
転送エラー: メールアドレスなし、処理 失敗通知
-
配信エラーメール
" SMTPセッション時のエラー
送信元のMTAが作成。
エンベロープの発信者メールアドレスにエラーメールが戻る
(Return-- Path or Errors-- To ヘッダに記載)
" SMTPセッション時以外
送信先のMTAが作成
エンベロープの発信者メールアドレスにエラーメールがに戻る
エラー発 生時、ユーザが存在しないなどの恒久的なエラー(ハードバウンス)
については再度 送信しないように送信側で対処(バウンス処理 )が必要
-
バルクメール配信とバウンス処理 の例
25
smtp
顧客情報
Message to
each receiver
Message
Producer
Bounce記録のあ
る宛先を除いて
送信先を抽出
送信ステート
テーブル
送信中/送信済
ステートを記録
(送信中/送信済
はスキップ)
-
バルクメール配信とバウンス処理 の例
(SESの場合)
26
顧客情報
Message to
each receiver
Message
Producer
Bounce記録のあ
る宛先を除いて
送信先を抽出
送信ステート
テーブル
Amazon SES
Amazon SNS
送信中/送信済
ステートを記録
(送信中/送信済
はスキップ)
-