Amazon SES 独自ドメインでメール送信してamazonses.com経由と表示されるケース

Gmailで受信時にamazonses.com経由と表示されるときってどういう設定なのかという疑問から確認した記録
2021.03.24

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翻訳の内容を記載します。

  1. メールの送信先は認証済みのメールアドレスとドメイン、またはAmazon SESのメールボックスシミュレーターのみです。
  2. 認証済みのメールアドレスとドメインからのみメールを送信できます。
  3. 24時間以内に最大200通のメッセージを送信できます。
  4. 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] アドレスのドメインが一致しない場合。

送信者名の横に表示される詳細情報 - Gmail ヘルプ

FROMに独自ドメインを指定しているがひとつも送信元ドメインの検証ができていなときに、amazonses.com経由が表示されていました。

Gmailの場合、経由を表示を消すだけならDKIMか、Custom MAIL FROM domain(SPF)のどちらか設定していれば消すことはできる。

送信先のメールサービスによるため、ベストプラクティスはやれることは全てやっておいた方がよい

おわりに

サンドボックス環境でメール送信検証しました。サンドボックス環境からはじまることも知らなかったので手を動かしてみたのは良い経験でした。

メールサーバとして利用される場合はサンドボックス環境から抜け出す作業が必要になります。下記ブログを参考にしてください。

参考