⼤量メール配信の実現
⽅法
2022.10.27
株式会社ジャスミンソフト
Wagby SPEC リード贄良則

⼤量メール配信 = 迷惑メール？
• 多くのメールサーバで、⼤量メール配信は⾏えないようになっている。
• 例 Gmail は500通/⽇を上限としている。(2022年3⽉時点)• メールサーバ側の設定も⾼度化している。
• SPF (Sender Policy Framework) レコード設定• DKIM (DomainKeys Identified Mail) 署名

Wagby の対応• 1通のメール送信は対応済み。
• 複数メールの⼀括送信は「待ち時間」と「最⼤送信回数」を指定するようにしている。
• 最⼤送信回数分だけ送信したあと、⼀定時間待ってから再送。
• メールサーバは別途必要。
• メールサーバ側の設定はそれぞれ⾏う必要がある。
• 各メールサーバは⼤量メール配信を避ける傾向がある。

メール配信サービスを利⽤する• 送信したいメールアドレスのリストと本⽂を送り、配信してもらう。
• APIを提供しているサービスもある。
• 多くのサービスは基本料⾦ + 従量課⾦制。

AWS SES (Simple Email Service)https://aws.amazon.com/jp/ses/• AWSアカウントを使って利⽤できる。
• ⾼速配信。
• 開封率やクリックスルー率の確認ができる。
• SPF/DKIM 対応。
• 受信者による購読停⽌ (Unsubscribe) に対応。
• コストパフォーマンスが⾼い。

Wagby + AWS SES• クラウド版Wagbyで対応済み。ローコード版(EE)は R9.2 で対応。
• ジョブによるメール配信設定。
• 送信時にSESのコンタクトリストをチェックし、購読停⽌者には送信しない。
• 送信失敗（バウンス、苦情）を把握。
• 開封率の集計。

準備 ‒ AWS アカウントが必要です

設定作業はコンソールで⾏う。
AWS CLI をインストールし、管理者権限で操作する。（後述）Wagby の設定 (1)Wagby の設定 (2)
設定欄説明コンフィグレーションセット名

コンフィグレーションセットは、検証済みの ID に適⽤できるルールのグループ。

コンタクトリスト名

送信先にてメールの購読停⽌を管理するために利⽤する。

コンタクトリストトピック名（同上）

IAMアクセスキー

メール送信を⾏えるRoleを持ったIAMアカウントのアクセスキーを指定する。

シークレットキー

メール送信を⾏えるRoleを持ったIAMアカウントのシークレットキーを指定する。

リージョン

リージョンを指定します。未指定の場合は東京リージョン(apnortheast-1)となる。

※ Wagbyの「メールテンプレート」では SES の設定は⾏えない。Designer で指定した設定を利⽤する。
※ IAMアクセスキー、シークレットキー、リージョンは将来「クロスアカウントロール」導⼊時に変更、廃⽌される可能性がある。

Wagbyのメールテンプレート作成
https://wagby.com/wdn/script-job-mail-aws_ses.html

Wagby のジョブ作成（クラウド版）
https://wagby.com/wdn/script-job-mail-aws_ses.html

HTMLメールに「購読停⽌リンク」を設定<p style="font-weight:bold;">メールの配信を停⽌したい</p><p style="font-size:80%;"><a href="{{amazonSESUnsubscribeUrl}}">こちら</a>から⾏えます。 リンク先の画⾯で「Unsubscribe from all」 にチェックを⼊れ、「Update」ボタンを押してください。
</p>

AWSの画⾯が開く

その他の特徴• メールの送受信に使⽤するドメインまたはメールアドレスは検証済みIDである必要がある。
• 「Wagbyアカウント」は AWS の Cognito というサービスを使って登録している。このサービスはメールアドレスの確認で2段階認証を経由しているため、「検証済み」となる。

• 届かない宛先にメールを送信(バウンス)した場合や、届いたメールが迷惑メールと判断されて苦情が送られた際に、AWSでカウントし、バウンス率、苦情率(complaint)として集計される。
• バウンス率は2%未満を維持する必要がある。10%を超えるとSESはメール配信を停⽌することがある。
• 苦情率は0.1%未満を維持する必要がある。0.5%を超えるとSESはメール配信を停⽌することがある。

AWSコンソールでバウンス率、苦情率を確認できる
AWSのConsoleにログオンする。Reputation
metricsおよびBounce Rateが⾼くなっていないことを確認する。
この画⾯キャプチャでは0.21%となっており、通常より⾼いが警告レベルの5%は超えていないことがわかる。
AWS側にバウンス発⽣時のイベントの通知を設定することで、バウンス・苦情のあったメールアドレスを把握できる。
送信先メールアドレスから削除して、次回以降のメール送信で送信しないようにするとよい。

AWSの設定⽅法

コンフィグレーションセットの作成
コンフィグレーションセット名をSesMailSendConfigurationSetで設定した例。
Ø aws sesv2 create-configuration-set--configuration-set-name SesMailSendConfigurationSetイベントのメール通知やメールのオープンやクリックの集計を⾏う際にはコンフィグレーションセットに設定を⾏う。

コンタクトリストの作成
コンタクトリスト名をWagbyContactList、コンタクトリストトピック名WagbyAnnounseで設定した例。

Ø aws sesv2 create-contact-list--cli-input-json fileb://contact-list.json{

contact-list.json"ContactListName": "WagbyContactList","Description": "Wagby関連のコンタクトリストです。","Topics": [{"TopicName": "WagbyAnnounse","DisplayName": "Wagbyアナウンス","Description": "Wagbyの最新情報をご連絡します。","DefaultSubscriptionStatus": "OPT_IN"}]}※ コンタクトリストはこの時点ではメールアドレスは登録されていない。DefaultSubscriptionStatusをOPT_INとしているため、メール送信を⾏うとコンタクトリストに⾃動的に登録される。
メールを受信した⽅が購読停⽌(Unsubscribe)すると、その⽅のコンタクトがOPT_OUTに変更され、次回以降送信されなくなる。

送信元メールアドレスの登録
送信元メールアドレスとして test@testdomain を SES Identity に設定する例。
Ø aws sesv2 create-email-identity--email-identity test@testdomain
コマンド実⾏後、上のメールアドレスに AWS からメールが届く。
本⽂中に confirm リンクが含まれているので、クリックして登録を完了する。

AWS IAM アカウントの作成と権限の設定
IAMユーザ名をtestTestdomainMail、ポリシー名をtestTestdomainMailPolicyとした場合の例。
作成するIAMユーザに許可する権限をpolicy-doc.jsonに記述する。[省略]Ø aws iam create-policy--policy-name testTestdomainMailPolicy--policy-document file://policy-doc.json
上記コマンド実⾏後、IAMユーザを作成する。

Ø aws iam create-user --user-name testTestdomainMailØ aws iam attach-user-policy --user-name testTestdomainMail--policy-arn (上で出⼒されたArnの値):policy/testTestdomainMailPolicyØ aws iam create-access-key --user-name testTestdomainMail
この結果、AccessKeyId と SecretAccessKey を⼊⼿できる。

開封率などの確認 (1)HTMLメールを使っている
場合、メール内に透明の画像を含めることでメールのオープンを検知することができる。

リンクをクリックした際に、カウント⽤のサイトを経由してアクセスすることで、メール内のリンクのクリックを検知することができる。

開封率などの確認 (2)コンフィグレーションセッ
トの設定で、メールのオープン(OPEN)や、メール内のリンクをクリック(CLICK)のイベントを、CloudWatch Metricsに送信する設定を⾏う。

開封率などの確認 - 注意点• 受信者（メーラー）でのリモートコンテンツ許可が必要• メーラーによっては、メール本⽂中に含まれる画像の表⽰は許可制になっている。受信者が不許可とした場合、メトリクスの収集はできない。
• 集計は累計のみ• 今回実施した CloudWatch Metrics での集計は、サイトへのアクセスでカウントしている。どのメールアドレスがオープンしたか、クリックしたかといった情報までは把握できない。
• Kinesis Data Firehouse / Amazon SNS といった別のサービスと組み合わせ、プログラムを追加することで可能になる（未検証）。

課題• お客様⾃⾝が AWS のアカウントを保有する必要がある。
• メール送信元はお客様になるため。
• メールテンプレートごとにAWSの設定が⽤意できない。
• 現時点では「アプリケーションで共通」。
• クロスアカウントロールに対応させる。
• 今回紹介した⽅法はIAMアクセスキーを使っているが、この⽅式はアクセスキーが漏れた場合、セキュリティの懸念がある。
• AWSの「クロスアカウントロール」を試してみる。

まとめ• Wagby クラウド版/EE R9.2 は AWS SES を利⽤したメール配信機能をサポートする。
• AWSの設定と運⽤はお客様⾃⾝で⾏う必要がある。
• Wagby販売代理店経由で設定のサポートを⾏うことができる。
• バウンス率や苦情率の改善もお客様が留意する必要がある。
• このような運⽤負荷はあるものの、コストと配信の信頼性は注⽬に値する。