- README(English)
- シシマイ? | What is Sisimai
- シシマイを使う準備 | Setting Up Sisimai
- 使い方 | Usage
- シシマイの仕様 | Sisimai Specification
- Contributing
- その他の情報 | Other Information
- 作者 | Author
- 著作権 | Copyright
- ライセンス | License
Sisimai(シシマイ)はRFC5322準拠のエラーメールを解析し、解析結果をデータ構造に 変換するインターフェイスを提供するRubyライブラリです。 github.com/sisimai/p5-sisimai で公開しているPerl版シシマイから移植しました。
- エラーメールをデータ構造に変換
- Rubyのデータ形式(HashとArray)とJSON(String)に対応
- インストールも使用も簡単
- gem install
- git clone & make
- 高い解析精度
- 解析精度はbounceHammerの2倍
- 68種類のMTA/MDA/ESPに対応
- Feedback Loopにも対応
- 29種類のエラー理由を検出
Sisimaiの動作環境についての詳細は Sisimai | シシマイを使ってみるをご覧ください。
- Ruby 2.1.0 or later
- Also works on JRuby 9.0.4.0 or later
$ sudo gem install sisimai
Fetching: sisimai-4.25.5.gem (100%)
Successfully installed sisimai-4.25.5
Parsing documentation for sisimai-4.25.5
Installing ri documentation for sisimai-4.25.5
Done installing documentation for sisimai after 6 seconds
1 gem installed
$ cd /usr/local/src
$ git clone https://github.com/sisimai/rb-sisimai.git
$ cd ./rb-sisimai
$ sudo make depend install-from-local
gem install bundle rake rspec coveralls
...
4 gems installed
bundle exec rake install
sisimai 4.25.5 built to pkg/sisimai-4.25.5.gem.
sisimai (4.25.5) installed.
下記のようにSisimaiのmake()
メソッドをmboxかMaildirのPATHを引数にして実行すると
解析結果が配列で返ってきます。v4.25.6から元データとなった電子メールファイルへの
PATHを保持するorigin
が利用できます。
#! /usr/bin/env ruby
require 'sisimai'
v = Sisimai.make('/path/to/mbox') # or path to Maildir/
# Beginning with v4.23.0, both make() and dump() method of Sisimai class can
# read bounce messages from variable instead of a path to mailbox
f = File.open('/path/to/mbox', 'r'); # or path to Maildir/
v = Sisimai.make(f.read)
# If you want to get bounce records which reason is "delivered", set "delivered"
# option to make() method like the following:
v = Sisimai.make('/path/to/mbox', delivered: true)
if v.is_a? Array
v.each do |e|
puts e.class # Sisimai::Data
puts e.recipient.class # Sisimai::Address
puts e.timestamp.class # Sisimai::Time
puts e.addresser.address # [email protected] # From
puts e.recipient.address # [email protected] # To
puts e.recipient.host # example.jp
puts e.deliverystatus # 5.1.1
puts e.replycode # 550
puts e.reason # userunknown
puts e.origin # /var/spool/bounce/Maildir/new/1740074341.eml
h = e.damn # Convert to HASH
j = e.dump('json') # Convert to JSON string
puts e.dump('json') # JSON formatted bounce data
end
end
下記のようにSisimaiのdump()
メソッドをmboxかMaildirのPATHを引数にして実行すると
解析結果が文字列(JSON)で返ってきます。
# Get JSON string from parsed mailbox or Maildir/
puts Sisimai.dump('/path/to/mbox') # or path to Maildir/
# dump() method also accepts "delivered" option like the following code:
puts Sisimai.dump('/path/to/mbox', delivered: true)
Sisimai 4.19.0からSisimai.make()
とSisimai.dump()
にLamda(Procオブジェクト)
を引数hook
に指定できるコールバック機能が実装されました。
hook
に指定したコードによって処理された結果はSisimai::Data.catch
メソッドで得ることができます。
#! /usr/bin/env ruby
require 'sisimai'
callbackto = lambda do |v|
r = { 'x-mailer' => '', 'queue-id' => '' }
if cv = v['message'].match(/^X-Postfix-Queue-ID:\s*(.+)$/)
r['queue-id'] = cv[1]
end
r['x-mailer'] = v['headers']['x-mailer'] || ''
return r
end
data = Sisimai.make('/path/to/mbox', hook: callbackto)
json = Sisimai.dump('/path/to/mbox', hook: callbackto)
puts data[0].catch['x-mailer'] # Apple Mail (2.1283)
コールバック機能のより詳細な使い方は Sisimai | 解析方法 - コールバック機能 をご覧ください。
$ ruby -rsisimai -e 'puts Sisimai.dump($*.shift)' /path/to/mbox
[{"catch":{"x-mailer":"","return-path":"[email protected]"},"token":"7e81d3b9306fc7a7f3fb4c7b705189d6806d3d6b","lhost":"omls-1.kuins.neko.example.jp","rhost":"nekonyaan0022.apcprd01.prod.exchangelabs.com","alias":"","listid":"","reason":"userunknown","action":"failed","origin":"set-of-emails/maildir/bsd/lhost-office365-13.eml","subject":"にゃーん","messageid":"","replycode":"550","smtpagent":"Office365","softbounce":0,"smtpcommand":"","destination":"neko.kyoto.example.jp","senderdomain":"example.com","feedbacktype":"","diagnosticcode":"Error Details Reported error: 550 5.1.10 RESOLVER.ADR.RecipientNotFound; Recipient not found by SMTP address lookup DSN generated by: NEKONYAAN0022.apcprd01.prod.exchangelabs.com","diagnostictype":"","deliverystatus":"5.1.10","timezoneoffset":"+0000","addresser":"[email protected]","recipient":"[email protected]","timestamp":1493508885}]
公開中のPerl版Sisimai(p5-sisimai)とRuby版Sisimai(rb-sisimai)は下記のような違いが あります。bounceHammer 2.7.13p3とSisimai(シシマイ)の違いについては Sisimai | 違いの一覧をご覧ください。
機能 | Ruby version | Perl version |
---|---|---|
動作環境 | Ruby 2.1 - 2.6 | Perl 5.10 - |
JRuby 9.0.4.0- | ||
解析精度の割合(2000通のメール)[1] | 1.00 | 1.00 |
メール解析速度(1000通のメール) | 2.22秒[2] | 1.35秒 |
インストール方法 | gem install | cpanm, cpm |
依存モジュール数(コアモジュールを除く) | 1モジュール | 2モジュール |
LOC:ソースコードの行数 | 10600行 | 10800行 |
テスト件数(spec/,t/,xt/ディレクトリ) | 241000件 | 270000件 |
ライセンス | 二条項BSD | 二条項BSD |
開発会社によるサポート契約 | 提供中 | 提供中 |
- ./ANALYTICAL-PRECISIONを参照
- Xeon E5-2640 2.5GHz x 2 cores | 5000 bogomips | 1GB RAM | Ruby 2.3.4p301
もしもSisimaiにバグを発見した場合はIssues にて連絡をいただけると助かります。
Sisimaiで解析できないバウンスメールは set-of-emails/to-be-debugged-because/sisimai-cannot-parse-yetリポジトリに追加してPull-Requestを送ってください。
- @libsisimai | Sisimai on Twitter (@libsisimai)
- libSISIMAI.ORG | Sisimai | The successor to bounceHammer, Library to parse bounce mails
- Sisimai Blog | blog.libsisimai.org
- Facebook Page | facebook.com/libsisimai
- GitHub | github.com/sisimai/rb-sisimai
- RubyGems.org | rubygems.org/gems/sisimai
- Perl verson | Perl version of Sisimai
- Fixtures | set-of-emails - Sample emails for "make test"
- README.md - README.md in English
- RFC3463 - Enhanced Mail System Status Codes
- RFC3464 - An Extensible Message Format for Delivery Status Notifications
- RFC3834 - Recommendations for Automatic Responses to Electronic Mail
- RFC5321 - Simple Mail Transfer Protocol
- RFC5322 - Internet Message Format
Copyright (C) 2015-2023 azumakuniyuki, All Rights Reserved.
This software is distributed under The BSD 2-Clause License.