シシマイを使ってみる

動作環境


Sisimai(シシマイ)はPerlまたはRuby (JRubyも含む) が動くOS (ただしWindowsを除く) で動作します。

Read

インストール


SisimaiはCPAN (Perl版)とRubyGems.org (Ruby版)、 そしてGitHub (Perl版とRuby版) からダウンロードできます。

Read

基本的な使い方


バウンスメールの解析、構造化された解析済みデータの取得と JSON化など簡単な使い方を紹介します。

Read

シシマイでの解析方法


標準入力(STDIN)からの読み込み、配信成功も解析結果に含める方法、 コールバック機能で独自の処理を組み込む方法について。

Read

動作環境


Sisimai(シシマイ)は*BSDやMac OS XやLinuxのようなPerlまたは Ruby(JRubyを含む)が動作するOSで動きます。 しかしながら、現時点でWindowsでは動作しません。

Perl 5.10.1以上

CPANからダウンロード

Ruby 2.1.0以上

  • JRuby 9.0.4.0以上でも可
  • 依存ライブラリ(MRI)
  • 依存ライブラリ(JRuby)
RubyGemsからダウンロード

Sisimaiをインストールする

SisimaiはGitHub, CPAN, RubyGems.orgからそれぞれダウンロード・インストールが可能です。

GitHubから

開発版を含む最新バージョンと安定版のSisimaiGitHub のmasterブランチからダウンロード出来ます。Perl版・Ruby版ともに このリポジトリにあります。

Perl

Perl版Sisimai

Perl版Sisimaiのリポジトリ名は sisimai/p5-Sisimai です。

% git clone https://github.com/sisimai/p5-Sisimai.git
% cd ./p5-Sisimai
% sudo make install-from-local
--> Working on .
Configuring Sisimai-4.20.0 ... OK
1 distribution installed
                
Ruby

Ruby版Sisimai

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.20.0.gem.
sisimai (4.20.0) installed.
                
Perl

CPANから

Perl版Sisimaiの安定版のみ CPAN からダウンロードが可能です。cpanコマンドでもインストール出来ますが、 cpanm コマンドを使うとPerlモジュールのインストールが非常に楽です。

% sudo cpanm Sisimai
--> Working on Sisimai
Fetching http://www.cpan.org/authors/id/A/AK/AKXLIX/Sisimai-4.20.0.tar.gz ... OK
...
1 distribution installed
% perldoc -l Sisimai
/usr/local/lib/perl5/site_perl/5.20.0/Sisimai.pm
                
Ruby

RubyGems.orgから

Ruby版Sisimaiの安定版のみ RubyGems.org からダウンロードが可能で、gemコマンドでインストールが出来ます。
JRubyを使用する場合はjgemでのインストールも可能です。

% sudo gem install sisimai
Fetching: sisimai-4.20.0.gem (100%)
Successfully installed sisimai-4.20.0
Parsing documentation for sisimai-4.20.0
Installing ri documentation for sisimai-4.20.0
Done installing documentation for sisimai after 6 seconds
1 gem installed
                

基本的な使い方

make()

Sisimaiのmake()メソッド

下記のコードはSisimaimake() メソッドを使ってバウンスメールを解析し解析結果のデータを得る例です。 make()メソッドに指定できる他の引数については シシマイでの解析方法をご覧ください。

Perl

Perl版Sisimai

#! /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
}
                
Ruby

Ruby版Sisimai

#! /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
                
dump()

Sisimaiのdump()メソッド

Perl版Sisimai v4.1.27から登場したdump()メソッドは解析結果を JSONで得るのに便利です。下記のように解析したいメールのPATHを渡すだけの 簡単なコードで済みます。

Perl

Perl版Sisimai

#! /usr/bin/env perl
use Sisimai;
print Sisimai->dump('~/Maildir/cur');
                
Ruby

Ruby版Sisimai

#! /usr/bin/env ruby
require 'sisimai'
puts Sisimai.dump('~/Maildir/cur')
                
Demo

dumpメソッドの使用例

jq

"jq"コマンドと組み合わせる

解析結果のJSONデータを目で確認したい場合は jqコマンドが便利です。 下記のようにdump()メソッドの出力が読みやすく表示されます。

Perl

Perl版Sisimai

% perl -MSisimai -lE 'print Sisimai->dump(shift)' path/to/mbox | jq .
                
Ruby

Ruby版Sisimai

% ruby -rsisimai -e 'puts Sisimai.dump($*.shift)' path/to/mbox | jq .
                
Demo

dumpメソッドとjqの使用例

JSON

jqでJSONを見やすくした例

[
  {
    "smtpcommand": "DATA",
    "timestamp": 1397054085,
    "action": "failed",
    "listid": "",
    "reason": "hasmoved",
    "deliverystatus": "5.1.6",
    "smtpagent": "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
  }
]