Amazon SES 独自ドメインでメール送信してamazonses.com経由と表示されるケース
Amazon SESを初期設定からはじめます。独自ドメインをSESに設定し、Route53にSPFレコード、DKIMの設定を行いメールを送信します。
- Amazon SESの初期状態は制限のあるサンドボックス環境
- Route53に各種レコード追加し、SPF、DKIMを有効化した場合と、無効化した場合のGmailで受信時の表示の違い
- Gmailでamazonses.com経由と表示されるケースは?
amazonses.com経由と表示された例と、されなかった例、どこの設定によるものなのか、我々はその謎を解き明かすべくジャングルの奥地へと向かった。
結論
DKIMをDisabledにし、Custom MAIL FROM domain(SPF)を未設定の状態でメールを送信すると、Gmailでメール受信時にamazonses.com経由と表示される。要は送信元ドメインの認証をなにもしなかったら表示された。
DKIM設定 | Custom MAIL FROM domain設定(SPF) | amazonses.com経由表示 |
---|---|---|
Enabled(○) | 設定済み(○) | 表示されない |
Disabled(×) | 設定済み(○) | 表示されない |
Disabled(×) | 未設定(×) | 表示される |
Enabled(○) | 未設定(×) | 表示されない |
SES初期設定
SESでメール送信できる環境構築からはじまります。Create Identityをクリック。
Domain
を選択し 自前のドメイン名を使いDKIMを有効 にした設定を入力しました。自前のドメイン名は事前にRoute53で管理していたものを使ってテストします。
入力を終えると認証待ちになりました。
15分後に確認しました。Custom MAIL FROM domain
のチェックが終わっていません。Route53のレコードを確認したところ必要なレコードが追加されていませんでした。DKIM
に必要なCNAMEのレコードは自動的に追加されていました。
必要なレコードはCustom MAIL FROM domainから View DNS recodes をクリックし展開すると確認できます。
Route53に手動で必要なレコードを追加しました。
10分後にはSuccessful
になりました。
サンドボックス環境の制限
新規アカウントでSESを作成するとサンドボックス環境におかれます。サンドボックス環境では以下の機能制限があります。DeepL翻訳の内容を記載します。
- メールの送信先は認証済みのメールアドレスとドメイン、またはAmazon SESのメールボックスシミュレーターのみです。
- 認証済みのメールアドレスとドメインからのみメールを送信できます。
- 24時間以内に最大200通のメッセージを送信できます。
- 1秒間に最大 1 件のメッセージを送信できます。
3番、4番の制限はaws ses
コマンドの結果から確認できます。
$ aws ses get-send-quota { "Max24HourSend": 200.0, "MaxSendRate": 1.0, "SentLast24Hours": 0.0 }
テストメール送信
サンドボックス環境では認証済みメールアドレスにのみメール送信できます。とありましたがここで疑問です。 認証済みメールアドレスとは具体的に何を指しているのでしょうか
認証済みメールアドレスとは
認証済みのメールとは事前に送信先のメールアドレスを登録するということでした。 下記ブログを参考にメールアドレスを登録・認証してみます。
# 検証するメールアドレスを変数に格納 $ email=<_YOUR_EMAIL_ADDRESS_> # メールアドレスの検証 $ aws ses verify-email-identity \ --email-address $email # 現在の状態を確認 $ aws ses get-identity-verification-attributes \ --identities $email \ --query 'VerificationAttributes.*.VerificationStatus' \ --output text Pending
<_YOUR_EMAIL_ADDRESS_>
に入力したメールアドレスへ確認メールが届きます。本文中のリンクをクリックすると認証できます。
Amazon Web Services – Email Address Verification Request in region Asia Pacific (Tokyo)
リンクをクリックするとSESのサイトへ飛びました。認証できたのか不安です。
SESのコンソールのCerified Identitles
から確認します。認証できていました。
aws ses
コマンドからも確認するとPending
表示がSuccess
になっています。
# 現在の状態を確認 $ aws ses get-identity-verification-attributes \ > --identities $email \ > --query 'VerificationAttributes.*.VerificationStatus' \ > --output text Success
認証済みメールアドレスへメール送信
aws ses
コマンドを利用してテストメールを送信します。--from
に登録したドメイン名のメールアドレスを設定。--to
は認証したメールアドレスが入っています。
$ aws ses send-email \ --from mail@abashiri.domain \ --to $email \ --subject test-subject \ --text test-body # 以下実行結果 { "MessageId": "010601784f8cd514-547170d3-7c92-4355-b2dd-59847b549d01-000000" }
認証済みのメールアドレスへメールが届きました。
送信元、署名元も独自ドメイン名になっています。
Gmailで メッセージのソースを表示からヘッダーを確認します。 SPFとDKIMがPASS しているのを確認できました。
Authentication-Results: mx.google.com; dkim=pass header.i=@abashiri.domain header.s=v6kujqg4djqddwddiwtgjhbw2xr4w4da header.b=dTix+4t0; dkim=pass header.i=@amazonses.com header.s=zh4gjftm6etwoq6afzugpky45synznly header.b=bSegyZmU; spf=pass (google.com: domain of 010601784f9c3ed5-ddead627-524f-4ddc-811a-72c7ec0e4361-000000@mail.abashiri.domain designates 23.251.111.111 as permitted sender) smtp.mailfrom=010601784f9c3ed5-ddead627-524f-4ddc-811a-72c7ec0e4361-000000@mail.abashiri.domain
あとで気がついたのですがヘッダーの本文の上にわかりやすくPASS と表示されていました。
abashiri.domainでドメイン認証しているのでサブドメイン足して送信してみました。@abashiri.domain
から@mail.abashiri.domain
へ変更。正常に送信できました。
$ aws ses send-email \ --from test@mail.abashiri.domain \ --to $email \ --subject test-subject \ --text test-body # 以下実行結果 { "MessageId": "010601784f93711e-2f412031-89ba-41d2-aa30-9f789c7b0133-000000" }
SESで認証していないドメイン名で送信するとエラーが返ってきます。@mail.abashiri.domain
から@abashiri.hokkaido.jp
へ変更。
$ aws ses send-email \ --from test@abashiri.hokkaido.jp \ --to $email \ --subject test-subject \ --text test-body An error occurred (MessageRejected) when calling the SendEmail operation: Email address is not verified. The following identities failed the check in region AP-NORTHEAST-1: test@abashiri.hokkaido.jp
サンドボックス環境は認証済みのメールアドレスへしか送信できない制限があります。認証していないメールアドレスへ送信すると同様にエラーが返ってきます。
$ aws ses send-email \ --from test@mail.abashiri.domain \ --to hoge@domain \ --subject test-subject \ --text test-body An error occurred (MessageRejected) when calling the SendEmail operation: Email address is not verified. The following identities failed the check in region AP-NORTHEAST-1: hoge@domain
結果
DKIM設定 | Custom MAIL FROM domain設定(SPF) | amazonses.com経由表示 |
---|---|---|
Enabled(○) | 設定済み(○) | 表示されない |
DKIMを無効・Custom MAIL FROM domain設定済み
DKIMをDisabled
に変更してメール送信した場合の挙動を確認します。amazonses.com経由とGmailに表示される設定を切り分けます。
無効化します。
一見同じです。想定ではamazonses.com経由と表示されると思っていたのですが...
署名元がamazonses.comに変わっています。
メッセージのソースを表示から確認するとDKIMが独自ドメイン名からamazonses.comに変わっています。DKIM無効化は反映されていますね。
結果
DKIM設定 | Custom MAIL FROM domain設定(SPF) | amazonses.com経由表示 |
---|---|---|
Disabled(×) | 設定済み(○) | 表示されない |
DKIMとCustom MAIL FROM domain両方無効
DKIMをDisabled
に変更した状態で、Custom MAIL FROM domainの設定を削除。
無効にはできなかったのでCustom MAIL FROM domainの設定を削除しました。
amazonses.com経由と表示されるようになりました。
送信元が独自ドメインからap-northeast-1.amazonses.comに変わりました。署名はDKIM無効時に変わったのでそのままです。
変化なし。
結果
DKIM設定 | Custom MAIL FROM domain設定(SPF) | amazonses.com経由表示 |
---|---|---|
Disabled(×) | 未設定(×) | 表示される |
DKIM有効・Custom MAIL FROM domain未設定
最後のパターンはこの状態です。
amazonses.com経由と表示されるのかと予想していのですがハズレました。Gmailにamazonses.com経由とに表示されるのはDKIM無効、Custom MAIL FROM domain未設定のパターンのみでした。
DKIMを有効に戻したので署名元は自前のドメインになっています。送信元はCustom MAIL FROM domainを変更していないため変化なし。
DKIMは自前のドメイン名になりました。
結果
DKIM設定 | Custom MAIL FROM domain設定(SPF) | amazonses.com経由表示 |
---|---|---|
Enabled(○) | 未設定(×) | 表示されない |
まとめ
経由が付くケースをGmailのヘルプで確認すると下記の記述があります。
次のような場合に、送信者名の横に「経由」とウェブサイト名が表示されます。 送信元のドメインと [From] アドレスのドメインが一致しない場合。
FROMに独自ドメインを指定しているがひとつも送信元ドメインの検証ができていなときに、amazonses.com経由が表示されていました。
Gmailの場合、経由を表示を消すだけならDKIMか、Custom MAIL FROM domain(SPF)のどちらか設定していれば消すことはできる。
送信先のメールサービスによるため、ベストプラクティスはやれることは全てやっておいた方がよい
おわりに
サンドボックス環境でメール送信検証しました。サンドボックス環境からはじまることも知らなかったので手を動かしてみたのは良い経験でした。
メールサーバとして利用される場合はサンドボックス環境から抜け出す作業が必要になります。下記ブログを参考にしてください。