まずsandboxを確認してください。これが、そもそも動作するかどうかを決めます。新しいSESアカウントは、すべてのリージョンでsandboxから開始されます。sandboxにある間、SESが配信できるのは、検証済みのメールアドレス、検証済みドメイン、SES独自のmailbox simulatorだけです。さらに、24時間あたり200通、1秒あたり1通という制限があります。
Email Spam Testerのアドレスを検証しても、この制限は回避できません。SESはリンク付きのメールを送信して受信者を検証しますが、Email Spam Testerのアドレスは1通だけ受信すると閉じるため、その検証メールで使い切ることになります。そのため実際には、送信元のリージョンでproduction accessが必要です。AWSは、この申請に対して96時間以内に最初の回答を行うとしています。
sandboxの状態はリージョンごとに異なるため、eu-west-1でproductionになっているアカウントでも、us-east-1ではsandboxのままの場合があります。identityもリージョンごとに管理され、それぞれに固有のDKIMレコードがあります。
アドレスを取得し、メッセージを1通送信する
email-spam-tester.comを開き、表示されたアドレスをコピーします。アカウントやAPIキーは不要で、t.email-spam-tester.comにあるtest-と20文字を組み合わせた形式です。有効時間は1時間で、送信できるのは1通だけなので、アドレスを取得する前に送信コマンドを準備してください。
最小構成の送信方法はCLIです。AWSのSES tenantsページにある例から、tenantとconfiguration setのフラグを除いたものです。
aws sesv2 send-email \
--from-email-address "sender@yourdomain.com" \
--destination "ToAddresses=test-xxxxxxxxxxxxxxxxxxxx@t.email-spam-tester.com" \
--content "Simple={Subject={Data='Test Subject',Charset=utf-8},Body={Text={Data='Test email body',Charset=utf-8}}}"
本番環境でも、Fromには検証済みidentityを指定する必要があります。このようなテキストのみの本文でも、認証とIPはテストできますが、コンテンツについてはほとんど判断できません。実際の判定を得るには、アプリケーションが実際に送信するメッセージを、HTMLパートとヘッダーを含めて送信してください。boto3のsend_email、SMTPライブラリ、その他の方法のいずれであっても、同じコードパスを使用してください。本番送信でconfiguration setを使用している場合は、ここにも--configuration-set-nameを追加し、同じ設定でテストを実行してください。
受信先テストも同じコマンドに組み込めます。プロバイダーの受信トレイをテストアドレスと一緒にToAddressesへ追加し、マーカーをSubjectのデータへ追加します。1回の呼び出しで2つのレポートが作成され、2つ目のレポートには、Gmail、Outlook、Yahooなどのプロバイダーでメッセージが届いたフォルダーが表示されます。これらの受信トレイも検証済みではないため、この方法にも本番アクセスが必要です。
コンソールを使う方法もあります。Configuration > Identitiesを開き、identityをクリックしてSend test emailを選択します。独自のヘッダーを含む完全なMIMEメッセージを貼り付ける場合は、Rawを選択してください。AWSでは、コンソールは通常テストメールにのみ使用するツールと説明されており、ドキュメントにもテスト用プレフィックスやメッセージに対するその他の変更は記載されていません。sandboxでは、Custom recipientフィールドに検証済みアドレスが必要なため、前述の問題に戻ることになります。
新しいSES IDがレポートでどのように表示されるか
レポートから · 認証
- SPF合格不一致MAIL FROMは自分のドメインではなく、amazonses.comのサブドメインです。
- DKIM合格一致Easy DKIMは、自分のドメインの2048ビット鍵ですべてのメッセージに署名します。
- DMARC合格DMARCレコードを公開すると、アライメントされたDKIM署名によって合格します。
デフォルトのSES IDでは、SPFは合格しますが、amazonses.comに対する合格です。カスタムMAIL FROMを設定するとアライメントされます。
DKIM。 Easy DKIMはドメインIDのデフォルトで、2048ビット鍵ですべてのメッセージに署名します。設定するのは、token._domainkey.yourdomain.comという名前でtoken.dkim.<region>.amazonses.comを参照する3つのCNAMEレコードです。DKIMチェックが失敗した場合は、まず2点を確認します。DNSの反映が完了しているか(AWSでは最大72時間かかるとしています)、DNSホストが名前にドメインを追加してtoken._domainkey.yourdomain.com.yourdomain.comを作成していないかです。BYODKIMでは、代わりに独自のセレクターで1つのTXTレコードを公開します。2つの方式を切り替えている途中では、SESが署名なしで送信する場合があり、レポートではDKIMが欠落していると判定されます。DKIMチェッカーでは、トークンをセレクターとして使用します。
SPFとReturn-Path。 デフォルトでは、SESはamazonses.comのサブドメインをMAIL FROMとして使用します。SPFは合格しますが、amazonses.comに対する合格のため、レポートではSPFがFromとアライメントされていないと表示されます。DKIMがアライメントされていれば影響は小さく(100点満点で5点ではなく2点)、DMARCもDKIMによって合格します。SPFもアライメントするには、メールを受信しないカスタムMAIL FROM用サブドメインに、10 feedback-smtp.<region>.amazonses.comというMXレコードを1つだけ設定し、TXTレコードv=spf1 include:amazonses.com ~allを追加します。メールを受信するサブドメインは選ばないでください。また、DMARCレコードにはaspf=sを含めないでください。AWSによると、厳格なSPFポリシーではSESのSPFアライメントが機能しないためです。
DMARC。 SESはDMARCレコードを公開しません。AWSのサンプルはv=DMARC1;p=quarantine;rua=mailto:my_dmarc_report@example.comです。DMARCレポートをまだ誰も確認していない場合は、p=noneから開始し、後で厳格化することを推奨します。DMARCチェッカーでは現在の設定を確認でき、DMARC failではよくある問題を説明しています。
値の例です。実際の値はアカウントからコピーしてください。
| 名前 | Type | 値 | 用途 | コピー |
|---|---|---|---|---|
| token. | CNAME | token. | Easy DKIM。トークンごとに1つ、合計3つ設定します。 | |
| mail. | MX | 10 feedback-smtp. | カスタムMAIL FROM。メールを受信しないサブドメインに、MXレコードを1つだけ設定します。 | |
| mail. | TXT | v= | カスタムMAIL FROM用のSPFです。SPFをFromとアライメントします。 | |
| _dmarc. | TXT | v= | AWSのDMARCサンプルです。レポートをまだ誰も確認していない場合はp=noneから開始し、aspf=sは含めません。 |
List-Unsubscribe。 SESがList-UnsubscribeとList-Unsubscribe-Postを追加するのは、連絡先リストとトピックを指定するListManagementOptionsを使用して送信する場合だけです。その場合でも、対象は受信者が1人のメッセージとEasy DKIMを使用するメッセージに限られ、独自に設定した購読解除ヘッダーはSESによって上書きされます。それ以外のメッセージには購読解除ヘッダーがまったく付かないため、ニュースレターでは、自分で追加しない限りList-Unsubscribeチェックとワンクリックチェックの両方が失敗します。2024年3月以降、v2 APIではraw MIMEを使用せずにカスタムヘッダーを指定できます。AWSのワンクリックに関するブログ記事を参考にすると、2つのヘッダーは次のようになります。
"Headers": [
{ "Name": "List-Unsubscribe",
"Value": "<https://yourdomain.com/unsub?address=x&topic=x>, <mailto:unsubscribe@yourdomain.com>" },
{ "Name": "List-Unsubscribe-Post",
"Value": "List-Unsubscribe=One-Click" }
]
その後、エンドポイントでPOSTを処理する必要があります。リストヘッダーのないパスワードリセットや領収書は別のケースであり、レポートでは一括送信者に関するチェックがスキップされたと表示されます。このヘッダーについて詳しくは、List-Unsubscribeのページを参照してください。
IPとブロックリスト
新しいアカウントでは、他のSESユーザーと共有するIPから送信します。AWSは、送信量が多く安定している場合を除き、共有IPの使用を推奨しています。レポートは送信元IPを21件のブロックリストで照会します。共有アドレスで検出された場合、その登録は共有プールに対するものです。専用IPには、手動でウォームアップするStandardと、SESがウォームアップを処理するManagedがあります。専用IPの場合、ブロックリストへの登録は自身の送信に関連します。Headersタブに表示されたIPは、ブロックリストチェッカーですぐに確認できます。
AWSもアカウントを監視します。AWSの措置に関するFAQでは、存在しない受信者によってバウンス率が上昇しないように、メールを受信できる実在のアドレスまたはシミュレーターを使ってテストするよう求めています。バウンス率が5%、または苦情率が0.1%に達すると、アカウントは審査対象になります。
下部の修正プランには最大8件の変更が表示されます。該当する場合はコピー用のDNSレコードも表示され、各修正の横にあるポイントは、その修正に関連するチェックの現在の減点数です。モデルは修正方法を選択して説明しますが、費用は算出しません。チェック名の意味が分からない場合は、ドキュメントで42項目すべてを確認できます。
AWSの参考資料
Sandboxとproduction accessdocs.aws.amazon.com ↗Easy DKIMdocs.aws.amazon.com ↗カスタムMAIL FROMdocs.aws.amazon.com ↗SESでのDMARCdocs.aws.amazon.com ↗購読管理docs.aws.amazon.com ↗sesv2 send-emaildocs.aws.amazon.com ↗質問
SES sandboxからテストできますか?
当サービスのアドレスではテストできません。sandboxでは、SESは検証済みの受信者にのみ配信します。当サービスのアドレスを検証すると、受信可能な1通を使い切ってしまいます。そのRegionのproduction accessをリクエストし、それまでは無料のDKIM、SPF、DMARCチェッカーでレコードを確認してください。
SES mailbox simulatorでも同じ情報を取得できますか?
いいえ。SESがbounce、complaint、deliveryをどのように処理するかは確認でき、通常の送信と同様に課金されます。ただし、ヘッダー、認証、コンテンツは解析されません。
ルートドメインのSPFレコードにSESを追加すべきですか?
受信側は、デフォルトではamazonses.comのサブドメイン、またはカスタムMAIL FROMサブドメインであるMAIL FROMドメインに対してSPFを確認します。SESのSPFレコードはそのサブドメインに設定します。MAIL FROMのページにあるとおり、ルートドメインには何も設定する必要はありません。