内容
バウンスメールの解析用ライブラリである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に突っ込むとかいろいろ加工するとか。
超適当なスクリプトで実験。
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
#!/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
}
すごい便利です。