このページの表ではシシマイ(Perl版とRuby版)とbounceHammerの違い、 特にSisimaiの優位性を中心に説明しています。
bounceHammerの最終版(v2.7.13)には解決困難で深刻な解析精度に関わる問題点が幾つかあり、 それらの問題を解決する為にSisimaiは開発されました。
Sisimai(シシマイ)は下記のような 2件以上のバウンス記録を含む単一のメール から全ての受信者アドレスとエラー理由を検出する事が出来ます。 bounceHammerは最初の一件のみ検出可能です。
Content-Type: message/delivery-status Reporting-MTA: dns; nijo.example.jp Received-From-MTA: DNS; smtp-gateway.kyoto.ocn.ne.jp Arrival-Date: Wed, 26 Feb 2014 06:05:47 -0500 Final-Recipient: RFC822; userunknown@example.org Action: failed Status: 5.1.1 Remote-MTA: DNS; mx.example.org Diagnostic-Code: SMTP; 550 5.1.1... User Unknown Last-Attempt-Date: Wed, 26 Feb 2014 06:05:48 -0500 Final-Recipient: RFC822; filtered@example.com Action: failed Status: 5.2.1 Remote-MTA: DNS; mx.example.com Diagnostic-Code: SMTP; 550 5.2.1 ... User Unknown Last-Attempt-Date: Wed, 26 Feb 2014 06:05:48 -0500 --s1QB5ma0018057.1393412748/nijo.example.jp Content-Type: message/rfc822
Sisimai(シシマイ)はGmailのメールボックスにあるバウンスメールも解析出来ます。 bounceHammerは古い形式のバウンスメールであればGmailのメールボックスにあるものでも 解析出来ますが、現在の形式のものは解析出来ません。
SisimaiはStatus: 2.1.5のような行を含むバウンスメール( rfc3464-28.eml ) を正しく解析し、バウンス理由を"delivered"として決定します。 しかし、 bounceHammerはこのようなメールを解析出来るものの、下記の出力例のように、 バウンス理由を"undefined"に決定してしまいます。
{ "token": "0ac0d79df3cc8ef4fc606334af840330", "description": { "timezoneoffset": "+0900", "subject": "Nyaaan", "smtpagent": "", "messageid": "<20151025071802.22CC00222233@neko-222-2222.vs.example.ne.jp>", "listid": "", "diagnosticcode": "smtp; 250 2.1.5 Ok", "deliverystatus": "2.1.5" }, "frequency": 1, "bounced": 1430318085, "addresser": "root@neko-222-2222.vs.example.ne.jp", "recipient": "kijitora@neko.example.jp", "senderdomain": "neko-222-2222.vs.example.ne.jp", "destination": "neko.example.jp", "reason": "undefined", "hostgroup": "reserved", "provider": "reserved" },
(Perl版とRuby版)の動作環境周りにおける違い (bounceHammerと比較して)は以下の通りです。
SisimaiはPerl 5.26.0以降で動作しますが bounceHammerはPerl 5.16以降では動作しません。 ですので、例えばbounceHammerをインストールしようとしているサーバー のPerlが5.18であれば、古いバージョンのPerlを別途インストールする必要があります。
そして、
Sisimai v4.14.2からはSisimaiはPerlでもRuby(JRubyを含む)
でも動作します。
bounceHammerをインストールする作業はやや面倒で、 アーカイブのダウンロード・多くの依存モジュールのインストール・ configure, make, make test, make installコマンドの実行を経て完了します。
一方、Sisimaiのインストールはcpanmやgemコマンドでインストールが 出来るので非常に簡単です。
SisimaiにはbounceHammerのbin/mailboxparserやbin/databasectl のようなコマンドラインツールは無く、またWebUIやDBスキーマも持っていません。 あくまでもモジュールのみの軽量でシンプルな提供形態です。 数行のコードで解析できるようになるので、ユーザ側で好きなようにコマンドラインツールを実装してください、 または既存のシステムに組み込んで実装してください、という方針です。
bounceHammerに対するSisimai (Perl版とRuby版)の性能における数値的な優位点については以下の通りです。
p5-sisimai(Perl) | rb-sisimai(Ruby) | bounceHammer | |
---|---|---|---|
解析精度(2000通) | 100% | 100% | 55% |
商用MTAとESP対応モジュール | あり(同梱) | あり(同梱) | 無し |
解析速度(1000通) | 1.5秒 | 3.2秒 | 4.3秒 |
依存モジュール数 | 2 | 1 | 24 |
ソースコード行数 | 11,800行 | 11,600行 | 18,200行 |
テスト件数 | 340,000件 | 423,000件 | 27000件 |
Sisimaiは内部に 73個のMTA/ESP用解析モジュール を持っているので、その解析精度はbounceHammerの約二倍を誇ります。 また、Microsoft Exchange ServerやIBM Notes and Dominoのような商用MTAや Amazon SESやWorkMail, SendGridのような商用メールサービスからのバウンスメール であってもSisimaiは解析する事が出来ます。
Perl版SisimaiはbounceHammerのbin/mailboxparser コマンドよりも2.0倍程度 高速にメールを解析し、構造化されたデータを生成します。
Sisimaiはバウンスメールの解析のみに特化したライブラリですので、 以下のように小さく堅牢に設計されています。
SisimaiとbounceHammerでのデータ構造 (解析結果の構造、検出可能なバウンス理由)の違いについては以下の通りです。
Sisimaiが生成する解析データは、bounceHammerのそれと比べて より詳細な情報を保持しています。 Sisimaiが生成する解析結果の全項目は Sisimai::Factのデータ構造をご覧ください。
項目名 | Sisimai | bounceHammer | 補足 |
---|---|---|---|
action | OK | - | "failed", "expired", "delivered" |
addresser | OK | OK | 発信者アドレス |
alias | OK | - | 宛先メールアドレスのエイリアス |
catch |
OK (>= v4.19.0) |
- | フックメソッドの戻り値 |
deliverystatus | OK |
OK description/deliverystatus |
D.S.Nの値(例:4.4.7) |
destination | OK | OK | 宛先メールアドレスのドメイン部分 |
diagnosticcode | OK |
OK description/diagnosticcode |
バウンスメールのエラーメッセージや診断メッセージ |
diagnostictype | OK | - |
エラーの種別 主にSMTPまたはX-Unix |
feedbacktype | OK | - |
Feedback-Type:の値 abuseやfraud等 |
frequency | - | OK | バウンスした回数ですが解析済データでは常に1です。 この項目はDB用に存在します。 |
hardbounce | OK | - | ハードバウンスであるかどうかを示す値です。 Sisimai 5.0.0で実装されました。 |
hostgroup | - | OK | 宛先メールアドレスのドメインによる大分類項目です |
lhost | OK | - | 発信に使用されたメールサーバ名(ホスト名かIPアドレス) |
listid | OK |
OK description/listid (>= v2.7.10) |
List-Idの値、メーリングリスト名 |
messageid |
OK Does not include >,< |
OK description/messageid (>= v2.7.11) Including > and < |
元メールのMessage-Id:ヘッダーの値です。 |
provider | - | OK | 宛先メールアドレスの小分類(所属) |
reason | OK(34) | OK(19) | バウンス理由 |
recipient | OK | OK | 受信者(宛先)のメールアドレス |
replycode | OK | - | "503"や"251"のようなSMTP応答コード |
rhost | OK | - | 宛先のメールサーバ名(ホスト名かIPアドレス) |
senderdomain | OK | OK | 発信者メールアドレスのドメイン部分 |
smtpagent | OK |
OK decription/smtpagent |
解析する為に使用されたMTA/MSPモジュール名 |
smtpcommand | OK | - | バウンスした際のSMTPコマンド名 |
softbounce | OK | - | Sisimai 5.0.0で廃止になりました |
subject | OK |
OK description/subject (>= v2.7.11) |
元メールの件名 |
timestamp | OK |
OK bounced |
バウンスした日時 |
timezoneoffset | OK |
OK description/timezoneoffset |
バウンスした日時のタイムゾーン(時差) |
token |
OK including timestamp |
OK generated from a sender and a recipient only) |
バウンス記録を識別する固有文字列 |
Sisimaiが検出可能なエラー理由の一覧と詳細は バウンス理由の一覧をご覧ください。
バウンス理由 | Sisimai | bounceHammer | 解析結果での値 |
---|---|---|---|
Auth Failure | OK | - | authfailure |
Bad Reputation | OK | - | badreputation |
Blocked | OK | - | blocked |
Content Error | OK |
OK contenterr |
contenterror |
Delivered |
OK (>= v4.16.0) |
- |
delivered Option |
Exceed Limit | OK | OK | exceedlimit |
Expired | OK | OK | expired |
Feedback | OK | - | feedback |
Filtered | OK | OK | filtered |
Has Moved | OK | OK | hasmoved |
Host Unknown | OK | OK | hostunknown |
Mailbox Full | OK | OK | mailboxfull |
Mailer Error | OK | OK | mailererror |
Mesg Too Big | OK | OK | mesgtoobig |
Network Error |
OK (>= v4.1.12) |
- | networkerror |
No Relaying | OK | - | norelaying |
Not Accept | OK | OK | notaccept |
Not Compliant RFC | OK | - | notcompliantrfc |
On Hold | OK | OK | onhold |
Policy Violation |
OK (>= v4.22.0) |
- | policyviolation |
Rejected | OK | OK | rejected |
RequirePTR | OK | - | requireptr |
Security Error | OK |
OK securityerr |
securityerror |
Spam Detected |
OK (>= v4.1.25) |
- | spamdetected |
Speeding | OK | - | speeding |
Suspend | OK | OK | suspend |
Syntax Error |
OK (>= v4.17.0) |
- | syntaxerror |
System Error | OK | OK | systemerror |
System Full | OK | OK | systemfull |
Too Many Conn |
OK (>= v4.1.26) |
- | toomanyconn |
Undefined | OK | OK | undefined |
User Unknown | OK | OK | userunknown |
Vacation |
OK (>= v4.1.28) |
- | vacation Option |
Virus Detected |
OK (>= v4.22.0) |
- | virusdetected |