SendGridのBounce Purgeとバウンスメール

Bounce Purgeとは？
---------------------

これは、Sendgridで管理しているバウンスリストの内容が日数経過で削除する機能です。
詳しくは[ドキュメントをお読みください](https://sendgrid.kke.co.jp/docs/User_Manual_JP/Settings/mail.html#-Bounce-Purge)。用法容量を守って正しくお使いください。

以上です。

以下は「メール届かないっていわれて辛い、バウンスってなんだよ」って時に気分が暗くなりながら調べてた時のメモです。

メモ
-------

このメモは1年ぐらい前の内容なので悪しからず。ずっと塩漬けになってた。

### バウンスとは

メール配信において「バウンス」という存在をご存知でしょうか。「なぜかメールが届かない」の原因の一つがこのバウンスにあります。
普段からメールの運用をされている方なら辛いほどご存知かもしれませんが、趣味でメール送信をするかもという人も是非お持ち帰りください。

バウンスメールについては、SendGridさんの「[バウンスメールとその対策](https://sendgrid.kke.co.jp/blog/?p=1338)」と「[バウンス（メールの不達）を管理する](https://sendgrid.kke.co.jp/docs/Tutorials/A_Transaction_Mail/manage_bounces.html)」が良いのでお読みください。

バウンスは2通りあるそうです。

- 容量いっぱい、相手の都合で受け取れない（ソフトバウンス）
- 存在しない宛先に送った、無効なメールアドレスを使った（ハードバウンス）

ちなみにこれらとは別に、相手が拒否する場合もあり、それはブロックと呼ばれます。難しいですね。

### バウンスリストとは

SendGridではハードバウンスに該当したメールのあて先を、SendGridが管理するリスト（バウンスリスト）に入れることで、以降の同宛先への送信をSendGridが止めます。

止めておかないと宛先が存在しないメールがメールサーバに流れ、経路上のメールサーバ間で（こいつ無差別で送ってるんじゃ・・・？）等と疑われ（レピュテーション低下）、送信元ドメインやIPをブラックリスト入り（スパム認定）されてしまいます。
それをSendGridが予防してくれるわけです。ありがたや。

### バウンスリスト良いじゃん。何が問題なの？

**存在するのに存在しないと応答する**所があるんです。

なので、前日のレポートを取ってきて、バウンス数をチェックして、バウンス数が1以上だったらバウンスリストを見に行って、某ドメインかつアドレスが妥当そうだったらバウンスリストから除去する、という運用をしてました。（ほら、AI案件だぞ）


### だからといって、Bounce Purgeを適当な気持ちで有効にしてはいけない（はず）

**「日々の運用が減ってええやん！これ、やっておけばいいんでしょ？」という設定ではない**です。

本当に大規模なところはちゃんと数えて管理しないと、レピュテーションが下がるはずです。

なら、どういうときに使うのかというと、~~めんどくさい時、レピュテーション下がってもいいから運用を減らしたい時、~~メールの送り方などを鑑みて、頻度が少ないようなら使ってみるといった程度のモノだと思ってます。
うちは必ず信頼できる筋の人が登録する運用になっており「不特定」な宛先に送る事はまずないため、使っても良いでしょう、と判断してます。これも本当は良くないのだけど、ここに理解と時間を割ける説明が私には出来なかった・・・


### では、ちゃんと管理するには？

まぁ良くないと分かりつつ使うのはアレなので、少し調べました。

SendGridの事例では、一休さんの「[メール配信基盤のモニタリングと障害リカバリーについて](https://user-first.ikyu.co.jp/entry/2017/12/05/000000)」を参考にするとよいと思います。私の観測範囲の中だと最も適切に扱っている(と思う)貴重な知見だと思います。スライドも必見。
こういった**辛いけど技術でちゃんと解決していく**事例はもっともっと共有されていってほしい。なんだかんだで根強いインフラなはずなのに、その割には知見少ないんですよね・・・みんなどうしてるんだろう。

あとは国内なら構造計画研究所(KKE)さんのサポートを受けるのがよさそうです。一休さんもちゃんと受けていたようなので。
KKEさんは何度かメール対応していただきましたが丁寧に対応してもらってます。具体的には、40分経ってもメールが届いてないと先方に騒がれて「メールが全然届いてないらしいんですけど何でですかね？」みたいな雑な問い合わせたら「ブロックが何件か起きたから恐らくそれが原因でSendGridがちょっと止めてるかもしれない。今はおとなしく待て。**あと大量送信やめろ、ちゃんと流量制限しろ**」と優しく対応していただきました。（その後、間もなく送られました。）


設定
-------

もっと上に持って来いよ、という感じですが、上記の通り後ろめたさがあるのでこの位置です。

### 画面から設定

SengGridの管理画面→Mail Settingsからポチポチできます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52527/ceecdea9-cffb-7eed-f8b2-5597bfa35cb2.png)


OFF/ONのボタンをいじると入力できるようになるので、日数を入力する。日数はいい感じにしてください。
入力が終わったら**忘れずに右側の「✔」を押して保存**。（忘れがち）

![image.png](https://qiita-image-store.s3.amazonaws.com/0/52527/b4000117-d7ed-5440-5235-825051d1c90c.png)

InActiveからActiveになったらOK




### APIから設定も可能

Mail Settings APIがあるので、こちらからもできます。一定期間だけONとかもできそうですね。

https://sendgrid.kke.co.jp/docs/API_Reference/Web_API_v3/Settings/mail.html#Bounce-Purge-GET


終わり
------------

SendGridのBounce Purgeですが、ドキュメントにはひっそりとあるぐらいで、あまり使ってほしい機能ではないように思えます。

メール配信は知れば知るほど辛さを感じます。「届いてないみたいなんだけど」といわれると辛い。宛先ドメイン制御しなきゃ、遅延辛い、いい感じの基盤が欲しい、という思いでいっぱいでした。いい感じの基盤欲しい。何かまとまった知見があればお教えください。

SPFもDKIMもやってダメなら相手がダメでしょ！とか思いつつも、~~主に某キャリアのせいで~~バウンスメールは起きるし、メールの向こうにはお客様がいるのでちゃんとバウンスメールとお付き合いしないといけない。

私はしばらくはSendGridさんにすり寄っていきたいと思います。SendGridさん長生きしてね。
でもDeffered判定になったメールはもう少し早く送っていただきたい…