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 (decoded data fields and detectable bounce reasons) between Sisimai and bounceHammer.

Read

Resolved Problems

The final version of bounceHammer (v2.7.13) had several critical and difficult-to-solve problems related to analysis accuracy. Sisimai was developed to address these problems.

2 or more bounces in a single message

Perl
Ruby

Sisimai can detect all recipient addresses and error reasons from a single message which include 2 or more bounce records, such as those listed below. bounceHammer can only detect the first one.

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 also decode bounce emails in your Gmail mailbox. bounceHammer can also decode bounce emails in your Gmail mailbox if they are in an older format, but it cannot decode bounce emails in the current format.


Status: 2.X.X

Perl
Ruby

Sisimai can correctly decode bounce emails (e.g., rfc3464-28.eml ) that contain lines like Status: 2.1.5 and determine the bounce reason as "delivered". However, bounceHammer can also decode such emails, but it determines the bounce reason as "undefined", as shown in the output example below.

  {
    "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 can also decode emails in the ARF (Abuse Reporting Format) format, which is used by overseas email services such as AOL and Yahoo!. bounceHammer's FBL support is only an experimental implementation and cannot fully decode emails in the ARF format.

Environment

The following are the differences in the operating environment of Sisimai (Perl and Ruby versions) compared to bounceHammer:

p5-sisimai(Perl) rb-sisimai(Ruby) bounceHammer
Works on Perl 5.26.0 - 5.38.2 Ruby 2.4.0 - 3.3.0 Perl 5.10.1 - 5.14
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 with Perl 5.26.0 and later, while bounceHammer does not work with Perl 5.16 and later. Therefore, if the Perl on the server where you are trying to install bounceHammer is 5.18, you will need to install an older version of Perl separately.

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


Easy to install

Perl
Ruby

Installing bounceHammer is a bit of a hassle, and it requires downloading the archive, installing many dependent modules, and running the configure, make, make test, and make install commands. On the other hand, Sisimai can be installed with the cpanm or gem commands, making it very easy to install.


Command Line Tools, DB Schema, WebUI

Perl
Ruby

Sisimai does not have command-line tools like bounceHammer's bin/mailboxparser and bin/databasectl, nor does it have a WebUI or DB schema. It is provided only as a lightweight and simple module. The idea is that you can implement command-line tools as you like with a few lines of code, or integrate it into your existing system.

Performance

The following are the numerical performance advantages of Sisimai (Perl and Ruby versions) over 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 decoding email(1000 emails) 1.5s 3.2s 4.3s
Dependencies (Except core modules of Perl) 2 1 24
LOC: Source lines of code 11,500 lines 11,370 lines 18,200 lines
The number of tests 328,000 338,000 27000

High Precision of Analysis

Perl
Ruby

Sisimai has 70 built-in MTA/ESP decoding modules, giving it about twice the analysis accuracy of bounceHammer. Sisimai can also decode bounce emails from commercial MTAs such as Microsoft Exchange Server and IBM Notes and Domino, as well as commercial email services such as Amazon SES, WorkMail, and SendGrid.


Faster than bounceHammer

Perl
Ruby

The Perl version of Sisimai decode emails and generates structured data about 2.0 times faster than the bounceHammer bin/mailboxparser command.

Small and Robust

Perl
Ruby

Sisimai is a library that specializes in decoding bounce emails, and therefore it is designed to be small and robust, as follows:

  • About half the number of lines of source code as bounceHammer
  • About five times the number of tests as bounceHammer
  • Only two dependent modules

Data Structure

The following are the differences in data structure (structure of the decoded results, detectable bounce reasons) between Sisimai and bounceHammer:

Each field of decoded data

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

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 decoded data is always 1.
hardbounce OK - Whether or not it is a hard bounce. Implemented in Sisimai 5.0.0
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(34) 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/ESP Module name used for decoding
smtpcommand OK - The last SMTP command in failed session
softbounce OK - value for checking whether it is soft bounce or not. Deprecated in 5.0.0
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 decoded data in Sisimai are available on Bounce Reason List.

Perl
Ruby
Reason Sisimai bounceHammer reason name in decoded data
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
Virus Detected OK
(>= v4.22.0)
- virusdetected