仕事でSendGridの安いEssentialsプランを使うのは辞めよう

ある日突然メールが送れなくなることがあります。


# Microsoft Azureからメール送りたい

Microsoft Azureには、何故かメール関連のリソースが全く存在しません。

メールサーバみたいな[サービスはありません](https://azure.microsoft.com/ja-jp/services/)し、[自力でのSMTP設置も非推奨](https://docs.microsoft.com/ja-jp/archive/blogs/jpaztech/smtp-on-azurevm)です。
公式にも[SendGridを使え](https://docs.microsoft.com/ja-jp/azure/azure-functions/functions-bindings-sendgrid?tabs=csharp)という立場みたいです。


# SendGridとは

[SendGrid](https://sendgrid.kke.co.jp/)はメール送信サービスです。
[適当にPOSTする](https://sendgrid.kke.co.jp/about/email-api/)だけで、それをメールにして送ってくれるというナイスなサービスです。

```bash
curl --request POST \
  --url https://api.sendgrid.com/v3/mail/send \
  --header "Authorization: Bearer $SENDGRID_API_KEY" \
  --header 'Content-Type: application/json' \
  --data '{"personalizations": [{"to": [{"email": "test2@example.com"}]}],"from": {"email": "test1@example.com"},"subject": "件名","content": [{"type": "text/plain", "value": "本文"}]}'
```

こんなかんじでPOSTすればメールが送信されます。
簡単ですね。

[価格も安価](https://sendgrid.kke.co.jp/plan/)で使いやすいです。

![01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26088/71141260-e927-c56c-8f48-4b9024f7b378.png)

無料プランですら一日400通まで送れるので、個人開発レベルであればこれで十分です。
安価なEssentialsプランでも一日1000通/3000通は送れるので、大規模なサービスでもなければ使い切れないでしょう。

こういったメール送信サービスの登場により、もはや自前でSMTPサーバ構築してIPレピュテーションを気にしてなんて無駄な労力は全く不要になりました。


# SendGridを使っていた

定期的なメール送信が必須要件であるプロジェクトを構築しました。
送信数は一日100件程度だったので、余裕を見てもEssentials 40kで十分ということで、このプランを選択しました。

開設から数年、メールに関する問題はほぼ全く起こらず、無事に運用できていました。


# 事故がおこった

ある日突然、あらゆるメールが何処にも届かなくなりました。

SendGridのメール送信APIは正常なステータスを返してくるのに、その後送信先のメールアドレスにはメールが届かず消滅してしまうのです。

SendGrid管理画面を見たところ、全てのメールのステータスが`Client host [xxx.xxx.xxx.xxx] blocked`となっていました。
このIPアドレス`xxx.xxx.xxx.xxx`はプロジェクトの置いてあるサーバではなく、SendGridのサーバです。

[Spamhaus](https://check.spamhaus.org/)で調べてみたところ、みごとにブラックリストに登録されていました。

```text
xxx.xxx.xxx.xxx/32 is listed on the Spamhaus Block List - SBL

The following IP addresses have been used to send Nigerian 999 Advance Fee raud spam in the past 24 hours.
```

なんでだよSPAMなんて送ってねえよ[ナイジェリア](https://ja.wikipedia.org/wiki/%E3%83%8A%E3%82%A4%E3%82%B8%E3%82%A7%E3%83%AA%E3%82%A2%E3%81%AE%E6%89%8B%E7%B4%99)なんて知らねえよ日本のサービスだよ。

ということでSendGridを詳しく調べたところ、[サービス概要](https://sendgrid.kke.co.jp/plan/)に`固定IPアドレス`という項目がありました。

![02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26088/33d226fc-d5d1-0c46-f9f4-b0a8910909eb.png)

Proはチェックがあって、Essentialsにはありませんね。

これが何かと調べてみると、思いっきり[サポートページ](https://support.sendgrid.kke.co.jp/hc/ja/articles/202688589)で解説されていました。

```text
メールの送信元IPアドレスを固定にすることで次のようなメリットがあります。

・他者の行為により信頼度が影響を受けずにすむ
```

どういうことかというと、Pro以上のプランであればIPアドレスを自分だけで独占することができるが、Essentialsは他者と共有する、ということです。

そして、たまたま同じIPアドレスになった誰かがSPAMを大量送信したため、巻き添えで規制を食らってしまった、ということでした。

／(^o^)＼


# 対処

[ブラックリストからの解除](https://support.sendgrid.kke.co.jp/hc/ja/articles/900004787463)はあまり現実的ではありません。

```text
一般的には、そのIPアドレスからスパムトラップへの送信や、悪意のあるメール送信をしたことが原因になることが多く、掲載解除のためには原因を排除した上で、Deny List運営事業者に解除要請をする必要があります。

共有IPアドレスを利用する場合、他のお客様による送信の影響を排除することはできないためDeny Listへの掲載リスクは常に存在します。

掲載された場合、SendGrid社では解除に向けた原因究明、対処を速やかに実施いたしますが、解除するかどうかはDeny List側の判断になるため早期解決は保証できません。また、掲載原因に対する対処が完了するまでは、再発の恐れがあるため別のIPアドレスへも変更されません。

根本的な解決策として、お客様専用のIPアドレスを占有できるProプランのご利用をお勧めしております。
```

ということでSendGridのマイページから、プランをPro 100kに変更したところ、即座にメールが到達するようになりました。
めでたしめでたし。

その後、影響を受けた顧客に謝罪して回ったりといったことがあったりなかったり。

プランを上げたことで今後の運用費が月1300円から10000円まで上がってしまいましたが、メールが届かなかった間の補完とか補償とかそういうのに比べれば安いものです。


# その他

今回は一日100通程度だったので即座に移行で問題ありませんでしたが、一日1000通とか大量のメールを送る場合は[IPウォームアップ](https://support.sendgrid.kke.co.jp/hc/ja/articles/207602316)という作業が必要らしいです。
面倒ですね。


# まとめ

仕事でSendGridを使うときは、必ず最初からPro以上のプランにしよう。

個人開発であれば多少メールが届かなかったところでどうということもないので無料プランでも別にかまいませんが、仕事だと信用問題になりますからね。