Sisimai(シシマイ)は*BSDやMac OS XやLinuxのようなPerlまたは Ruby(JRubyを含む)が動作するOSで動きます。また、Sisimai 4.22.5からは、 Windows上のActivePerlで動作するかもしれません。
SisimaiはGitHub, CPAN, RubyGems.orgからそれぞれダウンロード・インストールが可能です。 また、Perl版SisimaiはFreeBSDのportsコレクションからでもインストールすることができます。
開発版を含む最新バージョンと安定版のSisimaiは
GitHub
のmasterブランチからダウンロード出来ます。Perl版・Ruby版ともに
このリポジトリにあります。
Perl版Sisimaiのリポジトリ名は sisimai/p5-sisimai です。
% git clone https://github.com/sisimai/p5-sisimai.git % cd ./p5-sisimai % make install-from-local --> Working on . Configuring Sisimai-4.25.0 ... OK 1 distribution installed
Ruby版Sisimaiのリポジトリ名は sisimai/rb-sisimai です。
% git clone https://github.com/sisimai/rb-sisimai.git % cd ./rb-sisimai % sudo make depend install-from-local gem install bundle rake rspec coveralls ... sisimai 4.20.0 built to pkg/sisimai-4.25.0.gem. sisimai (4.20.0) installed.
% cpanm --sudo Sisimai --> Working on Sisimai Fetching http://www.cpan.org/authors/id/A/AK/AKXLIX/Sisimai-4.25.0.tar.gz ... OK ... 1 distribution installed % perldoc -l Sisimai /usr/local/lib/perl5/site_perl/5.20.0/Sisimai.pm
Ruby版Sisimaiの安定版のみ
RubyGems.org
からダウンロードが可能で、gemコマンドでインストールが出来ます。
JRubyを使用する場合はjgemでのインストールも可能です。
% sudo gem install sisimai Fetching: sisimai-4.25.0.gem (100%) Successfully installed sisimai-4.25.0 Parsing documentation for sisimai-4.25.0 Installing ri documentation for sisimai-4.25.0 Done installing documentation for sisimai after 6 seconds 1 gem installed
Perl版SisimaiはFreeBSD
のPortsコレクション
(mail/p5-sisimai)
インストールができます。makeコマンド一発でインストールが可能ですが、
Perl版SisimaiがPortsコレクションに取り込まれるタイミングによっては、
最新版ではないSisimaiがインストールされる点に注意してください。
# cd /usr/ports/mail/p5-sisimai # make install ===> License BSD2CLAUSE accepted by the user ===> p5-sisimai-4.22.6 depends on file: /usr/local/sbin/pkg - found => Sisimai-v4.22.6.tar.gz doesn't seem to exist in /usr/ports/distfiles/. ...
下記のコードはSisimaiのmake()
メソッドを使ってバウンスメールを解析し解析結果のデータを得る例です。
make()メソッドに指定できる他の引数については
シシマイでの解析方法をご覧ください。
#! /usr/bin/env perl
use Sisimai;
my $v = Sisimai->make('/path/to/mbox'); # or Path to Maildir
if( defined $v ) {
for my $e ( @$v ) {
print $e->addresser->address; # shironeko@example.org # From
print $e->recipient->address; # kijitora@example.jp # To
print $e->recipient->host; # example.jp
print $e->deliverystatus; # 5.1.1
print $e->replycode; # 550
print $e->reason; # userunknown
}
} else {
# There is no bounce message in the mailbox
# or Sisimai could not parse
}
#! /usr/bin/env ruby
require 'sisimai'
v = Sisimai.make('/path/to/mbox') # or Path to Maildir
if v.is_a? Array
v.each do |e|
puts e.addresser.address # shironeko@example.org # From
puts e.recipient.address # kijitora@example.jp # To
puts e.recipient.host # example.jp
puts e.deliverystatus # 5.1.1
puts e.replycode # 550
puts e.reason # userunknown
end
else
# There is no bounce message in the mailbox
# or Sisimai could not parse
end
Perl版Sisimai v4.1.27から登場したdump()メソッドは解析結果を
JSONで得るのに便利です。下記のように解析したいメールのPATHを渡すだけの
簡単なコードで済みます。
#! /usr/bin/env perl
use Sisimai;
print Sisimai->dump('~/Maildir/cur');
#! /usr/bin/env ruby
require 'sisimai'
puts Sisimai.dump('~/Maildir/cur')
解析結果のJSONデータを目で確認したい場合は
jqコマンドが便利です。
下記のようにdump()メソッドの出力が読みやすく表示されます。
% perl -MSisimai -lE 'print Sisimai->dump(shift)' path/to/mbox | jq .
% ruby -rsisimai -e 'puts Sisimai.dump($*.shift)' path/to/mbox | jq .
[ { "smtpcommand": "DATA", "timestamp": 1397054085, "action": "failed", "listid": "", "reason": "hasmoved", "deliverystatus": "5.1.6", "smtpagent": "Email::Sendmail", "destination": "example.net", "timezoneoffset": "+0900", "feedbacktype": "", "diagnostictype": "SMTP", "senderdomain": "example.co.jp", "rhost": "mx-s.neko.example.jp", "lhost": "localhost", "catch": "", "addresser": "shironeko@example.co.jp", "replycode": "551", "messageid": "0000000011111.fff0000000003@mx.example.co.jp", "token": "cf17945938502bd876603a375f0e9517c921bbab", "recipient": "kijitora@example.net", "alias": "", "diagnosticcode": "551 not our customer", "subject": "Nyaaaan", "softbounce": 0 } ]