Posted at

Sisimaiでバウンスメールを解析してみる

More than 3 years have passed since last update.


内容

バウンスメールの解析用ライブラリであるSisimaiを会社で使う機会があったのでメモ。

(Perl版とRuby版がありますが、今回はRuby版を使ってます)

機能的にはbounceHammerのパース部分を抜き出した感じ。

(残念ながらこちらは2016/2/29を以ってEOL。すでにダウンロードできなくなってます。。。)


入手元とかマニュアルとか

URL: http://libsisimai.org/

GitHub: https://github.com/sisimai

ライセンス: 2条項BSDライセンス


検証環境

Amazon Linux

ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-linux]


導入方法

# gem install sisimai

# gem list

...

sisimai (4.17.0)

oj (2.14.6)

...


使い方

Sisimai.make("filename")でバウンス理由などをパースした結果を返してくれる。

dumpでJSON形式で出力してくれるので、DBに突っ込むとかいろいろ加工するとか。

超適当なスクリプトで実験。


sisimai-parser.rb

require 'sisimai'

param=ARGV[0]
files = Dir.glob(param + "/*")
unless files == nil
files.each do |file|
data = Sisimai.make(file)
unless data == nil
data.each do |d|
mail = d.dump
print(mail)
end
end
end
end



sisimai-parser.sh

#!/bin/bash

if [ $# -ne 1 ]; then
echo "ディレクトリが指定されていません"
exit 1
else
ruby ./sisimai-parser.rb $1
exit 0
fi

GitHubのset-of-emailsレポジトリ下にテスト用のバウンスメールがあるので、適当に食わせてみる。(jqで見やすく表示してます)

# ./sismai-parser.sh set-of-emails | jq

...(略)...
{
"token": "d0ded153a6032bcf57faf0e0cf6a533ffdbe1f98",
"lhost": "mv-osn-hcb007.ocn.ad.jp",
"rhost": "mx01.example.co.jp",
"alias": "kijitora@example.co.jp",
"listid": "",
"reason": "userunknown",
"action": "failed",
"subject": "TEST",
"messageid": "A8F82EDD-E518-4F5C-8C70-BC4EFF24AB9F@example.ne.jp",
"replycode": "550",
"smtpagent": "Postfix",
"softbounce": 0,
"smtpcommand": "RCPT",
"destination": "example.co.jp",
"senderdomain": "example.ne.jp",
"feedbacktype": "",
"diagnosticcode": "550 5.1.1 Address rejected kijitora@example.co.jp",
"diagnostictype": "SMTP",
"deliverystatus": "5.1.1",
"timezoneoffset": "+0900",
"addresser": "shironeko@example.ne.jp",
"recipient": "kijitora@example.co.jp",
"timestamp": 1274695609
}

すごい便利です。