POPメールを便利にするpopperというデーモンプログラムを開発した

POPメールとSlack,GitHubをつなげるツールを書いて運用してました。

困りごと

僕が開発・運用を行っているムームードメインは長らく運用をしてくる中で、プログラムエラーが発生した時や特定の申し込みが行われた場合にいわゆるデバッグメールで通知するという運用になっていて、お問い合わせや、不具合があった場合に、◯十万件のメールの中を本文検索をして、そのメールに含まれる情報を元に対応を行うという状況でした。

加えて、取引先システムの障害通知や、取引先からの業務問い合わせ(クレカ引き落とし調査など)もメールで通知が行われるため、それが埋もれてしまうという問題もありました。

そして、ペパボでは社内のコミュニケーションの殆どがSlackで行われていることから上記のようなメールでのインターフェースをSlackにまとめたいという欲求から開発しました。
SlackのEmail Integrationを採用しなかった理由としてはお客様の個人情報などを含む可能性があったため、外部流出を防ぐ必要があり、すべてをペパボ内で完結させています。(GHEにも対応)

popperで出来ること

設定されたメールアカウントをPOP受信し、件名や本文(任意のメールヘッダ)を正規表現でマッチングさせ、Slack通知、GitHubのIssueを作成することができます。
例えば
– 件名に[問い合わせ]を含む
– 返信メールではない
– 上記に該当した場合、Slackに通知し、Issue作成する
こういったルールをToml形式でコンフィグに記述し、デーモンを起動すると指定した間隔で処理を行ってくれます。

解決できたこと

メールがみんなごとになってどんどん改善が進む

メールって基本的には個人で受信するものなので、小さいエラーとかのメールが来てもなかなか自分事として考えるのって難しいと思うんですね。その点、popperでSlack通知してIssue立てまでやっちゃうと、Slackで全員が同じ情報を共有できるし、そのIssueで解決まで管理することが出来るようになりました。
結果的に小さいエラーの撲滅をガンガン行うことによってムームードメインのユーザービリティを向上させることができています。

周知ワークフローを撲滅できる

例えば決済系の取引先システムの障害がムームードメインの開発メーリングリストに届いたら、それを関連する部署に通知し、調整するような業務とかがあったのですが、そういった業務もpopperが関連部署のSlackチャンネルにメンションと心あたたまるメッセージを添えて通知してくれるので、間に人が入ることなく周知できるようになりました。

使い方

まずはコンフィグを作成します

$ cat /etc/popper.conf  
#----------------------------------
#
# グローバルデフォルト値
#
#----------------------------------

# 返信メールは対象にしない
[default.condition]
subject = ["^(?!.*Re:).+$"]

[default.action.ghe]
token = "************************************"
url   = "http://git.ghe.com"

[default.action.slack]
webhook_url = "https://hooks.slack.com/services/********/***********/**************************"
user = "popper"
channel = "#pyama_botest"
mentions = ["@pyama"]
#----------------------------------
#
# pyama
#
#----------------------------------
[pyama.login]
server = "mail-server.jp"
user = "pyama"
password = "**********"

[pyama.rules.test.condition]
subject = [".*popper テストだぜ.*"]

[pyama.rules.test.action.slack]
message = "popperからテスト通知です"
channel = "#pyama_botest"

[pyama.rules.test.action.ghe]
repo = "pyama/popper_test"

popperをデーモン起動します

$ popper -d 

基本的にはこれだけでokで、/var/log/popper.logにログの出力が行われるので何かあればそちらを確認してもよいですし-dオプションを使わなければカレントターミナルで起動するので、そちらでデバッグしても良さそうです。
また設定されている内容はいつでもpopper printコマンドで確認することが出来ます。

スクリーンショット 2015-11-04 12.05.57スクリーンショット 2015-11-04 12.05.25スクリーンショット 2015-11-04 12.05.36

自分で運用してみて本当に便利だったので、レガシーで似たようなデバッグメールに悩んでいる方、監視システムからのメール通知をより便利にしたい方、利用してみてはいかがでしょうか。