Sisimai
view release on metacpan or search on metacpan
README-JA.md view on Meta::CPAN
* __çºä¿¡è
æ
å ±__: `addresser`, `senderdomain`,
* __åä¿¡è
æ
å ±__: `recipient`, `destination`, `alias`
* __é
ä¿¡ã®æ
å ±__: `action`, `replycode`, `deliverystatus`, `command`
* __ã¨ã©ã¼æ
å ±__: `reason`, `diagnosticcode`, `diagnostictype`, `feedbacktype`, `feedbackid`, `hardbounce`
* __ã¡ã¼ã«æ
å ±__: `subject`, `messageid`, `listid`,
* __è©ä¾¡ç¨é
ç®__: `toxic`, `bogus`, `catch`
* __ãã®ä»æ
å ±__: `decodedby`, `timezoneoffset`, `lhost`, `rhost`, `token`
* __åºåå¯è½ãªå½¢å¼__
* Perl (Hash, Array)
* JSON ([`JSON`](https://metacpan.org/pod/JSON)ã¢ã¸ã¥ã¼ã«ã使ç¨)
* YAML ([`YAML`](https://metacpan.org/dist/YAML/view/lib/YAML.pod)ã¢ã¸ã¥ã¼ã«ã¾ãã¯
[`YAML::Syck`](https://metacpan.org/pod/YAML::Syck)ã¢ã¸ã¥ã¼ã«ãå¿
è¦)
* __ã¤ã³ã¹ãã¼ã«ã使ç¨ãç°¡å__
* `cpan`, `cpanm`, `cpm install`
* `git clone & make`
* __é«ãè§£æç²¾åº¦__
* [61種é¡ã®MTAs/MDAs/ESPs](https://libsisimai.org/en/engine/)ã«å¯¾å¿
* Feedback Loop(ARF)ã«ã対å¿
* [34種é¡ã®ãã¦ã³ã¹çç±](https://libsisimai.org/en/reason/)ãæ¤åº
[^2]: ã³ã¼ã«ããã¯æ©è½ã使ç¨ããã¨`catch`ã¢ã¯ã»ãµã®ä¸ã«ç¬èªã®ãã¼ã¿ã追å ã§ãã¾ã
Command line demo
---------------------------------------------------------------------------------------------------
次ã®ç»åã®ããã«ãPerlçã·ã·ãã¤(p5-sisimai)ã¯ã³ãã³ãã©ã¤ã³ããç°¡åã«ãã¦ã³ã¹ã¡ã¼ã«ãè§£æãããã¨
ãã§ãã¾ãã

Setting Up Sisimai
===================================================================================================
System requirements
---------------------------------------------------------------------------------------------------
ã·ã·ãã¤ã®åä½ç°å¢ã«ã¤ãã¦ã®è©³ç´°ã¯[Sisimai | ã·ã·ãã¤ã使ã£ã¦ã¿ã](https://libsisimai.org/ja/start/)
ãã覧ãã ããã
* [Perl 5.26.0 or later](http://www.perl.org/)
* [__Class::Accessor::Lite__](https://metacpan.org/pod/Class::Accessor::Lite)
* [__JSON__](https://metacpan.org/pod/JSON)
Install
---------------------------------------------------------------------------------------------------
### From CPAN
```shell
$ cpanm --sudo Sisimai
--> Working on Sisimai
Fetching http://www.cpan.org/authors/id/A/AK/AKXLIX/Sisimai-5.7.1.tar.gz ... OK
...
1 distribution installed
$ perldoc -l Sisimai
/usr/local/lib/perl5/site_perl/5.30.0/Sisimai.pm
```
### From GitHub
> [!WARNING]
> Sisimai 5ã¯Perl 5.26以ä¸ãå¿
è¦ã§ããã¤ã³ã¹ãã¼ã«/ã¢ããã°ã¬ã¼ããå®è¡ããåã«`perl -v`ã³ãã³ãã§
> ã·ã¹ãã ã«å
¥ã£ã¦ããPerlãã¼ã¸ã§ã³ã確èªãã¦ãã ããã
```shell
$ perl -v
This is perl 5, version 30, subversion 0 (v5.30.0) built for darwin-2level
Copyright 1987-2019, Larry Wall
...
$ cd /usr/local/src
$ git clone https://github.com/sisimai/p5-sisimai.git
$ cd ./p5-sisimai
$ make install-from-local
./cpanm --sudo . || ( make cpm && ./cpm install --sudo -v . )
--> Working on .
Configuring Sisimai-v5.7.1 ... OK
Building and testing Sisimai-v5.7.1 ... Password: <sudo password here>
OK
Successfully installed Sisimai-v5.7.1
1 distribution installed
$ perl -MSisimai -lE 'print Sisimai->version'
5.7.1
```
Usage
===================================================================================================
Basic usage
---------------------------------------------------------------------------------------------------
ä¸è¨ã®ããã«Sisimaiã®`rise()`ã¡ã½ãããmboxãMaildir/ã®PATHã弿°ã«ãã¦å®è¡ããã¨è§£æçµæãé
å
ãªãã¡ã¬ã³ã¹ã§è¿ã£ã¦ãã¾ããv4.25.6ããå
ãã¼ã¿ã¨ãªã£ãé»åã¡ã¼ã«ãã¡ã¤ã«ã¸ã®PATHãä¿æãã`origin`
ãå©ç¨ã§ãã¾ãã
```perl
#! /usr/bin/env perl
use Sisimai;
my $v = Sisimai->rise('/path/to/mbox'); # ã¾ãã¯Maildir/ã¸ã®PATH
# v4.23.0ããSisimaiã¯ã©ã¹ã®rise()ã¡ã½ããã¨dump()ã¡ã½ããã¯PATH以å¤ã«ããã¦ã³ã¹ã¡ã¼ã«å
¨ä½ãæåå
# ã¨ãã¦èªããããã«ãªãã¾ãã
use IO::File;
my $r = '';
my $f = IO::File->new('/path/to/mbox'); # ã¾ãã¯Maildir/ã¸ã®PATH
{ local $/ = undef; $r = <$f>; $f->close }
my $v = Sisimai->rise(\$r);
# ãã"delivered"(é
ä¿¡æå)ã¨ãªãè§£æçµæãå¿
è¦ãªå ´åã¯ä»¥ä¸ã«ç¤ºãã¨ããrise()ã¡ã½ããã«"delivered"
# ãªãã·ã§ã³ãæå®ãã¦ãã ãã
my $v = Sisimai->rise('/path/to/mbox', 'delivered' => 1);
# v5.0.0ããSisimaiã¯ãã¦ã³ã¹çç±ã"vacation"ã¨ãªãè§£æçµæãããã©ã«ãã§è¿ããªããªãã¾ããããã
# "vacation"ã¨ãªãè§£æçµæãå¿
è¦ãªå ´åã¯æ¬¡ã®ã³ã¼ãã§ç¤ºãããã«rise()ã¡ã½ããã«"vacation"ãªãã·ã§ã³
# ãæå®ãã¦ãã ããã
my $v = Sisimai->rise('/path/to/mbox', 'vacation' => 1);
if( defined $v ) {
for my $e ( @$v ) {
print ref $e; # Sisimai::Fact
print ref $e->recipient; # Sisimai::Address
print ref $e->timestamp; # Sisimai::Time
print $e->addresser->address; # "michitsuna@example.org" # From
print $e->recipient->address; # "kijitora@example.jp" # To
print $e->recipient->host; # "example.jp"
( run in 0.640 second using v1.01-cache-2.11-cpan-5c0b1e786e0 )