見出し画像

mailgunの送信失敗をslackに通知する

今回はややシステム寄りの話です。現状のPASSKETのサービスでは下記のタイミングで自動送信で観客の方にメールを送信しています。
・予約完了時
・公演のキャンセル時
・リマインドメール(これは公演の主催者側が設定している場合のみ)

そうしたメール送信時に困るのがメールのバウンス(送信先にメールが届けられないこと)です。PASSKETでは下記のようなシステムの構造になっており、私が手動で行うメールと自動送信のメールのIPアドレスが異なるため、自動送信時にバウンスすることがあります。

バウンスが発生したうち、予約完了時のメールについては基本的には手動で転送をして再送するようにしています。「基本的に」と書いたのはたまに見落としをしてしまうためです。メール送信に利用しているサービスのログから毎日エラーがあったかを目検でチェックしていることが原因です。

作業としては、利用しているmailgunというサービスのログを見てエラーがあるものを見つけていく感じです。

最近とてもわかりやすくなったmailgunのダッシュボード画面。この中からエラーを探して送っています。


半年くらいこの運用を日次で行っていましたが、精神的に結構キツいものがあり、もう少し楽にこの作業が出来ないものかということで少しだけ仕組み化しました。

やりたかったことはmailgunでメール送信に失敗した場合にslackに通知することなのですが、mailgunでwebhookに渡す値とslackで利用するincoming-webhookで利用する値に差異があるため、間にgoogle cloud functionを挟んでいます。そのため、google cloud functionでは下記のような実装をすることでmailgunから受け取った値をslack側に投げるようにしています。
(slackのincoming-webhookについては説明を省略します)

結果としてmailgunのテストのjsonで実行した場合、下記のような形でslackに送られるようになります。

これでメール送信に失敗するのが確定した際には必ず通知が届くようになるため、この運用を初めて数日ではありますが精神的にはかなり楽になりました(見落とす不安がなくなったのと、目検でのチェック作業がなくなったため)。また半年くらいするとまた違う辛さが出てくる(おそらく転送作業そのものの作業の辛さ)と思うので、バウンスを減らすために自動送信に利用しているIPアドレスをホワイトリスト化することは並行して進める必要があるのですが…。

mailgunからの通知をslack転送する記事がほとんどなかったので記事化してみました。この実装に辺り、下記の記事を参考にさせていただきました。


この記事が気に入ったらサポートをしてみませんか?