違いの一覧

このページの表ではシシマイ(Perl版とRuby版)とbounceHammerの違い、 特にSisimaiの優位性を中心に説明しています。

解決した問題点

bounceHammerに存在する解決困難で深刻な問題点(Sisimaiにて解決済)について

詳しく

動作環境

シシマイ(Perl版とRuby版)の動作環境周りにおける違い (bounceHammerと比較して)

詳しく

解析性能

bounceHammerに対するSisimai (Perl版とRuby版)の性能における数値的な優位点について

詳しく

データ構造

SisimaibounceHammerでのデータ構造 (解析結果の構造、検出可能なバウンス理由)の違いについて

詳しく

解決した問題点

bounceHammerの最終版(v2.7.13)には解決困難で深刻な解析精度に関わる問題点が幾つかあり、 それらの問題を解決する為にSisimaiは開発されました。

一つのメールに2つ以上のバウンスがある場合

Perl
Ruby

シシマイは下記のような 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
                

Gmailのメールボックスにあるバウンスメール

Perl
Ruby

シシマイはGmailのメールボックスにあるバウンスメールも解析出来ます。 bounceHammerは古い形式のバウンスメールであればGmailのメールボックスにあるものでも 解析出来ますが、現在の形式のものは解析出来ません。


Status: 2.X.X

Perl
Ruby

SisimaiStatus: 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"
  },
                

Feedback Loop形式のメッセージ

Perl
Ruby

AOLYahoo! など海外のメールサービスでは導入されているARF(Abuse Reporting Format)形式のメールも Sisimaiでは解析可能です。

bounceHammerのFBL対応はあくまでも実験的実装で、完全にARF形式のメールを解析する事は できません。

動作環境

シシマイ(Perl版とRuby版)の動作環境周りにおける違い (bounceHammerと比較して)

SisimaiはPerlとRubyで動きます

Perl
Ruby

SisimaiはPerl 5.10.1以降で動作しますがbounceHammerはPerl 5.16以降では 動作しません。ですので、例えばbounceHammerをインストールしようとしているサーバー のPerlが5.18であれば、古いバージョンのPerlを別途インストールする必要があります。

そして、Sisimai v4.14.2からはSisimaiはPerlでもRuby(JRubyを含む)でも動作します。


インストールが簡単

Perl
Ruby

bounceHammerをインストールする作業はやや面倒で、 アーカイブのダウンロード・多くの依存モジュールのインストール・ configure, make, make test, make installコマンドの実行を経て完了します。 一方、Sisimaiのインストールはcpanmgemコマンドでインストールが 出来るので非常に簡単です。


コマンドラインツール・DBスキーマ・WebUI

Perl
Ruby

SisimaiにはbounceHammerbin/mailboxparserbin/databasectl のようなコマンドラインツールは無く、またWebUIやDBスキーマも持っていません。 あくまでもモジュールのみの軽量でシンプルな提供形態です。 数行のコードで解析できるようになるので、ユーザ側で好きなようにコマンドラインツールを実装してください、 または既存のシステムに組み込んで実装してください、という方針です。

解析性能

bounceHammerに対するSisimai (Perl版とRuby版)の性能における数値的な優位点について

高い解析精度

Perl
Ruby

Sisimaiは内部に 55個のMTA/MSP用解析モジュール を持っているので、その解析精度はbounceHammerの約二倍を誇ります。 また、Microsoft Exchange ServerやIBM Notes and Dominoのような商用MTAや Amazon SESやWorkMail, SendGridのような商用メールサービスからのバウンスメール であってもSisimaiは解析する事が出来ます。


bounceHammerよりも高速

Perl
Ruby

シシマイはbounceHammerのbin/mailboxparserコマンドよりも高速にメールを解析し、 構造化されたデータを生成します。 Perl版Sisimaiで約1.7倍、 Ruby版Sisimaiで約1.1倍高速です。

データ構造

SisimaibounceHammerでのデータ構造 (解析結果の構造、検出可能なバウンス理由)の違いについて

生成されたデータの各項目

Sisimaiが生成する解析結果の全項目は /ja/dataページをご覧ください。

Perl
Ruby
項目名 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"です
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(27) OK(19) バウンス理由
recipient OK OK Recipient's mail address
受信者のメールアドレス
replycode OK - "503"や"251"のようなSMTP応答コード
rhost OK - 宛先のメールサーバ名(ホスト名かIPアドレス)
senderdomain OK OK 発信者メールアドレスのドメイン部分
smtpagent OK OK
decription/smtpagent
解析する為に使用されたMTA/MSPモジュール名
smtpcommand OK - バウンスした際のSMTPコマンド名
softbounce OK - ソフトバウンスかどうかを判別する値
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が生成する解析結果のバウンス理由一覧は /ja/reasonページをご覧ください。

Perl
Ruby
バウンス理由 Sisimai bounceHammer 解析結果での値
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
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
On Hold OK OK onhold
Rejected OK OK rejected
Security Error OK OK
securityerr
securityerror
Spam Detected OK
(>= v4.1.25)
- spamdetected
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