Differences with Sisimai 4

This page describes the changes made in Sisimai (Perl and Ruby versions) Version 5, including the operating environment, features, module names, and additional bounce reasons.

Environment and Features

About changes in Sisimai 5.0.0, including the operating environment, the callback feature, method names, and class and field names of decoded data.

Read

Bounce Reasons

About five new bounce reasons including domain authentication and reputation, added in Sisimai 5.0.0.

Read

Namespaces

About namespaces of newly added or changed modules/gems in Sisimai 5.0.0.

Read

with bounceHammer

About differences between Sisimai 5.0.0 and the latest version of bounceHammer.

Read

Environment and the features

This section describes important changes for users in Sisimai 5.0.0, including changes to the operating environment and features.

Minimum versions of Perl and Ruby

Perl
Ruby

Sisimai 5 requires Perl 5.26.0 or later and Ruby 2.4.0 or later to be installed on your system. Older versions may not work properly with Sisimai 5. Be sure to check the version of Perl and Ruby on your system before installing or upgrading Sisimai 5.

% perl -v

This is perl 5, version 32, subversion 0 (v5.32.0) built for darwin-2level

Copyright 1987-2020, Larry Wall
                
% ruby -v
ruby 3.3.0 (2023-12-25 revision 5124f9ac75) [x86_64-darwin21]
                

Deprecation of make() method and introduction of rise() method

Perl
Ruby

The make() method of the Sisimai class has been deprecated in Sisimai 5.0.0. The make() method will still work until Sisimai 5.1.0, but it will emit a warning at runtime.

Please use the newly implemented rise() method instead.

% perl -MSisimai -lE 'print Sisimai->make(shift)' ./test.eml
 ***warning: Sisimai->make will be removed at v5.1.0. Use Sisimai->rise instead
% perl -MSisimai -lE 'my $p = Sisimai->rise(shift)' ./test.eml
                
% ruby -rsisimai -e 'print Sisimai.make($*.shift)' ./test.eml
 ***warning: Sisimai.make will be removed at v5.1.0. Use Sisimai.rise instead
% ruby -rsisimai -e 'p = Sisimai.rise($*.shift)' ./test.eml
                

Deprecation of "softbounce" and introduction of "hardbounce"

Perl
Ruby

The softbounce() method of the Sisimai::Data class and the "softbounce" in the decoded results have been deprecated in Sisimai 5.0.0. The softbounce() method will still work until Sisimai 5.1.0, but it will emit a warning at runtime.

Please use the newly implemented hardbounce() method and the "hardbounce" in the decoded results instead.

% perl -MSisimai -lE 'print Sisimai->rise(shift)->[0]->softbounce;' ./test.eml
 ***warning: Sisimai::Fact->softbounce will be removed at v5.1.0.
            Use Sisimai::Fact->hardbounce instead
                
% ruby -rsisimai -e 'print Sisimai.rise($*.shift)[0].softbounce' ./test.eml
 ***warning: Sisimai::Fact.softbounce will be removed at v5.1.0.
            Use Sisimai::Fact.hardbounce instead
                

Deprecation of Sisimai::Data class

Perl
Ruby

The Sisimai::Data class, which holds the data structure of the decoded results, has been changed to Sisimai::Fact in Sisimai 5.0.0. Please note if you are referring to the class name of the decoded result object in Perl or Ruby.

% perl -MSisimai -lE 'print ref Sisimai->rise(shift)' ./test.eml
Sisimai::Fact
                
% ruby -rsisimai -e 'print Sisimai.rise($*.shift)[0].class' ./test.eml; echo
Sisimai::Fact
                

"vacation" is not decoded

Perl
Ruby

Sisimai 5.0.0 no longer decodes bounce emails with the bounce reason "vacation" by default. If you need to decode vacation bounce emails, you can specify the vacation option as the second argument to the Sisimai class's rise() method as follows.

#! /usr/bin/env perl
use Sisimai;
my $f = './set-of-emails/maildir/bsd/rfc3834-01.eml';
my $v = Sisimai->rise($f, 'vacation' => 1);
for my $e ( @$v ) {
    print $e->action;           # ""
    print $e->deliverystatus;   # ""
    print $e->reason;           # "vacation"
    print $e->diagnosticcode;   # "I am currently away returning to the office on May 5th."
    print $e->hardbounce;       # 0
}
                
#! /usr/bin/env ruby
require 'sisimai'
f = './set-of-emails/maildir/bsd/rfc3834-01.eml'
v = Sisimai.rise(f, vacation: true)
v.each do |e|
  puts e.action         # ""
  puts e.deliverystatus # ""
  puts e.reason         # "vacation"
  puts e.diagnosticcode # "I am currently away returning to the office on May 5th."
  puts e.hardbounce     # false
end
                

Arguments of the Callback Feature

Perl
Ruby

The callback argument passed to the Sisimai class's rise() method (formerly the make() method) in Sisimai 5.0.0 has changed from hook to c___.

At the same time, the data passed to the argument has changed to an array reference or Array object with two elements. Please check the callback feature page for details.

5 New Bounce Reasons

Sisimai 5.0.0 now includes 5 new bounce reasons. These reasons are primarily returned when an email sender does not meet the requirements outlined in Gmail's Email Sender Guidelines .

As with the existing bounce reasons, the "reason" value in the decoded results will be in all lowercase letters with no spaces, such as "authfailure" or "notcompliantrfc".

Cause of the delivery failure Reason in Sisimai 4 Reason in Sisimai 5
Domain authentication (SPF, DKIM, DMARC) Security Error Auth Failure
Poor sender reputation (domain/IP) Blocked Bad Reputation
PTR record not set or invalid Blocked Require PTR
Non-RFC compliant email Security Error Not Compliant RFC
Sending rate exceeding the limit per unit time Security Error Speeding

Changed Namespaces

Several internal namespaces have been changed in Sisimai 5.0.0. If you are only using the rise() method (formerly the make() method) of the Sisimai class, you will not be affected. However, if you are dividing the processing inside your own decoding script, please be aware of the class name changes.

Purpose of Processing Name in Sisimai 4 Name in Sisimai 5
Keeping decoded results Sisimai::Data Sisimai::Fact
Class for decoding MIME Sisimai::MIME Sisimai::RFC2045
Class for decoding SMTP session log Not Implemented Sisimai::SMTP::Transcript
Decoding bounces from Microsoft Exchange Sisimai::Rhost::ExchangeOnline Sisimai::Rhost::Microsoft
Decoding bounces from Google Workspace Sisimai::Rhost::GoogleApps Sisimai::Rhost::Google
Decoding bounces from Tencent(騰訊) Sisimai::Rhost::TencentQQ Sisimai::Rhost::Tencent