AWS SES MessageRejected: メールアドレスが未確認(サンドボックスモード)の修正方法

beginner☁️ AWS2026-03-26| AWS SES (Simple Email Service)、全リージョン、SDK/SMTP/CLI

Error Message

MessageRejected: Email address is not verified. The following identities failed the check in region US-EAST-1: recipient@example.com
#ses#メール#サンドボックス#smtp#本番環境

エラーの内容

AWS SES 経由でメールを送信すると、即座に以下のエラーが返ってきます:

MessageRejected: Email address is not verified. The following identities failed the check in region US-EAST-1: recipient@example.com

送信者アドレスは正常に機能しており、認証情報も問題ありません。それでも SES はすべての送信メールを拒否します。これはサンドボックスが正常に動作している結果です――残念ながら、あなたの意図に反する形で。

原因

すべての新しい AWS アカウントは、SES が サンドボックスモード でロックされた状態から始まります。このモードでは、SES は明示的に検証済みのメールアドレスまたはドメインにのみ送信が許可されます――任意の受信者への送信はいかなる例外もありません。

サンドボックスでは 1 日あたり 200 通1 秒あたり 1 通 という制限もあります。以下のいずれかの条件に該当する場合にエラーが発生します:

  • 受信者のアドレスが SES で検証されていない
  • サンドボックスのままで、本番アクセスをリクエストしていない
  • ID があるリージョン(例:us-east-1)で検証されているが、別のリージョン(例:eu-west-1)経由で送信している

修正方法 1:本番アクセスをリクエストする(推奨)

実際のアプリケーションであれば、これが最適な解決策です。本番アクセスにより検証済み受信者の制限が解除され、デフォルトの送信クォータが 1 日あたり 50,000 通に引き上げられます。

  • AWS コンソール → SES → アカウントダッシュボード に移動する
  • 本番アクセスをリクエスト をクリックする
  • フォームに入力する:ユースケース、予想送信量、バウンスとクレームの処理方法
  • 送信する――AWS は通常 24 時間以内にリクエストを審査しますが、複雑なケースはそれ以上かかる場合があります

CLI を使用する場合は、直接リクエストを送信できます:

aws sesv2 put-account-details \
  --mail-type TRANSACTIONAL \
  --website-url https://yourapp.com \
  --use-case-description "Sending transactional emails (password reset, order confirmation) to registered users who opted in" \
  --additional-contact-email-addresses your@email.com \
  --production-access-enabled \
  --region us-east-1

アカウントがすでに承認済みかどうかを確認する:

aws sesv2 get-account --region us-east-1

レスポンス内の "ProductionAccessEnabled": true を確認してください。false と表示されている場合は、リクエストがまだ審査中か、まだ送信されていない状態です。

修正方法 2:受信者のメールアドレスを検証する(テスト用の即時対応)

本番アクセスの審査を待っている場合は、テストに使用する特定のアドレスを検証してください。SES がそのメールボックスに確認リンクを送信します――リンクをクリックすると、そのアドレスがサンドボックスで使用可能になります。

# 受信者のメールアドレスを検証する
aws ses verify-email-identity \
  --email-address recipient@example.com \
  --region us-east-1

現在検証済みのすべての ID を確認する:

aws ses list-identities --region us-east-1

送信前に特定のアドレスが検証済みかどうかを確認したい場合:

aws ses get-identity-verification-attributes \
  --identities recipient@example.com \
  --region us-east-1

検証済みのアドレスは以下のように返されます:

{
    "VerificationAttributes": {
        "recipient@example.com": {
            "VerificationStatus": "Success"
        }
    }
}

Success 以外の値――たとえば Pending――が表示された場合は、受信者がまだ確認リンクをクリックしていないことを意味します。

修正方法 3:ドメイン全体を検証する

アドレスを 1 件ずつ検証するのはすぐに面倒になります。ドメイン全体を検証すれば、そのドメインのすべてのアドレスがサンドボックスモードで自動的に有効な受信者として扱われます。

# DNS に追加する TXT レコードを取得する
aws ses verify-domain-identity \
  --domain example.com \
  --region us-east-1

AWS が検証トークンを返します。DNS プロバイダーで TXT レコードとして追加してください:

_amazonses.example.com  TXT  "your-verification-token-here"

DNS の伝播には数分から数時間かかる場合があります。伝播後に検証ステータスを確認してください:

aws ses get-identity-verification-attributes \
  --identities example.com \
  --region us-east-1

修正方法 4:リージョンの不一致

SES の ID はリージョンごとに管理されます。us-east-1 でドメインを検証しても、eu-west-1 経由のリクエストには何の効果もありません――コンソール上で検証済みに見えても、同じ MessageRejected エラーが発生します。

コードが ID を実際に検証したリージョンを参照していることを確認してください:

import boto3

# region_name は ID を検証したリージョンと一致させる必要があります
client = boto3.client('ses', region_name='us-east-1')

response = client.send_email(
    Source='verified-sender@yourdomain.com',
    Destination={'ToAddresses': ['recipient@example.com']},
    Message={
        'Subject': {'Data': 'Test'},
        'Body': {'Text': {'Data': 'Hello'}}
    }
)

各リージョンで検証されている ID を比較して不一致を特定する:

aws ses list-identities --region us-east-1
aws ses list-identities --region eu-west-1

修正が完了したか確認する

CLI からテストメールを直接送信して、動作を確認する最速の方法です:

aws ses send-email \
  --from "sender@yourdomain.com" \
  --destination "ToAddresses=recipient@example.com" \
  --message "Subject={Data=Test,Charset=UTF-8},Body={Text={Data=It works,Charset=UTF-8}}" \
  --region us-east-1

成功した場合は以下のようなレスポンスが返ります:

{
    "MessageId": "0100018e1234abcd-..."
}

MessageRejected が表示されなければ、問題は解決しています。

予防策

  • 本番アクセスのリクエストは早めに送信する。 リリース当日まで待たないでください。SES を設定した時点ですぐに申請しましょう――承認はすぐに行われるわけではなく、本番デプロイ中にブロックされると非常に困ります。
  • 自動テストでは SES シミュレーターアドレスを使用する。 AWS は success@simulator.amazonses.combounce@simulator.amazonses.com などのアドレスを提供しており、これらはサンドボックス内で検証なしに使用でき、1 日あたり 200 通のクォータにも影響しません。
  • 本番環境に移行する前に SNS のバウンスとクレーム通知を設定する。 AWS は本番アクセスの条件としてこれを求めており、承認後に省略すると送信者レピュテーションが危険にさらされます――クレームが一定数に達するとアカウントが停止されます。
  • 新しいリージョンはゼロからのスタートになる。 ap-southeast-1 や他のリージョンに展開する場合は、そのリージョンでドメインを再検証し、別途本番アクセスのリクエストを申請する必要があります。

Related Error Notes