Differences

The table on this page shows differences between Sisimai (both of the Perl and the Ruby version) and bounceHammer.

Resolved Problems

Some unresolvable and serious problems (Sisimai resolved these problems) on the final version (v2.7.13) of bounceHammer.

Read

Environment

Differences about environment for running Sisimai (both of the Perl and the Ruby version) and all the versions of bounceHammer.

Read

Performance

Numerical advantages of performance in Sisimai (both of the Perl and the Ruby vesrion) over the final version of bounceHammer.

Read

Data

Differences of data structure (parsed data fields and detectable bounce reasons) between Sisimai and bounceHammer.

Read

Resolved Problems

There are some unresolvable and serious problems related to precision of analysis of the final version of bounceHammer(v2.7.13). Sisimai has been developed to resolve these problems.

2 or more bounces in a single message

Perl
Ruby

Sisimai can detect all the recipient addresses and error reasons from a single message which include 2 or more bounce records like the following. bounceHammer can detect the first recipient address only.

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
                

Bounce mails in Gmail mailbox

Perl
Ruby

Sisimai can parse bounce mails in Gmail mailbox. bounceHammer parse only old formatted bounce mails in Gmail mailbox.


Status: 2.X.X

Perl
Ruby

Sisimai can parse and decide the reason to "delivered" properly a bounce message which includes Status: 2.1.5 line in its message body such as rfc3464-28.eml .

However, bounceHammer decides the reason to "undefined" when parsed such email like the following.

  {
    "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 message

Perl
Ruby

Sisimai deals ARF (Abuse Reporting Format) message for Feedback Loop, Many Email Service Providers such as AOL, Yahoo!, as a bounce message and can parse it.

The FBL feature in bounceHammer is just an experimental implementation and not fully support the ARF message.

Environment

Differences about environment for running Sisimai (both of the Perl and the Ruby version) and all the versions of bounceHammer.

p5-Sisimai(Perl) rb-Sisimai(Ruby) bounceHammer
Works on Ruby 2.1 - 2.4 Perl 5.10 - 5.14 Perl 5.10 - 5.24
Could be installed by cpan, cpanm cpm gem configure; make
Command-Line tools N/A N/A Available
Database N/A N/A Available(MySQL, PostgreSQL, SQLite)
Management Console N/A N/A Available(WebUI)

Sisimai works on Perl and Ruby

Perl
Ruby

Sisimai works on Perl 5.10.1 or later, but bounceHammer cannot work on Perl 5.16.1 or later. Therefore, for example, if the Perl version is 5.18 at a host which you want to install bounceHammer, you should install older version of Perl into the host.

And then, beginning of Sisimai v4.14.2, Sisimai works on both of Perl and Ruby (including JRuby).


Easy to install

Perl
Ruby

To install bounceHammer is troublesome because many tasks such as downloading archive file, installing many many dependent Perl modules, and running the configure script, make, make test, make install command before installation has completed. However, to install Sisimai is very easy because the software could be installed using cpanm or gem command.


Command Line Tools, DB Schema, WebUI

Perl
Ruby

Sisimai have neither command-line tools nor DB schema nor WebUI such as bin/mailboxparser in bounceHammer. Sisimai is just a light-weight and a simple library. Command line tools or these environments you want are better to be implemented on yourself as you like, we think.

Performance

Numerical advantages of performance in Sisimai (both of the Perl and the Ruby vesrion) over the final version of bounceHammer.

p5-Sisimai(Perl) rb-Sisimai(Ruby) bounceHammer
Analytical precision ratio(2000 emails) 100% 100% 55%
Modules for Commercial MTAs and MPSs Included Included N/A
The speed of parsing email(1000 emails) 2.33s 3.30s 4.24s
Dependencies (Except core modules of Perl) 2 2 24
LOC:Source lines of code 9,000 lines 12,500 lines 18,200 lines
The number of tests 190,000 110,000 27000

High Precision of Analysis

Perl
Ruby

Precision of analysis in Sisimai is 2.0 times higher than bounceHammer because Sisimai have 55 MTA/MSP modules. And then, Sisimai can parse bounce mails via commercial MTA such as Microsoft Exchange Server, IBM Notes and Domino, via Email Service Providers such as Amazon SES, WorkMail, SendGrid.


Faster than bounceHammer

Perl
Ruby

Sisimai can parse bounce mails and generate structured data faster than bounceHammer (bin/mailboxparser command). The Perl version of Sisimai is about 1.7 times faster, and the Ruby version of Sisimai is about 1.1 times faster.

Small and Robust

Perl
Ruby

Sisimai is made for only parsing email bounces, and it is small and robust.

  • The number of source lines of bounceHammer is about half of bounceHammer
  • The number of tests of Sisimai is about 5 times bounceHammer
  • Only 2 modules are required on Sisimai

Data Structure

Differences of data structure (parsed data fields and detectable bounce reasons) between Sisimai and bounceHammer.

Each field of parsed data

All the fields of parsed data in Sisimai are available on Data Structure of Sisimai::Data.

Perl
Ruby
Field name Sisimai bounceHammer Description
action OK - "failed", "expired", "delivered"
addresser OK OK Sender's email address
alias OK - Alias address of the recipient
catch OK
(>= v4.19.0)
- Returned value from a hook method
deliverystatus OK OK
description/deliverystatus
D.S.N. Value(ex. 5.1.1)
destination OK OK Domain part of a recipient address
diagnosticcode OK OK
description/diagnosticcode
Diagnostic or error message in a bounce mail
diagnostictype OK - Error type string such as "SMTP" or "X-Unix"
feedbacktype OK - value of Feedback-Type: field, such as "abuse", "fraud"
frequency - OK The number of email bounces, however, the value in parsed data is always "1"
hostgroup - OK Host group of a recipient domain such as "webmail", "pc"
lhost OK - Local MTA name: hostname or IP address
listid OK OK
description/listid
(>= v2.7.10)
The value of "List-Id" field, Mailling list name.
messageid OK
Does not include >,<
OK
description/messageid
(>= v2.7.11)

Including > and <
The value of Message-Id of the original message.
provider - OK Provider name such as "google", "microsoft"
reason OK(27) OK(19) Bounce reason
recipient OK OK Recipient's mail address
replycode OK - SMTP reply code such as "550", "422".
rhost OK - Remote MTA name: hostname or IP address
senderdomain OK OK Domain part of a sender email address
smtpagent OK OK
decription/smtpagent
MTA/MSP Module name used for parsing
smtpcommand OK - The last SMTP command in failed session
softbounce OK - value for checking whether it is soft bounce or not
subject OK OK
description/subject
(>= v2.7.11)
Subject of the original message
timestamp OK OK
bounced
Date and time of an email bounce
timezoneoffset OK OK
description/timezoneoffset
Timezome offset value of bounce date
token OK
including timestamp
OK
generated from a sender and a recipient only)
An identifier of each email-bounce.

Detectable bounce reasons

All the reasons of parsed data in Sisimai are available on Bounce Reason List.

Perl
Ruby
Reason Sisimai bounceHammer name in parsed data
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
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