0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【2025年版】AWS SES + BIMI 実装完全ガイド:サブドメイン別でロゴ表示を制御する方法

Last updated at Posted at 2025-06-17

【2025年版】AWS SES + BIMI 実装完全ガイド:サブドメイン別でロゴ表示を制御する方法

はじめに

BIMI(Brand Indicators for Message Identification)は、メールにブランドロゴを表示させる新しい技術です。本記事では、AWS SESを使用してBIMIを実装し、さらにサブドメインごとに選択的にロゴ表示を制御する方法を解説します。

実現する内容

以下のような選択的なBIMI対応を実装します:

  • info@example.com → BIMI非対応(ロゴなし)
  • info@sub.example.com → BIMI非対応(ロゴなし)
  • info@st-sub.example.com → BIMI対応(ロゴあり)

前提条件

  • AWS Route53でドメイン管理
  • AWS SESでメール送信
  • 基本的なSPF/DKIM/DMARC設定済み

STEP 1: メール認証の基礎設定

SPF設定

example.com. TXT "v=spf1 include:amazonses.com ~all"

DKIM設定

AWS SESでドメインを検証し、3つのCNAMEレコードを追加:

aws ses verify-domain-dkim --domain example.com

DMARC設定(BIMI必須要件)

_dmarc.example.com. TXT "v=DMARC1; p=reject; rua=mailto:admin@example.com; ruf=mailto:admin@example.com; sp=reject; adkim=r; aspf=r;"

重要: BIMIにはDMARC enforcement(p=quarantineまたはp=reject)が必須です。

STEP 2: SVGロゴファイルの準備

BIMI用のSVG Tiny 1.2形式ロゴを作成:

<?xml version="1.0" encoding="UTF-8"?>
<svg version="1.2" baseProfile="tiny" xmlns="http://www.w3.org/2000/svg" 
     viewBox="0 0 200 200" width="200" height="200">
  <title>Company Logo</title>
  <desc>BIMI logo for email authentication</desc>
  
  <!-- ロゴの内容 -->
  <circle cx="100" cy="100" r="90" fill="#2E86C1" stroke="#1B4F72" stroke-width="4"/>
  <!-- その他のSVG要素 -->
</svg>

Webサーバーへの配置

HTTPS対応のWebサーバーにSVGファイルを配置します。GitHub PagesやCDNサービスを利用可能:

# GitHub CDNの例
https://raw.githubusercontent.com/username/repo/main/logo.svg

STEP 3: サブドメイン別BIMI設定

1. BIMI有効化(st-sub.example.com)

default._bimi.st-sub.example.com. TXT "v=BIMI1; l=https://example.com/logo.svg;"

2. BIMI無効化(example.com)

default._bimi.example.com. TXT "v=BIMI1; l=;"

3. BIMI無効化(sub.example.com)

default._bimi.sub.example.com. TXT "v=BIMI1; l=;"

STEP 4: AWS CLIでの実装例

ドメイン検証

# SESドメイン追加
aws ses verify-domain-identity --domain example.com

# DKIM有効化
aws ses verify-domain-dkim --domain example.com

DNS設定

# DMARC設定
aws route53 change-resource-record-sets --hosted-zone-id ZXXXXX --change-batch '{
  "Changes": [{
    "Action": "CREATE",
    "ResourceRecordSet": {
      "Name": "_dmarc.example.com",
      "Type": "TXT",
      "TTL": 300,
      "ResourceRecords": [{
        "Value": "\"v=DMARC1; p=reject; rua=mailto:admin@example.com; ruf=mailto:admin@example.com; sp=reject; adkim=r; aspf=r;\""
      }]
    }
  }]
}'

# BIMI設定(有効化)
aws route53 change-resource-record-sets --hosted-zone-id ZXXXXX --change-batch '{
  "Changes": [{
    "Action": "CREATE", 
    "ResourceRecordSet": {
      "Name": "default._bimi.st-sub.example.com",
      "Type": "TXT",
      "TTL": 300,
      "ResourceRecords": [{
        "Value": "\"v=BIMI1; l=https://example.com/logo.svg;\""
      }]
    }
  }]
}'

# BIMI設定(無効化)
aws route53 change-resource-record-sets --hosted-zone-id ZXXXXX --change-batch '{
  "Changes": [{
    "Action": "CREATE",
    "ResourceRecordSet": {
      "Name": "default._bimi.example.com", 
      "Type": "TXT",
      "TTL": 300,
      "ResourceRecords": [{
        "Value": "\"v=BIMI1; l=;\""
      }]
    }
  }]
}'

STEP 5: テストメール送信

# BIMI対応ドメインからのテスト
aws ses send-email \
  --from "info@st-sub.example.com" \
  --to "test@example.com" \
  --subject "BIMI Test - Logo Expected" \
  --text "This email should display our brand logo."

# BIMI非対応ドメインからのテスト  
aws ses send-email \
  --from "info@example.com" \
  --to "test@example.com" \
  --subject "BIMI Test - No Logo Expected" \
  --text "This email should NOT display any logo."

BIMI証明書について

証明書の種類と価格

証明書タイプ 価格(年額) 要件
VMC(Verified Mark Certificate) $1,500〜 商標登録必須
CMC(Common Mark Certificate) $1,089〜 商標不要
証明書なし $0 Yahoo/Fastmailのみ対応

推奨アプローチ

  1. 証明書なしで実装開始 → Yahoo、Fastmailで効果測定
  2. ROI確認後にCMC購入検討 → Gmail対応のため
  3. 大企業はVMC検討 → 最高レベルの信頼性

メールプロバイダー対応状況

プロバイダー BIMI対応 証明書要件 備考
Yahoo Mail 不要 大量送信者のみ
Gmail VMC/CMC必須 2021年6月〜
Apple Mail VMC/CMC必須 iOS16〜
Fastmail 不要 -

RFC 8617仕様に基づく実装

サブドメインDNSルックアップの仕組み

RFC 8617で定義されているDNSルックアップ順序:

foo.example.com からのメールの場合:
1. default._bimi.foo.example.com を検索
2. 見つからなければ default._bimi.example.com を検索(継承)

明示的なBIMI拒否の意味

RFC 8617より:

"If both the 'l' and 'a' tags are empty, it is an explicit refusal to participate in BIMI. This is critically different than not publishing a BIMI record in the first place."

空のl=パラメータの効果:

# 明示的なBIMI拒否(RFC準拠)
default._bimi.example.com. TXT "v=BIMI1; l=; a=;"

# レコードなし(継承が発生する可能性)
# DNS応答: NXDOMAIN

RFC準拠の設定例

本記事の実装がRFC 8617に完全準拠している証拠:

# ✅ BIMI有効(ロゴ指定)
default._bimi.st-sub.example.com. TXT "v=BIMI1; l=https://example.com/logo.svg;"

# ✅ BIMI明示的拒否(空のl=パラメータ)
default._bimi.example.com. TXT "v=BIMI1; l=;"
default._bimi.sub.example.com. TXT "v=BIMI1; l=;"

この設定により、RFC仕様に基づいた確実なサブドメイン制御が実現されます。

トラブルシューティング

ロゴが表示されない場合

  1. DNS確認
dig TXT default._bimi.subdomain.example.com
  1. DMARC確認
dig TXT _dmarc.example.com
# p=quarantine または p=reject が必要
  1. SVGアクセス確認
curl -I https://example.com/logo.svg
# HTTP/2 200 が返ることを確認

Yahoo Mailで表示されない理由

  • 送信量不足: 個人レベルでは表示されない
  • レピュテーション不足: 新しい送信者は時間が必要
  • 時間要件: 実装後数週間かかる場合あり

AWS料金について

使用リソースと料金

サービス 料金 備考
Route53 DNS $0.50/月 ホストゾーン料金
Route53 クエリ $0.40/100万クエリ DNS問い合わせ
SES送信 $0.10/1000通 サンドボックス無料枠あり

月額コスト: 約$1〜2程度(通常利用)

不要リソース削除

テスト後に削除可能なもの:

  • 不要なDNSレコード
  • 未使用のSESアイデンティティ

削除不要なもの:

  • Route53ホストゾーン(ドメイン運用に必要)
  • 基本的なSPF/DKIM/DMARCレコード

まとめ

BIMIの選択的実装により、以下が実現できました:

  1. 柔軟なブランディング制御: サブドメインごとにロゴ表示を制御
  2. 段階的な導入: 一部のサブドメインでテスト後、順次拡大
  3. コスト効率: 証明書なしでも一部プロバイダーで効果測定可能

BIMI実装は技術的には比較的シンプルですが、実際の表示には送信量やレピュテーションが重要です。まずは証明書なしで効果を測定し、ROIが確認できた段階で証明書の購入を検討することをお勧めします。

参考リンク


本記事の内容は2025年6月時点の情報に基づいています。BIMIの仕様や各プロバイダーの対応状況は変更される可能性があります。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?