The table on this page shows differences between Sisimai (both of the Perl and the Ruby version) and bounceHammer.
Some unresolvable and serious problems (Sisimai resolved these problems) on the final version (v2.7.13) of bounceHammer.
Differences about environment for running Sisimai (both of the Perl and the Ruby version) and all the versions of bounceHammer.
Numerical advantages of performance in Sisimai (both of the Perl and the Ruby vesrion) over the final version of bounceHammer.
Differences of data structure (decoded data fields and detectable bounce reasons) between Sisimai and bounceHammer.
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.
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
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.
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" },
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 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).
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.
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.
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,800 lines | 11,600 lines | 18,200 lines |
The number of tests | 340,000 | 423,000 | 27000 |
Sisimai has 73 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.
The Perl version of Sisimai decode emails and generates structured data about 2.0 times faster than the bounceHammer bin/mailboxparser command.
Sisimai is a library that specializes in decoding bounce emails, and therefore it is designed to be small and robust, as follows:
The following are the differences in data structure (structure of the decoded results, detectable bounce reasons) between Sisimai and bounceHammer:
All the fields of decoded data in Sisimai are available on Data Structure of Sisimai::Fact.
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. |
All the reasons of decoded data in Sisimai are available on Bounce Reason List.
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 |