■SES メール送信
■メールの送信
Amazon EC2 Eメール送信ベストプラクティス
http://dev.classmethod.jp/cloud/aws/ec2-send-email-best-practice/
Amazon SESによるメール送信環境の構築と実践
http://dev.classmethod.jp/cloud/aws/amazon-ses-build-and-practice/
AWS SDK を使用して Amazon SES から E メールを送信する
https://docs.aws.amazon.com/ja_jp/ses/latest/DeveloperGuide/send-an-email-using-sdk.html
以下は未検証だが比較的最近の記事
AWS再入門ブログリレー Amazon SES編 | Developers.IO
https://dev.classmethod.jp/cloud/aws/re-introduction-2019-amazon-ses/
Amazon SES ベストプラクティス&アンチパターン - 後ろを向いて後退します
http://micpsm.hatenablog.com/entry/2019/12/06/120000
【Amazon SES】SESでメール送信する時に知っておきたい事 - websandbag ブログ
https://blog.websandbag.com/entry/2019/07/31/160557
Amazon SES でメール送信するときのベストプラクティスまとめ(2020年10月) | Developers.IO
https://dev.classmethod.jp/articles/ses-send-mail-best-practices-summary/
SESが不正利用された!?その調査と対応 | Developers.IO
https://dev.classmethod.jp/articles/ses_compromised_check/
さらにその後、以下の記事もあった
参考にできそう
大規模Email配信システムのクラウドジャーニー - DeNA Engineers' Blog
https://engineer.dena.com/posts/2021.05/email-cloud-migration/
そのメール、本当に届いてる?Amazon SESの運用で得た監視プラクティス - Cybozu Inside Out | サイボウズエンジニアのブログ
https://blog.cybozu.io/entry/2021/11/26/075846
AWS SESで信頼性の高いメール送信(SPF, DKIM, DMARC) with Terraform - 電気ひつじ牧場
https://cha-shu00.hatenablog.com/entry/2022/03/06/175823
2020年7月から東京リージョンが利用できるようになったので、東京リージョンで使用する
Amazon SES 東京リージョン対応のお知らせ | Amazon Web Services ブログ
https://aws.amazon.com/jp/blogs/news/amazon-ses-tokyo/
■メール送信のベストプラクティス
SESはバウンスや苦情を抑えることが重要になる
対策例が以下に紹介されているので参考にする
Amazon SES を使用した E メール送信のベストプラクティス - Amazon Simple Email Service
https://docs.aws.amazon.com/ja_jp/ses/latest/dg/best-practices.html
ヒントとベストプラクティス - Amazon Simple Email Service
https://docs.aws.amazon.com/ja_jp/ses/latest/dg/tips-and-best-practices.html
Amazon SES 送信レビュープロセスに関するよくある質問 - Amazon Simple Email Service
https://docs.aws.amazon.com/ja_jp/ses/latest/dg/faqs-enforcement.html
特に「Q11. バウンスを最小限に抑えるにはどうすればよいですか?」の項目が参考になりそう
例えばメールでの仮登録機能などは「友だちにメールを送る」機能の対策が参考になりそう
Amazon Simple Email Service Eメール送信のベストプラクティス(PDF)
https://media.amazonwebservices.com/jp/wp/AWS_Amazon_SES_Best_Practices.pdf
以下、実際に試した内容のメモ
■ドメインの登録
Amazon Simple Email Service → 設定 → 検証済みID → IDの作成
「IDの詳細」で以下のように入力する
IDタイプ: ドメイン
ドメイン: refirio.net
「デフォルト設定セットの割り当て」と「カスタムMAIL FROMドメインの使用」にはチェックを入れない
続いて「ドメインの検証」の「DKIM の詳細設定」で以下のように入力する
IDタイプ: Easy DKIM
DKIM署名キーの長さ: RSA_2048_BIT
「DNSレコードのRoute53への発行」と「DKIM署名」にチェックを入れる
これで「IDの作成」ボタンをクリック
完了画面に
必要なアクション
この ID の所有権を確認するには、指定された CNAME レコードを使用してドメインの DNS 設定で DKIM を設定する必要があります。
と表示された
画面上部の「ID ステータス」で「検証保留中」となっている
また画面下部の「DomainKeys Identified Mail (DKIM)」で「DKIM の設定」が「保留中」となっている
また「DNSレコードの発行」部分にCNAMEレコードが表示されている
このレコードを登録する必要がある…かと思ったが、Route53を確認すると登録済みになっていた(Route53にドメインが存在する場合、自動で設定されるのかもしれない)
SESの画面を再読み込みすると、どちらも「検証済み」になっていた
また数分待つと「DKIM setup SUCCESS for refirio.net in Asia Pacific (Tokyo) region」というメールが届いた
また、Route53を確認すると対象のCNAMEが登録されていた
(サブドメインの権限を移譲した先のAWSアカウントでも問題無かった)
■SMTPアカウントの発行
Amazon Simple Email Service → SMTP設定 → SMTP認証情報の作成
IAMユーザの作成画面になる
「IAM User Name」はそのままで「作成」ボタンをクリック
ボタンが「認証情報のダウンロード」に変わり、クリックするとアカウント情報が記載されたCSVファイルをダウンロードできる
今回は以下の情報を取得できた
IAM User Name: ses-smtp-user.12345678-901234
Smtp Username: XXXXXXXXXX
Smtp Password: YYYYYYYYYY
それ以外の情報は、「SMTP設定」の画面に表示されている
今回は以下のように表示されていた
SMTPエンドポイント: email-smtp.ap-northeast-1.amazonaws.com
Transport Layer Security (TLS): 必須
STARTTLS ポート: 25、587 または 2587
カスタム SSL クライアントのサポート: -
TLS ラッパーポート: 465 または 2465
この情報をもとに、いったんPHPMailerからメール送信テストを行なってみる(送信プログラムの詳細は、後述の「PHPMailerからSMTPでメールを送信」を参照)
…が。以下のエラーになった
接続はできているようだが、送信制限に引っかかっているのだと思われる
この時点では、送信元も送信先も refirio.net である必要がある…はず
CLIENT: 554 Message rejected: Email address is not verified. The following identities failed the check in region AP-NORTHEAST-1: refirio.work@gmail.com
■送信制限の解除
Amazon SES サンドボックス外への移動 - Amazon Simple Email Service
https://docs.aws.amazon.com/ja_jp/ses/latest/dg/request-production-access.html
Amazon Simple Email Service → アカウントダッシュボード
準備ができたら本稼働アクセスのリクエストをするように案内が表示されている
現時点では以下のように送信制限が表示されている
日次送信クォータ: 200(24時間あたりのEメール数)
最大送信レート: 1(1秒あたりのEメール数)
「本稼働アクセスのリクエスト」ボタンをクリック
リクエストするための画面に遷移するので、以下のように入力
メールタイプ: トランザクション
ウェブサイトのURL:
https://refirio.net/
ユースケースの説明: お客様宛に通知メールを送信します。メール受信者のアドレスはシステムで管理されており、送信できないメールアドレスは登録されておりません。
その他の連絡先: (空欄)
連絡する際の希望言語: Japanese
「私はAWSサービス条件と適正利用規約(AUP)に同意します」にチェックを入れ、「リクエストの送信」ボタンをクリック
以下のように表示された
本稼働アクセスのリクエストが正常に送信されました。リクエストの詳細を確認するまでに最大で 24 時間かかることがあります。
翌日に以下のメールが届き、送信制限は解除された
再度PHPMailerからメール送信テストを行うと、無事にメールが送信できた
またGmailからメールのヘッダを確認すると、以下のとおりSPF&DKIMともに「PASS」になっていた
SPF: PASS(IP: 23.251.234.10)
DKIM: 'PASS'(ドメイン: refirio.net)詳細
■送信制限の解除(昔の手順)
Amazon SES サンドボックスの外への移動
http://docs.aws.amazon.com/ja_jp/ses/latest/DeveloperGuide/request-production-access.html
「Sending Statistics」画面に表示されている「Request a Sending Limit Increase」をクリックする
名前: refirio-user
アカウント: 123456789012
内容: サービス制限の増加
制限タイプ: SES送信制限
リージョン: 米国東部 (バージニア北部)
制限: 希望する最大送信レート
新しい制限値: 3
メールの種類: システム通知
ウェブサイトのURL: (空欄)
私は AWS サービス利用規約と AUP に準拠してメールを送信します: はい
私は明確にリクエストされた受信者にのみメールを送信します: はい
バウンスや苦情を処理するプロセスがあります: はい
申請理由の説明: お客様宛にニュースを定期配信します。メール受信者のアドレスはシステムで管理されており、送信できないメールアドレスは登録されておりません。
お問い合わせ言語: 日本語
連絡方法: Web
※最大送信レート
Amazon SES が 1 秒あたりにアカウントから受け付ける E メールの最大数。
この制限を瞬間的に超えることはできますが、制限を超えた状態が長時間続くことは許可されません。
https://docs.aws.amazon.com/ja_jp/ses/latest/DeveloperGuide/manage-sending-limits.html
申請後、3時間ほどで返信が来て制限が解除された
■送信制限の解除(昔の手順でのトラブル事例)
申請後、3時間ほどで返信が来て制限が解除された…と思ったが、
相変わらず「Sending Statistics」画面に「Request a Sending Limit Increase」と表示されてことがあった
未承認アドレスへのメール送信テストもエラーになった
2日経っても変化がないのでクローズされたケースを再開し、以下の問い合わせをした
一応日本語と英語を併記した
半日程度で以下の返信があり、制限は解除された
AWS側で正しく手続きできていなかったみたい?
Thank you very much for bringing this to our attention.
After investigating, we have discovered that the problem was on our end
and we have increased your sending quota to 50,000 messages per day
and your maximum send rate to 14 messages per second in AWS Region US East (N. Virginia).
Your account has also been moved out of the sandbox, so you no longer need to verify recipient addresses.
■PHPMailerからSMTPでメールを送信
※PHPMailerでのメール送信については、Etcetera.txt の「PHPMailerを使ってSMTPでメールを送信する」も参照
<?php
require_once 'PHPMailer/class.phpmailer.php';
require_once 'PHPMailer/class.smtp.php';
// SMTPサーバ: ホスト
define('SMTP_HOST', 'email-smtp.ap-northeast-1.amazonaws.com');
// SMTPサーバ: メールアカウント
define('SMTP_USERNAME', 'XXXXXXXXXX');
// SMTPサーバ: メールパスワード
define('SMTP_PASSWORD', 'YYYYYYYYYY');
// SMTPサーバ: プロトコル (ssl または tls)
define('SMTP_SECURE', 'tls');
// SMTPサーバ: 送信ポート (ssl:465, tls:587)
define('SMTP_PORT', '587');
// メール送信準備
$mail = new PHPMailer();
$mail->isSMTP();
$mail->SMTPAuth = true;
$mail->Host = SMTP_HOST;
$mail->Username = SMTP_USERNAME;
$mail->Password = SMTP_PASSWORD;
$mail->SMTPSecure = SMTP_SECURE;
$mail->Port = SMTP_PORT;
// メール内容定義
$mail->CharSet = 'UTF-8';
$mail->Encoding = 'base64';
$mail->setFrom('from@example.com', 'メール送信者');
$mail->addAddress('to@example.com', 'メール受信者');
$mail->Subject = 'SESからの送信テスト';
$mail->Body = "テスト。\nこれはテストです。";
// メール送信
if (!$mail->send()) {
exit('Error: ' . $mail->ErrorInfo);
}
exit('complete');
tls と 587 は、ssl と 465 にしても送信できたが、tls(587)の方が推奨されるらしい
ポートの違いについては以下を参照
ポート465と587の違いとは? | SendGridブログ
https://sendgrid.kke.co.jp/blog/?p=12945
■PostfixからSMTPでメールを送信
後述の「SES PostfixからSMTPでメールを送信」を参照
■メーラーからSMTPでメールを送信
SMTPを使ってAmazonSESのメールをGmailで送信できるようにする | Hodalog
https://hodalog.com/sending-email-with-ses-using-smtp-and-gmail/
Amazon SESでメールクライアントからSMTP送信を行う | DevelopersIO
https://dev.classmethod.jp/articles/amazon-ses-smtp/
■サブドメインでのメール送信
例えば refirio.net のドメインからメールを送信できるようにした場合、
自動的に stg.refirio.net などサブドメインからも送信できるようになる
SESで承認したドメインのサブドメインを送信元アドレスとしてメールを送信してみる | DevelopersIO
https://dev.classmethod.jp/articles/send-email-with-subdomain-of-verified-domain-in-ses-as-source-ad...
「上位ドメインを一つSESで承認しておけば、環境や用途ごとに異なるサブドメインをメール送信に使えるのは便利ですね。」
■メールの一括送信
Amazon SESでメールを一括送信したい時の留意点 | DevelopersIO
https://dev.classmethod.jp/articles/points-to-keep-in-mind-when-you-want-to-send-emails-in-bulk-with...
Laravel + Amazon SES でクリック率が分かるメルマガを一斉送信する - console dot log
https://blog.capilano-fw.com/?p=9186
SDK経由で、メールの一括送信ができる
ただし「1回のAPI実行でのメッセージ送信可能数は最大50通」という制限があるので注意
APIを複数回に分けて叩く必要があるようなので、それなら独自にキューで送信する仕組みを作成する方が自由度が高いか
また一括送信する場合、メールを見たユーザが一斉にアクセスが来るとサーバ負荷が上がるので、徐々に送信することも考えたい
■Return-Pathの設定
何もしなければ、以下のようなReturn-Pathになっていた
(SPFのために、Amazon所有のドメインが使用されるらしい)
Return-Path: <012345678901cee8-57b4ef59-99a0-4548-b220-f14c687d28f2-000000@ap-northeast-1.amazonses.com>
以下は参考になるかもしれないが、現状未検証
AWS SES で検証済のドメインとメールアドレスが競合しているときのカスタム MAIL FROM での書き換え #AWS - Qiita
https://qiita.com/ngyuki/items/63e0e57cab2cba266eef
Amazon SES でメール送信するときのベストプラクティスまとめ(2020年10月) | DevelopersIO
https://dev.classmethod.jp/articles/ses-send-mail-best-practices-summary/
Amazon SESのE メール形式 - Amazon Simple Email Service
https://docs.aws.amazon.com/ja_jp/ses/latest/dg/send-email-concepts-email-format.html
到達率に影響すると思われるので、それとは関係なく設定しておくべきか…と思うが、設定するとバウンスメールの受け取りに悪影響があるか
そもそも、後述の「バウンスメールの設定」を行うなら不要か
以下の公式解説では「Amazon SES を使用する場合は、常に「Return-Path」パラメータを設定して、バウンスを常時把握し、バウンスの発生時に適切なアクションを実行できるようにすることをお勧めします。」となっている
が、「バウンスメールの設定」によってAmazonのアドレスが入っているのなら、変更すべきでは無いか
Amazon SESのE メール形式 - Amazon Simple Email Service
https://docs.aws.amazon.com/ja_jp/ses/latest/dg/send-email-concepts-email-format.html
■メール送信ログの設定
後述の「SES メール送信ログの設定」を参照
■通知先の作成
Amazon SNS → トピック → トピックの作成
タイプ: スタンダード
名前: refirio
「トピックの作成」ボタンをクリック
トピックが作成されたことを確認する
Amazon SNS → サブスクリプション → サブスクリプションの作成
トピックARN: (上で作成したトピックを選択)
プロトコル: Eメール
エンドポイント: server@refirio.net
「サブスクリプションの作成」ボタンをクリック
サブスクリプションが作成されたことを確認する
また、上で設定したメールアドレスに「AWS Notification - Subscription Confirmation」というメールが送信される
これはメールアドレスの存在確認なので、本文のURLをクリックする
■バウンスメールの設定
Amazon SES → 検証済みID → refirio.net → 通知
フィードバック通知として3つ表示されており、それぞれ
Bounce: SNSトピックなし
Complaint: SNSトピックなし
Delivery: SNSトピックなし
となっている
「編集」ボタンをクリック
SNSトピックの設定が表示される
「バウンスフィードバック」と「苦情のフィードバック」に上で作成した通知先を設定し、
それぞれ「元のEメールヘッダーを含める」にチェックを入れ、「変更の保存」ボタンをクリックする
SESのバウンス情報をメールで受け取る方法 - Qiita
https://qiita.com/K5K/items/2ab9c82fd7b139384ea0
SESでバウンスメールを確認する方法をいくつか試してみた | DevelopersIO
https://dev.classmethod.jp/articles/ses-bounce-check/
AWS SESでハードバウンスのようなメールがソフトバウンス扱いで届いた場合のしくみと対処について - コネヒト開発者ブログ
https://tech.connehito.com/entry/2022/09/22/180521
【こんなときどうする?】Amazon SESのバウンスレートが高くて、メールの送信ができない | SunnyCloud
https://www.sunnycloud.jp/column/20210923-01/
■バウンスメールのテスト
Amazon SES → 検証済みID → refirio.net → テストEメールの送信
Eメール形式: フォーマット済み
From-address: info@refirio.net
シナリオ: バウンス
件名: 送信テスト
本文: これは送信テストです。(バウンス)
設定セット: refirio-ses-log
「テストEメールの送信」ボタンをクリック
「通知先の作成」で指定したメールアドレスに、実際に「AWS Notification Message」という件名のメールが届けば成功
送信元は no-reply@sns.amazonaws.com で、送信先は server@refirio.net となっていた
本文は以下のとおり(冒頭のJSONは、実際は改行なしで記載されていた)
{
"notificationType":"Bounce",
"bounce":{
"feedbackId":"01060180bcc4a2c6-12345678-d33a-40e9-9db7-896a09ad3459-000000",
"bounceType":"Permanent",
"bounceSubType":"General",
"bouncedRecipients":[
{
"emailAddress":"bounce@simulator.amazonses.com",
"action":"failed",
"status":"5.1.1",
"diagnosticCode":"smtp; 550 5.1.1 user unknown"
}
],
"timestamp":"2022-05-13T09:34:05.000Z",
"remoteMtaIp":"203.0.113.2",
"reportingMTA":"dns; e234-3.smtp-out.ap-northeast-1.amazonses.com"
},
"mail":{
"timestamp":"2022-05-13T09:34:04.020Z",
"source":"test@refirio.net",
"sourceArn":"arn:aws:ses:ap-northeast-1:123456789012:identity/refirio.net",
"sourceIp":"203.0.113.1",
"callerIdentity":"refirio-user",
"sendingAccountId":"123456789012",
"messageId":"01060180bcc49ef4-12345678-3bb4-4a9c-ad17-4ff037d8e4cc-000000",
"destination":[
"bounce@simulator.amazonses.com"
]
}
}
--
If you wish to stop receiving notifications from this topic, please click or visit the link below to unsubscribe:
https://sns.ap-northeast-1.amazonaws.com/unsubscribe.html?SubscriptionArn=arn:aws:sns:ap-northeast-1...
Please do not reply directly to this email. If you have any questions or comments regarding this email, please contact us at
https://aws.amazon.com/support
■バウンスレートと苦情率の監視
少なくとも、SESのバウンスレートと苦情率は監視対象にしておきたい
以下などが参考になりそう
AWS SESでハードバウンスのようなメールがソフトバウンス扱いで届いた場合のしくみと対処について - コネヒト開発者ブログ
https://tech.connehito.com/entry/2022/09/22/180521
【こんなときどうする?】Amazon SESのバウンスレートが高くて、メールの送信ができない | SunnyCloud
https://www.sunnycloud.jp/column/20210923-01/
以下は実際の設定例
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
対象 名前 条件
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SES refirio.net SES Reputation.BounceRate 1時間内の1データポイントのReputation.BounceRate > 4
SES refirio.net SES Reputation.ComplaintRate 1時間内の1データポイントのReputation.ComplaintRate > 0.08
SES refirio.net SES Send 1時間内の1データポイントのReputation.Send > 500
SES refirio.net SES Reject 1時間内の1データポイントのReputation.Reject > 5
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
■SPFレコードの確認
SPFレコードは存在しないようだが、これについては以下に解説がある
Amazon SES でメールを送る場合、DNS に SPF 設定は不要だという話 #AWS - Qiita
https://qiita.com/koseki/items/4f291579cf4ceb9f9e47
今回受信したメールを確認すると、Return-Pathは以下のような値になっていた
Amazonのドメインから送信しているので、別途設定しなくても問題無いのだと思われる。なおGmailで確認すると、上に記載したとおりメールヘッダには「SPF: PASS」とある
Return-Path: <0106018bdb917059-9eff61c1-675b-43a5-be62-8c6e05824c49-000000@ap-northeast-1.amazonses.com>
SPFレコードについては、以下のページではSPFは不要と書かれているが、
Amazon SES でメールを送る場合、DNS に SPF 設定は不要だという話 - Qiita
https://qiita.com/koseki/items/4f291579cf4ceb9f9e47
AWS SESで信頼性の高いメール送信(SPF, DKIM, DMARC) with Terraform - 電気ひつじ牧場
https://cha-shu00.hatenablog.com/entry/2022/03/06/175823
以下のページではSPFは必要と書かれている
(古い記事なので現状とは異なるかもしれないが)
AWS SESでのメール送信時にSPFの設定は必要だよ! - Qiita
https://qiita.com/seiketkm/items/a4ddef03b7852353f554
■DMARCを設定
以下のページを参考に、DMARCを設定してみる
Amazon SES にSPF、DKIM、DMARC設定と、サンドボックスを解除してメール送信してみた | DevelopersIO
https://dev.classmethod.jp/articles/amazon-ses-set-up-spf-dkim-dmarc-and-unlocked-sandbox/
解説によると、TXTレコードを1個追加するだけらしい
Complying with DMARC authentication protocol in Amazon SES - Amazon Simple Email Service
https://docs.aws.amazon.com/ses/latest/dg/send-email-authentication-dmarc.html
上記公式ページによると、以下のレコードを追加すればいいらしい
Name: _dmarc.example.com
Type: TXT
Value: "v=DMARC1;p=quarantine;pct=25;rua=mailto:dmarcreports@example.com"
ただしドメイン名は修正する必要があるので、実際は以下のレコードとなる
Name: _dmarc.refirio.net
Type: TXT
Value: "v=DMARC1;p=quarantine;pct=25;rua=mailto:dmarcreports@refirio.net"
DNS設定後、少し時間をおいて以下のとおり反映されていることを確認する
$ dig _dmarc.refirio.net any
;; ANSWER SECTION:
_dmarc.refirio.net. 300 IN TXT "v=DMARC1;p=quarantine;pct=25;rua=mailto:dmarcreports@refirio.net"
PHPMailerからメールを送信してテスト
メールヘッダにDMARCの項目が現れた(反映までは5分ほどかかると思われる)
SPF: PASS(IP: 23.251.234.3)
DKIM: 'PASS'(ドメイン: refirio.net)
DMARC: 'PASS'
AmazonSESでのDMARC設定は容易なので、SESの初期設定時についでに対応しておくと良さそう
またこの場合、dmarcreports@refirio.net でメールを受信できるようにしておく必要があるので注意
このアドレスを refirio.net 以外のドメインにしたい場合、つまり認証を設けたいドメインと通知先のドメインが異なる場合、追加のDNSレコードが必要となる
DMARC 詳細仕様-2 | なりすまし対策ポータル ナリタイ
https://www.naritai.jp/guidance_record.html
> DMARC レポートの受信を外部に委託する場合、すなわち DMARC レコードを設定したドメインと関係の無いドメインを rua や ruf に指定する場合には、相互の関連性を示す必要があります。具体的には、レポートの委譲先のドメインに、委譲元のドメインの情報を示す必要があります。例えば、example.jp ドメインの DMARC レコードで、rua (集約レポート) の宛先として example.com を指定する場合、委譲先の example.com ドメイン側で以下の TXT 資源レコードの設定が必要になります。
> example.jp._report._dmarc.example.com IN TXT "v=DMARC1"
> sp パラメータは、全てのサブドメインに対する DMARC ポリシーを指定します(オプションです)。設定する値は、p パラメータと同じです。
> v パラメータは、バージョン番号を示しますが現状では v=DMARC1 という固定文字列になります。DNS の TXT レコードは、DMARC レコード以外の用途にも利用されますので、他のレコード (SPF レコードなど) と区別するために、このバージョン番号を DMARC レコードの先頭に記述する必要があります。
例えば example.com のドメインで通知を受け取りたい場合、example.com のDNS側で以下のように登録する
(これが無いから通知が一切届かない…ということは無いようだが)
refirio.net._report._dmarc.example.com IN TXT "v=DMARC1"
■ChatGPTによるDKIMの解説1
digコマンドを使用してDNSの登録内容を調査した結果を解説します
あなたが実行したコマンドは以下の通りです:
$ dig 6xtcynuykbn5xmx2o2o2mkxf2fjsblk6._domainkey.refirio.net any
このコマンドの実行結果は以下の通りです:
;; ANSWER SECTION:
6xtcynuykbn5xmx2o2o2mkxf2fjsblk6._domainkey.refirio.net. 300 IN CNAME 6xtcynuykbn5xmx2o2o2mkxf2fjsblk6.dkim.amazonses.com.
解説
・ドメイン名: 6xtcynuykbn5xmx2o2o2mkxf2fjsblk6._domainkey.refirio.net
これはDKIM (DomainKeys Identified Mail) のための特定のレコードを表します。
DKIMは、電子メールメッセージが特定のドメインから実際に送信されたことを確認するための方法です。
・TTL (Time to Live): 300
この数字は、DNSレコードがDNSサーバーのキャッシュに保持される秒数を表します。
この場合、300秒(5分)後にキャッシュが更新されることを意味します。
・レコードタイプ: IN CNAME
INはインターネットを意味し、CNAMEはCanonical Name(別名)レコードを示します。
CNAMEレコードは、一つのドメイン名を別のドメイン名に関連付けるために使用されます。
・ターゲットドメイン名: 6xtcynuykbn5xmx2o2o2mkxf2fjsblk6.dkim.amazonses.com
このCNAMEレコードは、refirio.netドメインのDKIMレコードをAmazon SES(Amazon Simple Email Service)のDKIMレコードに関連付けています。
これにより、refirio.netから送信される電子メールがAmazon SESを介してDKIMで署名されることを示しています。
結論
このDNSの登録内容は、refirio.netドメインの電子メールがAmazon SESを使用してDKIM署名されるように設定されていることを示しています。
これにより、メールの認証と信頼性が向上し、スパムやフィッシングから保護される効果があります。
■ChatGPTによるDKIMの解説2
digコマンドを使ってDNSの登録内容を調査した結果を解説します。
あなたが実行したコマンドは以下の通りです:
$ dig 6xtcynuykbn5xmx2o2o2mkxf2fjsblk6.dkim.amazonses.com any
このコマンドの実行結果は以下の通りです:
;; ANSWER SECTION:
6xtcynuykbn5xmx2o2o2mkxf2fjsblk6.dkim.amazonses.com. 300 IN TXT "p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxJC52Rh2Ei+2l18sK9ocryAgMob/VnSnYvQhS6tiJ4Ij1MNRHjmdtTjIVwfQkKhA0ahVi5rjaEYpvn1SG8yaOU7yOxchEkfelp2xVKM/Oym/PJC3dEVovDlOT0vJN6XzLH80EVvE2CW96MQn8KJVIb8n8jnCB2sdukguT2rsHR/XGkGMFoj0ZFBxAXKwf3fETDK/TSWNHy/SjvqzR" "gOSr/VCJm3ijQxD0i/VET1r/oufplbDtdgpySvjTWn+7yE9A9Di8c/QP/6lm3PHvWwv4qKrvAZaXyHYU+OZWdRCMUTPkq9LUajS1tZdCSQ9e86ALxtBsOjNVx+Th5L5GxixFwIDAQAB"
解説
・ドメイン名: 6xtcynuykbn5xmx2o2o2mkxf2fjsblk6.dkim.amazonses.com
これはAmazon SES (Amazon Simple Email Service) のDKIM (DomainKeys Identified Mail) 設定の一部です。
DKIMは、電子メールの送信者がメールを署名して、受信者がそのメールが改ざんされていないことを確認できるようにする技術です。
・TTL (Time to Live): 300
この数字は、DNSレコードがDNSサーバーのキャッシュに保持される秒数を表します。
この場合、300秒(5分)後にキャッシュが更新されることを意味します。
・レコードタイプ: IN TXT
INはインターネットを意味し、TXTはテキストレコードを示します。
TXTレコードは、ドメインに関する任意のテキスト情報を提供するために使用されます。
・DKIM公開鍵:
表示されている長い文字列(p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A...)は、DKIMの公開鍵を表します。
この公開鍵は、送信者がメールに付けたデジタル署名を検証するために使用されます。
署名は、メールの送信者がそのドメインの所有者であること、およびメールが途中で改ざんされていないことを保証します。
結論
このDNSの登録内容は、Amazon SESを使用して電子メールを送信する際にDKIM署名を利用する設定を示しています。
この設定は、メールの認証と信頼性を向上させ、スパムやフィッシングから保護するために重要です。
公開鍵は、受信したメールの署名が有効かどうかを確認するために使われます。
■ChatGPTによるDKIMの解説3
メールヘッダに含まれるDKIM-Signatureフィールドについて解説します。
DKIM (DomainKeys Identified Mail) は、電子メールの送信者が自分のドメインからメールが送信されたことを確認するための技術です。
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/simple; s=6xtcynuykbn5xmx2o2o2mkxf2fjsblk6; d=refirio.net; t=1700195823; h=Date:To:From:Subject:Message-ID:MIME-Version:Content-Type:Content-Transfer-Encoding; bh=41h2rsirndfR9S9Ure3fglQqn/D8jDSeJVCfSP2ctkQ=; b=eta1GRUx9yJJX8ZWMFF0EzmZI4/DKljgOAOiNvnZCu8qMAxRXaHWK8Qf5vMOSLqV dkkKgjmV94cbAg9bk0k7Z0b2EV90PedMNICGYpcARTAYCKGmSZY+iQ0oCS6Hd0oWtZd 2JUF2jctKoAa/Um979Iq3wjAjzQ6wlpa2pScmLNrop4BxHH/jzu3OvLUptDRUbheWRl wdZeJ3JtCqf4eim6Ejdy/fotwLCpIRaILGUsgY9PsvzgInDStRlzqR/Iea1vwqy747X RGsX6z994HpalvlhDY2eHRVvQrcEK0tcI6TV+ZOe61cThf48xlfVs+Ujqx6HEjVUQDN GeZRdcnrzg==
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/simple; s=zh4gjftm6etwoq6afzugpky45synznly; d=amazonses.com; t=1700195823; h=Date:To:From:Subject:Message-ID:MIME-Version:Content-Type:Content-Transfer-Encoding:Feedback-ID; bh=41h2rsirndfR9S9Ure3fglQqn/D8jDSeJVCfSP2ctkQ=; b=OCOTofp7OCpiwU4PEFrH4cyRewFIaTJOzn0JwVXjpVI7yDN5zF3+bIudfV80Tx3I 8nrORzEU9IJrkzCaZjp2uBriHnVgdAhyAqNbK6FD287yapojW4Y6pspVDU/KpTQqUQ5 3toxL2WodaoX7nTmTnQEZYkw+aIccO7ub7Q5EM2w=
このメールには2つのDKIM署名が含まれています。
DKIM署名の構成要素
・バージョン (v):
v=1は、DKIMのバージョンを示します。
・署名アルゴリズム (a):
a=rsa-sha256は、署名の生成にRSA-SHA256アルゴリズムが使用されたことを意味します。
・クエリメソッド (q):
q=dns/txtは、公開鍵をDNSのTXTレコードから取得することを示します。
・キャノニカライゼーション (c):
c=relaxed/simpleは、メッセージのヘッダと本文の処理方法を示します。relaxedは、ヘッダーの余分な空白や改行を無視することを意味し、simpleは本文をそのままの形で使用することを意味します。
・セレクタ (s):
例えばs=6xtcynuykbn5xmx2o2o2mkxf2fjsblk6は、使用する特定のDKIMキーを識別します。
・ドメイン名 (d):
d=refirio.netやd=amazonses.comは、署名の所有者のドメインを示します。
・タイムスタンプ (t):
t=1700195823は、メールが署名されたUNIXタイムスタンプです。
・署名されたヘッダフィールド (h):
これは、署名の一部として取り込まれるヘッダフィールドを示します。
・本文ハッシュ (bh):
bh=41h2rsirndfR9S9Ure3fglQqn/D8jDSeJVCfSP2ctkQ=などは、メール本文のハッシュ値です。
・署名 (b):
この長いエンコードされた文字列は、上記のすべての要素を含む実際のデジタル署名です。
結論
これらのDKIM署名は、メールがrefirio.netとamazonses.comのドメインから正当に送信され、途中で改ざんされていないことを証明します。
メールが配信されると、受信者のメールサーバーは、これらのドメインのDNSレコードを参照して公開鍵を取得し、署名を検証します。
このプロセスは、メールの真正性と完整性を保証するのに役立ちます。
■ChatGPTによるDMARCの解説
digコマンドを使ってDMARCの設定内容を調査した結果を解説します。
あなたが実行したコマンドは以下の通りです:
$ dig _dmarc.refirio.net any
このコマンドの実行結果は以下の通りです:
;; ANSWER SECTION:
_dmarc.refirio.net. 300 IN TXT "v=DMARC1;p=quarantine;pct=25;rua=mailto:dmarcreports@refirio.net"
解説
・ドメイン名: _dmarc.refirio.net
これはDMARC(Domain-based Message Authentication, Reporting, and Conformance)ポリシーの設定を示す特別なサブドメインです。
・TTL (Time to Live): 300
この数字は、DNSレコードがDNSサーバーのキャッシュに保持される秒数を示します。
この場合は、300秒(5分)です。
・レコードタイプ: IN TXT
INはインターネットを意味し、TXTはテキストレコードを示します。
DMARCポリシーはTXTレコードとして設定されます。
・DMARCポリシー内容:
・v=DMARC1: バージョンを指定します。
DMARC1はDMARCの標準バージョンを示します。
・p=quarantine: DMARCポリシーの動作を指定します。
quarantineは、DMARCの検証に失敗したメールを隔離(例えばスパムフォルダに移動)することを示します。
・pct=25: DMARCポリシーが適用されるメールの割合を指定します。
この場合、全メールの25%にポリシーが適用されます。
・rua=mailto:dmarcreports@refirio.net: DMARC集計レポートを送信するアドレスを指定します。
ここでは、dmarcreports@refirio.netにレポートが送信されることを示しています。
結論
このDNSの登録内容は、refirio.netドメインのDMARCポリシーを設定しています。
このポリシーは、DMARC検証に失敗したメールを隔離し、その適用は全メールの25%に限定されています。
また、DMARCのレポートは特定のメールアドレスに送信されるように設定されています。
これにより、ドメイン所有者は、ドメイン名を使用して送信されるメールの認証状況を追跡し、改善することができます。
■専用IPアドレスの取得
※未検証
月額$25でSESに固定IPアドレスを割り当てることができる
共有IPアドレスの場合、他人が同じIPアドレスから大量にメールを送信することで、スパム報告に巻き込まれる可能性がある
また、同一IPアドレスからの受信を制限しているところもあるが、固定IPアドレスを複数取得することで対応できる
専用 IP アドレスのリクエストと解放 - Amazon Simple Email Service
https://docs.aws.amazon.com/ja_jp/ses/latest/dg/dedicated-ip-case.html
Amazon SESでSPFとDKIMを設定してみた|梨_茶|note
https://note.com/li_oche1021/n/ne0357eacbabf
メール送信で固定IPアドレスを利用すると何がうれしいのか - Qiita
https://qiita.com/nakansuke/items/e26f44103e9a1dda366f
[アップデート] Amazon SES の専用 IP を標準からマネージドへ移行できるようになったので、標準とマネージドの違いを整理してみた | DevelopersIO
https://dev.classmethod.jp/articles/dedicated-ips-managed-feature/
■メモ
キャリアメールに届かないという記事を見かけるが、問題無く送信できるみたい?
WordPresでSESを使う方法もあるみたいなので、WordPressで使えないことも無いみたい?
要調査
Amazon SES でメール送信するときのベストプラクティスまとめ(2020年10月) | Developers.IO
https://dev.classmethod.jp/articles/ses-send-mail-best-practices-summary/
Amazon SESによるメール送信環境の構築と実践 | DevelopersIO
https://dev.classmethod.jp/articles/amazon-ses-build-and-practice/
Amazon SES と SendGrid のバウンスの取り扱いについてまとめてみた | DevelopersIO
https://dev.classmethod.jp/articles/amazon-ses-sendgrid-bouce-reaction/
AWSのSESでバウンスメール(bouncemail)対策。3つの方法とメリット・デメリット | ブログ|ベトナムでのオフショア開発とスマートフォンアプリ開発のバイタリフィ
https://vitalify.jp/blog/2018/03/aws-ses-bouncemail.html
SESのバウンス率 - Amazon SES(AWS)のバウンスされたメールアドレス
https://www.usebouncer.com/ja/%E7%B0%A1%E5%8D%98%E3%81%8B%E3%81%A4%E5%8A%B9%E6%9E%9C%E7%9A%84%E3%81%...
[AWS]SESを利用したキャリアメール送信について考える | Developers.IO
https://dev.classmethod.jp/articles/20170824-ses-send-to-carrier/
【Amazon SES】SESでメール送信する時に知っておきたい事 - websandbag ブログ
https://blog.websandbag.com/entry/2019/07/31/160557
AmazonSESから携帯キャリアメールに届く確率を上げる - Qiita
https://qiita.com/shouta-dev/items/a33c55e0df154012c557
wordpress・SES経由でメールを送信できるようにする - Qiita
https://qiita.com/gozuqi/items/099d064e8657f51f2b3e
バウンスメールと AWS SES - コネヒト開発者ブログ
https://tech.connehito.com/entry/2020/09/17/152126
おさえておきたいメールの基礎用語 | SendGridブログ
https://sendgrid.kke.co.jp/blog/?p=658
SESが利用停止されたときの内容は以下が参考になる
バウンスしすぎて Amazon SES から追放された俺たちは Mailgun と SendGrid に国を作ることにした - ANDPAD Tech Blog
https://tech.andpad.co.jp/entry/2021/10/27/100000
以下は上記ページについての気になるはてブコメント
https://b.hatena.ne.jp/entry/s/tech.andpad.co.jp/entry/2021/10/27/100000
・SESはちょっと前にアカウントレベルのサプレッションリストが設定できるようになってて、ハードバウンスは自動で送信停止できるよ
警告来たのはバウンス率じゃなくて苦情率か。何やってるの?
・オプトアウト実装や宛先リストのクリーニング含めバウンス対応をちゃんとやらないと結局同じことになりそうな気はする(共有 IP アドレスみたいだし
・SendGrid は機械学習のスパム検知機能があり、それに引っかかると容赦なくアカウント単位で配信停止される。
問い合わせると誤検知で発動してしまったごめんね。というのが過去2回あって、メインで使うのはやめた。
・面倒くさいのは同意するけど、SESからSendgrid/Mailgunに逃げても本質的な対応はいずれしないといけないんじゃないのかなという気がする。
うちはSendGrid高くてSESに来たクチだけど何も困ってない。
・苦情レートが高いのをスルーしてるのはどうなんだろう。自分だったらスパマー扱いされてるのでは?と考えてレートを下げる施策を考えるかも
■昔のメモ
解除後も送信制限は、徐々に緩和されていくみたい
制限が解除されると任意の送信先を指定できるみたいだが、送信元は常にアドレスの認証が必要みたい
以下に同意する必要があるため、仮登録時のメール送信やフォームメールでの自動リプライなどに使うことはできないかもしれない
あくまでも、ニュースの一斉配信を用途としているかもしれない
(2021年5月追記:AWSのアーキテクチャレビューにて、「仮登録のためにドコモのアドレスにメールを送ったり、という使用例は実際にある」とのこと)
その場合でも、常にバウンスや苦情については気にかける必要がある
バウンスは5%以下に、苦情は0.1%以下に保ち、悪意あるコンテンツ(ウイルスなど)も送らないようにする
・私は AWS サービス利用規約と AUP に準拠してメールを送信します
・私は明確にリクエストされた受信者にのみメールを送信します
・バウンスや苦情を処理するプロセスがあります
仮登録時のメール送信やフォームメールでの自動リプライなどは、ごく普通にPHPから送信すれば良さそう
でもSPFなどを考えるなら、固定IPを持ったバッチサーバから送信する必要がありそう
そうなると、SESを使うか否かに関係なく、バッチサーバからのメール送信の仕組みは構築する必要がありそう
SESはキャリアメールへの送信問題もある
独自ドメインでのメール受信という用途としては使えそう
仮登録のためにメールを送信してもらって自動返信、バウンスメールの受信、など