メールが届かない?IPアドレスにもレピュテーションリスクがあるってご存じでしたか?
初めまして。クロス・マーケティンググループのKKです。
2019年に新卒でクロス・マーケティンググループに入社し、2年間アンケート運用チームにて業務を行い、2021年4月からエンジニア未経験でシステム開発部に異動しました。
現在は主に社内システムの保守・運用から開発まで幅広く業務を行いながら、日々勉強しております。
はじめに
さて、今回の記事では先日社内で発生した事例とその対応についてをご紹介させていただきます。
弊社では社内システムでのメール送信にmailgunを使用しています。
mailgunとはメール配信を行うクラウドサービスです。
無料で毎月10,000通まで利用できます。
英語にはなりますが、メールでサポートへの問い合わせも行えます。 (英語に自信のない自分でも、Google翻訳を用いれば十分にコミュニケーション取れました。)
概要
先日、一部ユーザにmailgunを使用している社内システムからのメールが届かないと問い合わせがありました。
直近でリリースやメンテナンスなどは行っていないシステムかつ、アプリケーションのログからはメール送信は成功していたので、mailgunで何か仕様変更などがあったのか?とmailgunにあたりを付けて調査しました。
原因
mailgunでは、メール送信後に送信先のメールサーバーからバウンスを検知した場合に、自動でバウンスリストに追加されるようになっています。
バウンスリスト追加後はmailgunからは送信されないようになります。
こちらの仕様で一部ユーザのメールアドレスがバウンスリストに自動追加されたことで、メールが届かなくなっていました。
実際にmailgunの送信ログから該当のメールのイベントを確認すると「Failed」となっていて、理由は「Not delivering to previously bounced address」でバウンスリストに存在しているためmailgunから送信されないようになっていました。
(そもそもなぜバウンスリストに追加されたのか?についてですが、弊社では休職した際に一時的にメールアドレスを無効にしており、その際にメール送信されたことでバウンスリストに追加されたなどの例が考えられます。)
バウンスリストから該当のメールアドレスを削除したところ、以降はユーザもメールを受信できるようになりました。(画像のごみ箱ボタンから)
IPレピュテーションとは
今回はバウンスリストに含まれていたことが原因でしたが、バウンスリストがあることでどんなメリットがあるか理解できていなかったので調べてみました。(恥ずかしながら当初の自分は受信拒否される送信先にメール送信しても無駄な送信数増えてしまいますが大した問題はないと思っていました...)
するとバウンスリストは「IPレピュテーション」のスコアを維持するために必要なものであることがわかりました。
IPレピュテーションとは、「メールを受け取る側」の「メールを送ってきたIPアドレス(メールサーバ)についての」評価になります。
これはスパムメールから「メールを受け取る側」を保護するために発達した仕組みです。
IPレピュテーションのスコアが低いと、送信したIPアドレス(メールサーバ)からのメールをスパムメール扱いされメールを受信してもらえなくなったり、短時間に大量のメールを送信しても一時的にメールを受信されなくなったりしてしまいます。
具体的には下記の4点でIPレピュテーションは評価されています。
-
ドメインの設定
送信されたメールに、送信ドメイン認証がきちんと設定されているか?
-
迷惑メール報告数
この送信者のメールは、受信者からどれぐらい迷惑メール報告を受けているか?
-
バウンス数
この送信者のメールは、正当な宛先に対して送信されているか?(長く使われていない宛先や存在しない宛先に送信していると、スパム送信とみなされる)
-
受信者のポジティブな反応
この送信者のメールは、受信者に開封されたりリンクがクリックされたりしているか?
この中のバウンス数を削減するための機能がmailgunのバウンスリストになります。
mailgunからメール送信し、受信側のメールサーバに拒否された場合(メールアドレスのスペルミスや存在しないメールアドレスなど)に、バウンスリストに追加されます。
バウンスリストに追加されたメールアドレスにmailgunから送信する時には、「バウンスリストに含まれるメールアドレス(すなわち過去に受信メールサーバに拒否された)」のため、バウンスされる可能性が高いので送信自体を行わないことでバウンス数の削減につながります。
IPレピュテーションを高めるためにバウンスリストは便利な機能ですが、今回のケースではバウンスリストに追加したくないものが自動追加されることでメールが届かなくなってしまいました。
取り急ぎはメールが届くこと確認できたので一段落。。。といったところですが、このままではシステム側でバウンスリストに追加されたこと検知できず、ユーザから問い合わせがない限り気づけなくなってしまいます。(場合によってはユーザもメールが届いていないことに気づけない)
なので、なんらかの検知する方法を考える必要がありました。
バウンスリストの取得
とりあえずはmailgunのバウンスリストを取得する方法がないとどうしようもないので、mailgunのAPIを調べてみました。
調べたところバウンスリストを取得するAPIがあったので、まずはこちらで全件を取得してみました。
しかし一度のAPIでは1,000件までしかリスト取得できず、すでにバウンスリストに1,000件以上存在しているため、全件を取得するためにはリクエストに含まれる"paging"の"next"のURLを用いて複数回APIを叩く必要があります。
バウンスリストの最終ページ取得時のレスポンスは初回リクエスト時のURLと一致するので、それまで繰り返しリクエストを行うことでバウンスリスト全件を取得することができました。
初回APIリクエスト例
curl -s --user 'api:key-hogehogehoge' -G 'https://api.mailgun.net/v3/YOUR_DOMAIN_NAME/bounces?limit=1000'
初回APIレスポンス例
200
{
"items":
[
{
"address": "hogehoge1@example.com",
"code": "550",
"error": "No such mailbox",
"created_at": "Tue, 21 June 2021 11:02:55 GMT"
},
...
],
"paging":
{
"first": <first page URL>,
"next": <next page URL>,
"previous": <previous page URL>,
"last": <last page URL>
}
}
2回目以降のAPIリクエスト例
curl -s --user 'api:key-hogehogehoge' -G '<next page URL>?limit=1000'
2回目以降のAPIレスポンス例(初回のレスポンスと同じ形式)
200
{
"items":
[
{
"address": "hogehoge2@example.com",
"code": "550",
"error": "No such mailbox",
"created_at": "Tue, 11 Oct 2021 11:05:55 GMT"
},
...
],
"paging":
{
"first": <first page URL>,
"next": <next page URL>,
"previous": <previous page URL>,
"last": <last page URL>
}
}
これでバウンスリスト全件の取得を行うことができました。
毎日定期バッチでバウンスリスト全件の取得、前日分との差分比較を行い、弊社で使用しているドメインのメールアドレスが新しく含まれていたらチャットに通知を飛ばすように実装しました。
これで社内ユーザのバウンスリストの追加を検知することができるようになりました。
まとめ
今回の対応ではバウンスリストに追加される頻度も多くないので検知までを行うことにしました。
mailgunのAPIにてバウンスリストの特定のメールアドレスを削除することもできるのでゆくゆくはバウンスの削除まで自動化を行いたいと思っています。
他のメール配信サービスでも調べたところ、同じようにAPIにてバウンスリストの取得を行うことができるようだったので、参考程度に記載しておきます。
IPレピュテーションのスコア確認
また今回調べてみてIPレピュテーションのスコアが下がることで、最悪の場合mailgunからのメールがすべてスパムメール扱いされてしまう可能性があることが分かりました。
残念ながらIPレピュテーションの算出についてはブラックボックスでありますが、すべてのメールボックスプロバイダで統一された基準やスコアは存在しません。
それでも下記ツールを併用することで大手プロバイダーのIPレピュテーションをある程度把握することができます。
これらのツールで問題が見つかった場合、他のプロバイダーでもIPアドレスに何らかの問題が起こっている可能性が高いと考えられます。
-
GoogleのPostmaster Toolsは、Gmailへの配信に関するデータを確認できます。提供データには、IPレピュテーション、ドメインレピュテーション、Gmailの配信エラーなどが含まれています。 評価は4種類に分かれており、「安全→高→中→低」の順に評価が下がります。
-
Microsoft社が提供しているSNDS(Smart Network Data Services)では、IPレピュテーションのほかに迷惑メールとして報告された割合やスパムトラップの配信数などを確認できます。
ブラックリスト登録の確認
また、定期的にIPアドレスがブラックリストに登録されていると、受信サーバにメールの受信を拒否される可能性があります。 ブラックリストは多数あり、受信サーバによって参照しているブラックリストは異なります。 MXToolBoxを使用することで一般的なブラックリストにIPが登録されていないかを確認することができます。
これらのツールをしてIPレピュテーション、ブラックリストのチェックを行いながら、今後はIPレピュテーションのスコアが下がらないように取り組んでいこうと思います。
今回の記事が何か参考になれば幸いです。