sisimai 4.25.16-java → 5.0.0-java

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (177) hide show
  1. checksums.yaml +5 -5
  2. data/.travis.yml +3 -3
  3. data/ANALYTICAL-PRECISION +2 -2
  4. data/Benchmarks.mk +3 -3
  5. data/CONTRIBUTING +1 -1
  6. data/ChangeLog.md +412 -393
  7. data/Developers.mk +5 -6
  8. data/Gemfile +1 -1
  9. data/Makefile +15 -15
  10. data/README-JA.md +140 -78
  11. data/README.md +290 -143
  12. data/Rakefile +9 -3
  13. data/Repository.mk +2 -3
  14. data/lib/sisimai/address.rb +118 -74
  15. data/lib/sisimai/arf.rb +84 -82
  16. data/lib/sisimai/datetime.rb +5 -52
  17. data/lib/sisimai/{data → fact}/json.rb +7 -9
  18. data/lib/sisimai/fact/yaml.rb +31 -0
  19. data/lib/sisimai/fact.rb +468 -0
  20. data/lib/sisimai/lhost/activehunter.rb +12 -14
  21. data/lib/sisimai/lhost/amavis.rb +11 -14
  22. data/lib/sisimai/lhost/amazonses.rb +37 -41
  23. data/lib/sisimai/lhost/amazonworkmail.rb +15 -18
  24. data/lib/sisimai/lhost/aol.rb +12 -14
  25. data/lib/sisimai/lhost/apachejames.rb +19 -21
  26. data/lib/sisimai/lhost/barracuda.rb +10 -12
  27. data/lib/sisimai/lhost/bigfoot.rb +21 -21
  28. data/lib/sisimai/lhost/biglobe.rb +15 -16
  29. data/lib/sisimai/lhost/courier.rb +20 -20
  30. data/lib/sisimai/lhost/domino.rb +23 -19
  31. data/lib/sisimai/lhost/einsundeins.rb +23 -18
  32. data/lib/sisimai/lhost/exchange2003.rb +30 -29
  33. data/lib/sisimai/lhost/exchange2007.rb +70 -58
  34. data/lib/sisimai/lhost/exim.rb +175 -161
  35. data/lib/sisimai/lhost/ezweb.rb +31 -56
  36. data/lib/sisimai/lhost/facebook.rb +21 -33
  37. data/lib/sisimai/lhost/fml.rb +43 -48
  38. data/lib/sisimai/lhost/gmail.rb +29 -29
  39. data/lib/sisimai/lhost/gmx.rb +18 -17
  40. data/lib/sisimai/lhost/googlegroups.rb +9 -10
  41. data/lib/sisimai/lhost/gsuite.rb +21 -27
  42. data/lib/sisimai/lhost/imailserver.rb +25 -39
  43. data/lib/sisimai/lhost/interscanmss.rb +28 -31
  44. data/lib/sisimai/lhost/kddi.rb +22 -28
  45. data/lib/sisimai/lhost/mailfoundry.rb +11 -12
  46. data/lib/sisimai/lhost/mailmarshalsmtp.rb +25 -29
  47. data/lib/sisimai/lhost/mailru.rb +33 -27
  48. data/lib/sisimai/lhost/mcafee.rb +21 -31
  49. data/lib/sisimai/lhost/messagelabs.rb +17 -20
  50. data/lib/sisimai/lhost/messagingserver.rb +40 -37
  51. data/lib/sisimai/lhost/mfilter.rb +15 -16
  52. data/lib/sisimai/lhost/mxlogic.rb +24 -23
  53. data/lib/sisimai/lhost/notes.rb +17 -17
  54. data/lib/sisimai/lhost/office365.rb +63 -27
  55. data/lib/sisimai/lhost/opensmtpd.rb +12 -13
  56. data/lib/sisimai/lhost/outlook.rb +12 -15
  57. data/lib/sisimai/lhost/postfix.rb +179 -129
  58. data/lib/sisimai/lhost/powermta.rb +12 -14
  59. data/lib/sisimai/lhost/qmail.rb +44 -47
  60. data/lib/sisimai/lhost/receivingses.rb +15 -20
  61. data/lib/sisimai/lhost/sendgrid.rb +34 -32
  62. data/lib/sisimai/lhost/sendmail.rb +66 -53
  63. data/lib/sisimai/lhost/surfcontrol.rb +19 -19
  64. data/lib/sisimai/lhost/v5sendmail.rb +45 -39
  65. data/lib/sisimai/lhost/verizon.rb +35 -39
  66. data/lib/sisimai/lhost/x1.rb +18 -17
  67. data/lib/sisimai/lhost/x2.rb +17 -14
  68. data/lib/sisimai/lhost/x3.rb +19 -19
  69. data/lib/sisimai/lhost/x4.rb +72 -57
  70. data/lib/sisimai/lhost/x5.rb +17 -19
  71. data/lib/sisimai/lhost/x6.rb +41 -17
  72. data/lib/sisimai/lhost/yahoo.rb +17 -16
  73. data/lib/sisimai/lhost/yandex.rb +16 -20
  74. data/lib/sisimai/lhost/zoho.rb +16 -15
  75. data/lib/sisimai/lhost.rb +8 -10
  76. data/lib/sisimai/mail/maildir.rb +1 -3
  77. data/lib/sisimai/mail/mbox.rb +3 -4
  78. data/lib/sisimai/mail/memory.rb +0 -1
  79. data/lib/sisimai/mail/stdin.rb +1 -3
  80. data/lib/sisimai/mail.rb +3 -7
  81. data/lib/sisimai/mda.rb +28 -42
  82. data/lib/sisimai/message.rb +435 -326
  83. data/lib/sisimai/order.rb +5 -5
  84. data/lib/sisimai/reason/authfailure.rb +64 -0
  85. data/lib/sisimai/reason/badreputation.rb +53 -0
  86. data/lib/sisimai/reason/blocked.rb +94 -160
  87. data/lib/sisimai/reason/contenterror.rb +8 -9
  88. data/lib/sisimai/reason/delivered.rb +4 -6
  89. data/lib/sisimai/reason/exceedlimit.rb +10 -12
  90. data/lib/sisimai/reason/expired.rb +6 -8
  91. data/lib/sisimai/reason/feedback.rb +2 -3
  92. data/lib/sisimai/reason/filtered.rb +17 -19
  93. data/lib/sisimai/reason/hasmoved.rb +9 -10
  94. data/lib/sisimai/reason/hostunknown.rb +15 -15
  95. data/lib/sisimai/reason/mailboxfull.rb +10 -12
  96. data/lib/sisimai/reason/mailererror.rb +18 -20
  97. data/lib/sisimai/reason/mesgtoobig.rb +9 -11
  98. data/lib/sisimai/reason/networkerror.rb +5 -8
  99. data/lib/sisimai/reason/norelaying.rb +8 -11
  100. data/lib/sisimai/reason/notaccept.rb +13 -14
  101. data/lib/sisimai/reason/notcompliantrfc.rb +43 -0
  102. data/lib/sisimai/reason/onhold.rb +6 -9
  103. data/lib/sisimai/reason/policyviolation.rb +14 -12
  104. data/lib/sisimai/reason/rejected.rb +26 -24
  105. data/lib/sisimai/reason/requireptr.rb +69 -0
  106. data/lib/sisimai/reason/securityerror.rb +33 -36
  107. data/lib/sisimai/reason/spamdetected.rb +114 -147
  108. data/lib/sisimai/reason/speeding.rb +49 -0
  109. data/lib/sisimai/reason/suspend.rb +11 -11
  110. data/lib/sisimai/reason/syntaxerror.rb +11 -10
  111. data/lib/sisimai/reason/systemerror.rb +7 -9
  112. data/lib/sisimai/reason/systemfull.rb +7 -8
  113. data/lib/sisimai/reason/toomanyconn.rb +9 -11
  114. data/lib/sisimai/reason/undefined.rb +2 -3
  115. data/lib/sisimai/reason/userunknown.rb +129 -146
  116. data/lib/sisimai/reason/vacation.rb +3 -4
  117. data/lib/sisimai/reason/virusdetected.rb +10 -11
  118. data/lib/sisimai/reason.rb +59 -64
  119. data/lib/sisimai/rfc1894.rb +55 -28
  120. data/lib/sisimai/rfc2045.rb +373 -0
  121. data/lib/sisimai/rfc3464.rb +250 -308
  122. data/lib/sisimai/rfc3834.rb +42 -45
  123. data/lib/sisimai/rfc5322.rb +75 -100
  124. data/lib/sisimai/rfc5965.rb +31 -0
  125. data/lib/sisimai/rhost/cox.rb +5 -6
  126. data/lib/sisimai/rhost/franceptt.rb +6 -8
  127. data/lib/sisimai/rhost/godaddy.rb +12 -12
  128. data/lib/sisimai/rhost/{googleapps.rb → google.rb} +80 -72
  129. data/lib/sisimai/rhost/iua.rb +9 -10
  130. data/lib/sisimai/rhost/kddi.rb +6 -8
  131. data/lib/sisimai/rhost/{exchangeonline.rb → microsoft.rb} +115 -114
  132. data/lib/sisimai/rhost/mimecast.rb +42 -40
  133. data/lib/sisimai/rhost/nttdocomo.rb +12 -12
  134. data/lib/sisimai/rhost/spectrum.rb +10 -12
  135. data/lib/sisimai/rhost/{tencentqq.rb → tencent.rb} +7 -8
  136. data/lib/sisimai/rhost.rb +23 -31
  137. data/lib/sisimai/smtp/command.rb +59 -0
  138. data/lib/sisimai/smtp/error.rb +4 -7
  139. data/lib/sisimai/smtp/reply.rb +161 -74
  140. data/lib/sisimai/smtp/status.rb +504 -393
  141. data/lib/sisimai/smtp/transcript.rb +124 -0
  142. data/lib/sisimai/smtp.rb +0 -1
  143. data/lib/sisimai/string.rb +74 -5
  144. data/lib/sisimai/time.rb +1 -2
  145. data/lib/sisimai/version.rb +1 -1
  146. data/lib/sisimai.rb +35 -21
  147. data/set-of-emails/maildir/bsd/lhost-domino-02.eml +6 -3
  148. data/set-of-emails/maildir/bsd/lhost-googlegroups-15.eml +174 -0
  149. data/set-of-emails/maildir/bsd/lhost-gsuite-15.eml +229 -0
  150. data/set-of-emails/maildir/bsd/lhost-postfix-75.eml +51 -0
  151. data/set-of-emails/maildir/bsd/lhost-postfix-76.eml +101 -0
  152. data/set-of-emails/maildir/bsd/lhost-postfix-77.eml +74 -0
  153. data/set-of-emails/maildir/bsd/lhost-postfix-78.eml +91 -0
  154. data/set-of-emails/maildir/bsd/lhost-receivingses-08.eml +88 -0
  155. data/set-of-emails/maildir/bsd/rfc3464-43.eml +88 -0
  156. data/set-of-emails/maildir/bsd/rhost-google-03.eml +101 -0
  157. data/set-of-emails/maildir/bsd/rhost-google-04.eml +102 -0
  158. data/set-of-emails/maildir/bsd/rhost-google-05.eml +82 -0
  159. data/set-of-emails/maildir/bsd/rhost-google-06.eml +102 -0
  160. data/set-of-emails/maildir/bsd/rhost-google-07.eml +69 -0
  161. data/set-of-emails/maildir/bsd/rhost-google-08.eml +99 -0
  162. data/sisimai-java.gemspec +1 -1
  163. data/sisimai.gemspec +1 -1
  164. metadata +42 -22
  165. data/.rspec +0 -2
  166. data/lib/sisimai/data/yaml.rb +0 -33
  167. data/lib/sisimai/data.rb +0 -411
  168. data/lib/sisimai/mime.rb +0 -456
  169. /data/set-of-emails/maildir/bsd/{rfc3464-41.eml → rfc3834-05.eml} +0 -0
  170. /data/set-of-emails/maildir/bsd/{rhost-googleapps-01.eml → rhost-google-01.eml} +0 -0
  171. /data/set-of-emails/maildir/bsd/{rhost-googleapps-02.eml → rhost-google-02.eml} +0 -0
  172. /data/set-of-emails/maildir/bsd/{rhost-exchangeonline-01.eml → rhost-microsoft-01.eml} +0 -0
  173. /data/set-of-emails/maildir/bsd/{rhost-exchangeonline-02.eml → rhost-microsoft-02.eml} +0 -0
  174. /data/set-of-emails/maildir/bsd/{rhost-exchangeonline-03.eml → rhost-microsoft-03.eml} +0 -0
  175. /data/set-of-emails/maildir/bsd/{rhost-tencentqq-01.eml → rhost-tencent-01.eml} +0 -0
  176. /data/set-of-emails/maildir/bsd/{rhost-tencentqq-02.eml → rhost-tencent-02.eml} +0 -0
  177. /data/set-of-emails/maildir/bsd/{rhost-tencentqq-03.eml → rhost-tencent-03.eml} +0 -0
data/Developers.mk CHANGED
@@ -5,7 +5,7 @@
5
5
  # | |_| | __/\ V / __/ | (_) | |_) | __/ | \__ \_| | | | | | <
6
6
  # |____/ \___| \_/ \___|_|\___/| .__/ \___|_| |___(_)_| |_| |_|_|\_\
7
7
  # |_|
8
- # -----------------------------------------------------------------------------
8
+ # -------------------------------------------------------------------------------------------------
9
9
  SHELL := /bin/sh
10
10
  HERE := $(shell pwd)
11
11
  NAME := Sisimai
@@ -34,11 +34,10 @@ MACFORMATSET := $(SET_OF_EMAIL)/maildir/mac
34
34
 
35
35
  INDEX_LENGTH := 24
36
36
  DESCR_LENGTH := 50
37
- BH_CAN_PARSE := AmazonSES AmazonWorkMail Aol Bigfoot Biglobe Courier EZweb Exim \
38
- Facebook GSuite Google KDDI MessageLabs MessagingServer Office365 \
39
- Postfix SendGrid Sendmail Verizon X5 Yandex qmail
40
-
41
- # -----------------------------------------------------------------------------
37
+ BH_CAN_PARSE := AmazonSES AmazonWorkMail Aol Bigfoot Biglobe Courier EZweb Exim Facebook GSuite \
38
+ Google KDDI MessageLabs MessagingServer Office365 Postfix SendGrid Sendmail Verizon \
39
+ X5 Yandex qmail
40
+ # -------------------------------------------------------------------------------------------------
42
41
  .PHONY: clean
43
42
 
44
43
  private-sample:
data/Gemfile CHANGED
@@ -5,7 +5,7 @@ gemspec name: 'sisimai'
5
5
 
6
6
  group :development, :test do
7
7
  gem 'rake', :require => false
8
- gem 'rspec', :require => false
8
+ gem 'minitest', :require => false
9
9
  gem 'coveralls', :require => false
10
10
  end
11
11
 
data/Makefile CHANGED
@@ -4,7 +4,7 @@
4
4
  # | |\/| |/ _` | |/ / _ \ |_| | |/ _ \
5
5
  # | | | | (_| | < __/ _| | | __/
6
6
  # |_| |_|\__,_|_|\_\___|_| |_|_|\___|
7
- # -----------------------------------------------------------------------------
7
+ # -------------------------------------------------------------------------------------------------
8
8
  SHELL := /bin/sh
9
9
  TIME := $(shell date '+%s')
10
10
  NAME := sisimai
@@ -12,36 +12,34 @@ RUBY ?= ruby
12
12
  JRUBY ?= /usr/local/jr
13
13
  RAKE ?= rake
14
14
  MKDIR := mkdir -p
15
- RSPEC := rspec -Ilib -f progress
16
15
  CP := cp
17
16
  RM := rm -f
18
17
 
19
- DEPENDENCIES = bundle rake rspec
18
+ DEPENDENCIES = bundle rake minitest
20
19
  .DEFAULT_GOAL = git-status
21
- REPOS_TARGETS = git-status git-push git-commit-amend git-tag-list git-diff \
22
- git-reset-soft git-rm-cached git-branch
20
+ REPOS_TARGETS = git-status git-push git-commit-amend git-tag-list git-diff git-reset-soft \
21
+ git-rm-cached git-branch
23
22
  DEVEL_TARGETS = private-sample
24
23
  BENCH_TARGETS = profile speed-test loc
25
24
 
26
-
27
- # -----------------------------------------------------------------------------
25
+ # -------------------------------------------------------------------------------------------------
28
26
  .PHONY: clean
29
27
 
30
28
  depend:
31
29
  gem install $(DEPENDENCIES)
32
- if [ test -d "$(JRUBY)" ]; then \
30
+ if [ -d "$(JRUBY)" ]; then \
33
31
  PATH="$(JRUBY)/bin:$$PATH" $(JRUBY)/bin/gem install $(DEPENDENCIES); \
34
32
  fi
35
33
 
36
34
  install-from-rubygems:
37
35
  gem install $(NAME)
38
- if [ test -d "$(JRUBY)" ]; then \
36
+ if [ -d "$(JRUBY)" ]; then \
39
37
  PATH="$(JRUBY)/bin:$$PATH" $(JRUBY)/bin/gem install $(NAME); \
40
38
  fi
41
39
 
42
40
  install-from-local:
43
41
  $(RAKE) install
44
- if [ test -d "$(JRUBY)" ]; then \
42
+ if [ -d "$(JRUBY)" ]; then \
45
43
  PATH="$(JRUBY)/bin:$$PATH" $(JRUBY)/bin/rake install; \
46
44
  fi
47
45
 
@@ -57,18 +55,20 @@ release:
57
55
  PATH="$(JRUBY)/bin:$$PATH" $(JRUBY)/bin/rake release; \
58
56
  fi
59
57
 
60
- test: cruby-test
58
+ test: user-test author-test
59
+ user-test:
60
+ rake publictest
61
+
62
+ author-test:
63
+ rake privatetest
61
64
 
62
65
  check:
63
66
  find lib -type f -exec grep --color -E ' $$' {} /dev/null \;
64
67
  find lib -type f -exec grep --color -E '[;][ ]*$$' {} /dev/null \;
65
68
 
66
- cruby-test:
67
- $(RAKE) spec
68
-
69
69
  jruby-test:
70
70
  if [ -d "$(JRUBY)" ]; then \
71
- PATH="$(JRUBY)/bin:$$PATH" LS_HEAP_SIZE='1024m' $(JRUBY)/bin/rake spec; \
71
+ PATH="$(JRUBY)/bin:$$PATH" LS_HEAP_SIZE='1024m' $(JRUBY)/bin/rake publictest; \
72
72
  fi
73
73
 
74
74
  patrol:
data/README-JA.md CHANGED
@@ -1,12 +1,25 @@
1
1
  ![](https://libsisimai.org/static/images/logo/sisimai-x01.png)
2
-
3
2
  [![License](https://img.shields.io/badge/license-BSD%202--Clause-orange.svg)](https://github.com/sisimai/rb-sisimai/blob/master/LICENSE)
4
3
  [![Coverage Status](https://img.shields.io/coveralls/sisimai/rb-sisimai.svg)](https://coveralls.io/r/sisimai/rb-sisimai)
5
- [![Build Status](https://travis-ci.org/sisimai/rb-sisimai.svg?branch=master)](https://travis-ci.org/sisimai/rb-sisimai)
6
- [![Codacy Badge](https://api.codacy.com/project/badge/grade/38340177e6284a65be69c0c7c3dc2b58)](https://www.codacy.com/app/azumakuniyuki/rb-sisimai)
7
- [![Ruby](https://img.shields.io/badge/ruby-v2.1.0--v2.6.0-red.svg)](https://www.ruby-lang.org/)
4
+ [![Ruby](https://img.shields.io/badge/ruby-v2.4.0--v2.7.0-red.svg)](https://www.ruby-lang.org/)
8
5
  [![Gem Version](https://badge.fury.io/rb/sisimai.svg)](https://badge.fury.io/rb/sisimai)
9
6
 
7
+ > [!IMPORTANT]
8
+ > **2024年2月2日の時点でこのリポジトリのデフォルトブランチは[5-stable](https://github.com/sisimai/rb-sisimai/tree/5-stable)
9
+ > (Sisimai 5)になりました。** もし古いバージョンを使いたい場合は[4-stable](https://github.com/sisimai/rb-sisimai/tree/4-stable)[^1]
10
+ > ブランチを見てください。また`main`や`master`ブランチはもうこのリポジトリでは使用していません。
11
+ [^1]: 4系を`clone`する場合は`git clone -b 4-stable https://github.com/sisimai/rb-sisimai.git`
12
+
13
+ > [!WARNING]
14
+ > Sisimai 5はRuby 2.4以上が必要です。インストール/アップグレードを実行する前に`ruby -v`コマンドで
15
+ > システムに入っているRubyのバージョンを確認してください。
16
+
17
+ > [!CAUTION]
18
+ > 2024年2月2日の時点で[Sisimai 5](https://github.com/sisimai/rb-sisimai/releases/tag/v5.0.0)は
19
+ > [RubyGems.org](https://rubygems.org/gems/sisimai)にアップロードしていません。数ヶ月以内には
20
+ > アップロードをする予定ですが、それまではこのリポジトリではから`git clone`してください。
21
+
22
+
10
23
  - [**README(English)**](README.md)
11
24
  - [シシマイ? | What is Sisimai](#what-is-sisimai)
12
25
  - [主な特徴的機能 | Key features](#key-features)
@@ -36,16 +49,15 @@
36
49
  - [ライセンス | License](#license)
37
50
 
38
51
  What is Sisimai
39
- ===============================================================================
40
- Sisimai(シシマイ)はRFC5322準拠のエラーメールを解析し、解析結果をデータ構造に
41
- 変換するインターフェイスを提供するRubyライブラリです。
42
- [github.com/sisimai/p5-sisimai](https://github.com/sisimai/p5-sisimai/)
52
+ ===================================================================================================
53
+ Sisimai(シシマイ)はRFC5322準拠のエラーメールを解析し、解析結果をデータ構造に変換するインターフェイス
54
+ を提供するRubyライブラリです。[github.com/sisimai/p5-sisimai](https://github.com/sisimai/p5-sisimai/)
43
55
  で公開しているPerl版シシマイから移植しました。
44
56
 
45
57
  ![](https://libsisimai.org/static/images/figure/sisimai-overview-1.png)
46
58
 
47
59
  Key features
48
- -------------------------------------------------------------------------------
60
+ ---------------------------------------------------------------------------------------------------
49
61
  * __エラーメールをデータ構造に変換__
50
62
  * Rubyのデータ形式(HashとArray)とJSON(String)に対応
51
63
  * __インストールも使用も簡単__
@@ -55,24 +67,23 @@ Key features
55
67
  * 解析精度はbounceHammerの2倍
56
68
  * 68種類のMTA/MDA/ESPに対応
57
69
  * Feedback Loopにも対応
58
- * 29種類のエラー理由を検出
70
+ * 32種類のエラー理由を検出
59
71
 
60
72
  Setting Up Sisimai
61
- ===============================================================================
62
-
73
+ ===================================================================================================
63
74
  System requirements
64
- -------------------------------------------------------------------------------
65
- Sisimaiの動作環境についての詳細は
66
- [Sisimai | シシマイを使ってみる](https://libsisimai.org/ja/start/)をご覧ください。
75
+ ---------------------------------------------------------------------------------------------------
76
+ Sisimaiの動作環境についての詳細は[Sisimai | シシマイを使ってみる](https://libsisimai.org/ja/start/)
77
+ をご覧ください。
67
78
 
68
79
 
69
- * [Ruby 2.1.0 or later](http://www.ruby-lang.org/)
80
+ * [Ruby 2.4.0 or later](http://www.ruby-lang.org/)
70
81
  * [__Oj | The fastest JSON parser and object serializer__](https://rubygems.org/gems/oj)
71
82
  * Also works on [JRuby 9.0.4.0 or later](http://jruby.org)
72
83
  * [__JrJackson | A mostly native JRuby wrapper for the java jackson json processor jar__](https://rubygems.org/gems/jrjackson)
73
84
 
74
85
  Install
75
- -------------------------------------------------------------------------------
86
+ ---------------------------------------------------------------------------------------------------
76
87
  ### From RubyGems.org
77
88
 
78
89
  ```shell
@@ -92,7 +103,7 @@ $ cd /usr/local/src
92
103
  $ git clone https://github.com/sisimai/rb-sisimai.git
93
104
  $ cd ./rb-sisimai
94
105
  $ sudo make depend install-from-local
95
- gem install bundle rake rspec coveralls
106
+ gem install bundle rake minitest coveralls
96
107
  ...
97
108
  4 gems installed
98
109
  bundle exec rake install
@@ -102,26 +113,29 @@ sisimai (4.25.5) installed.
102
113
 
103
114
  Usage
104
115
  ======
105
-
106
116
  Basic usage
107
- -------------------------------------------------------------------------------
108
- 下記のようにSisimaiの`make()`メソッドをmboxかMaildirのPATHを引数にして実行すると
109
- 解析結果が配列で返ってきます。v4.25.6から元データとなった電子メールファイルへの
110
- PATHを保持する`origin`が利用できます。
117
+ ---------------------------------------------------------------------------------------------------
118
+ 下記のようにSisimaiの`rise()`メソッドをmboxかMaildirのPATHを引数にして実行すると解析結果が配列で
119
+ 返ってきます。v4.25.6から元データとなった電子メールファイルへのPATHを保持する`origin`が利用できます。
111
120
 
112
121
  ```ruby
113
122
  #! /usr/bin/env ruby
114
123
  require 'sisimai'
115
- v = Sisimai.make('/path/to/mbox') # or path to Maildir/
124
+ v = Sisimai.rise('/path/to/mbox') # or path to Maildir/
116
125
 
117
- # Beginning with v4.23.0, both make() and dump() method of Sisimai class can
118
- # read bounce messages from variable instead of a path to mailbox
126
+ # Beginning with v4.23.0, both rise() and dump() method of Sisimai class can read bounce messages
127
+ # from variable instead of a path to mailbox
119
128
  f = File.open('/path/to/mbox', 'r'); # or path to Maildir/
120
- v = Sisimai.make(f.read)
129
+ v = Sisimai.rise(f.read)
130
+
131
+ # If you want to get bounce records which reason is "delivered", set "delivered" option to rise()
132
+ # method like the following:
133
+ v = Sisimai.rise('/path/to/mbox', delivered: true)
121
134
 
122
- # If you want to get bounce records which reason is "delivered", set "delivered"
123
- # option to make() method like the following:
124
- v = Sisimai.make('/path/to/mbox', delivered: true)
135
+ # Beginning with v5.0.0, sisimai does not return the reulst which "reason" is "vaction" by default.
136
+ # If you want to get bounce records which reason is "vacation", set "vacation" option to rise()
137
+ # method like the following:
138
+ v = Sisimai.rise('/path/to/mbox', vacation: true);
125
139
 
126
140
  if v.is_a? Array
127
141
  v.each do |e|
@@ -136,6 +150,7 @@ if v.is_a? Array
136
150
  puts e.replycode # 550
137
151
  puts e.reason # userunknown
138
152
  puts e.origin # /var/spool/bounce/Maildir/new/1740074341.eml
153
+ puts e.hardbounce # true
139
154
 
140
155
  h = e.damn # Convert to HASH
141
156
  j = e.dump('json') # Convert to JSON string
@@ -145,9 +160,9 @@ end
145
160
  ```
146
161
 
147
162
  Convert to JSON
148
- -------------------------------------------------------------------------------
149
- 下記のようにSisimaiの`dump()`メソッドをmboxかMaildirのPATHを引数にして実行すると
150
- 解析結果が文字列(JSON)で返ってきます。
163
+ ---------------------------------------------------------------------------------------------------
164
+ 下記のようにSisimaiの`dump()`メソッドをmboxかMaildirのPATHを引数にして実行すると解析結果が文字列(JSON)
165
+ で返ってきます。
151
166
 
152
167
  ```ruby
153
168
  # Get JSON string from parsed mailbox or Maildir/
@@ -158,70 +173,119 @@ puts Sisimai.dump('/path/to/mbox', delivered: true)
158
173
  ```
159
174
 
160
175
  Callback feature
161
- -------------------------------------------------------------------------------
162
- Sisimai 4.19.0から`Sisimai.make()`と`Sisimai.dump()`にLamda(Procオブジェクト)
163
- を引数`hook`に指定できるコールバック機能が実装されました。
164
- `hook`に指定したコードによって処理された結果は`Sisimai::Data.catch`
165
- メソッドで得ることができます。
176
+ ---------------------------------------------------------------------------------------------------
177
+ `Sisimai.rise`と`Sisimai.dump`の`:c___`引数はコールバック機能で呼び出されるProcオブジェクトを保持する
178
+ 配列です。`:c___`の1番目の要素には`Sisimai::Message.parse`で呼び出されるProcオブジェクトでメールヘッダ
179
+ と本文に対して行う処理を、2番目の要素には、解析対象のメールファイルに対して行う処理をそれぞれ入れます。
180
+
181
+ 各Procオブジェクトで処理した結果は`Sisimai::Data.catch`を通して得られます。
182
+
183
+ ### [0] メールヘッダと本文に対して
184
+ `:c___`に渡す配列の最初の要素に入れたProcオブジェクトは`Sisimai::Message->parse()`で呼び出されます。
166
185
 
167
186
  ```ruby
168
187
  #! /usr/bin/env ruby
169
188
  require 'sisimai'
170
- callbackto = lambda do |v|
171
- r = { 'x-mailer' => '', 'queue-id' => '' }
189
+ code = lambda do |args|
190
+ head = args['headers'] # (*Hash) Email headers
191
+ body = args['message'] # (String) Message body
192
+ adds = { 'x-mailer' => '', 'queue-id' => '' }
172
193
 
173
- if cv = v['message'].match(/^X-Postfix-Queue-ID:\s*(.+)$/)
174
- r['queue-id'] = cv[1]
194
+ if cv = body.match(/^X-Postfix-Queue-ID:\s*(.+)$/)
195
+ adds['queue-id'] = cv[1]
175
196
  end
176
- r['x-mailer'] = v['headers']['x-mailer'] || ''
177
- return r
197
+ r['x-mailer'] = head['x-mailer'] || ''
198
+ return adds
178
199
  end
179
200
 
180
- data = Sisimai.make('/path/to/mbox', hook: callbackto)
181
- json = Sisimai.dump('/path/to/mbox', hook: callbackto)
201
+ data = Sisimai.rise('/path/to/mbox', c___: [code, nil])
202
+ json = Sisimai.dump('/path/to/mbox', c___: [code, nil])
182
203
 
183
- puts data[0].catch['x-mailer'] # Apple Mail (2.1283)
204
+ puts data[0].catch['x-mailer'] # "Apple Mail (2.1283)"
205
+ puts data[0].catch['queue-id'] # "43f4KX6WR7z1xcMG"
184
206
  ```
185
207
 
186
- コールバック機能のより詳細な使い方は
187
- [Sisimai | 解析方法 - コールバック機能](https://libsisimai.org/ja/usage/#callback)
188
- をご覧ください。
208
+ ### 各メールのファイルに対して
209
+ `Sisimai->rise()`と`Sisimai->dump()`の両メソッドに渡せる引数`c___`(配列リファレンス)の2番目に入れた
210
+ コードリファレンスは解析したメールのファイルごとに呼び出されます。
189
211
 
212
+ ```ruby
213
+ path = '/path/to/maildir'
214
+ code = lambda do |args|
215
+ kind = args['kind'] # (String) Sisimai::Mail.kind
216
+ mail = args['mail'] # (String) Entire email message
217
+ path = args['path'] # (String) Sisimai::Mail.path
218
+ sisi = args['sisi'] # (Array) List of Sisimai::Data
219
+
220
+ sisi.each do |e|
221
+ # Insert custom fields into the parsed results
222
+ e.catch ||= {}
223
+ e.catch['size'] = mail.size
224
+ e.catch['kind'] = kind.capitalize
225
+
226
+ if cv = mail.match(/^Return-Path: (.+)$/)
227
+ # Return-Path: <MAILER-DAEMON>
228
+ e.catch['return-path'] = cv[1]
229
+ end
230
+ e.catch['parsedat'] = Time.new.localtime.to_s
231
+
232
+ # Append X-Sisimai-Parsed: header and save into other path
233
+ a = sprintf("X-Sisimai-Parsed: %d", sisi.size)
234
+ p = sprintf("/path/to/another/directory/sisimai-%s.eml", e.token)
235
+ v = mail.sub(/^(From:.+?)$/, '\1' + "\n" + a)
236
+ f = File.open(p, 'w:UTF-8')
237
+ f.write(v)
238
+ f.close
239
+
240
+ # Remove the email file in Maildir/ after parsed
241
+ File.delete(path) if kind == 'maildir'
242
+
243
+ # Need to not return a value
244
+ end
245
+ end
190
246
 
191
- One-Liner
192
- -------------------------------------------------------------------------------
247
+ list = Sisimai.rise(path, c___: [nil, code])
248
+
249
+ puts list[0].catch['size'] # 2202
250
+ puts list[0].catch['kind'] # "Maildir"
251
+ puts list[0].catch['return-path'] # "<MAILER-DAEMON>"
252
+ ```
193
253
 
254
+ コールバック機能のより詳細な使い方は
255
+ [Sisimai | 解析方法 - コールバック機能](https://libsisimai.org/ja/usage/#callback)をご覧ください。
256
+
257
+ One-Liner
258
+ ---------------------------------------------------------------------------------------------------
194
259
  ```shell
195
260
  $ ruby -rsisimai -e 'puts Sisimai.dump($*.shift)' /path/to/mbox
196
261
  ```
197
262
 
198
263
  Output example
199
- -------------------------------------------------------------------------------
264
+ ---------------------------------------------------------------------------------------------------
200
265
  ![](https://libsisimai.org/static/images/demo/sisimai-dump-02.gif)
201
266
 
202
267
  ```json
203
- [{"catch":{"x-mailer":"","return-path":"neko@example.com"},"token":"7e81d3b9306fc7a7f3fb4c7b705189d6806d3d6b","lhost":"omls-1.kuins.neko.example.jp","rhost":"nekonyaan0022.apcprd01.prod.exchangelabs.com","alias":"","listid":"","reason":"userunknown","action":"failed","origin":"set-of-emails/maildir/bsd/lhost-office365-13.eml","subject":"にゃーん","messageid":"","replycode":"550","smtpagent":"Office365","softbounce":0,"smtpcommand":"","destination":"neko.kyoto.example.jp","senderdomain":"example.com","feedbacktype":"","diagnosticcode":"Error Details Reported error: 550 5.1.10 RESOLVER.ADR.RecipientNotFound; Recipient not found by SMTP address lookup DSN generated by: NEKONYAAN0022.apcprd01.prod.exchangelabs.com","diagnostictype":"","deliverystatus":"5.1.10","timezoneoffset":"+0000","addresser":"neko@example.com","recipient":"kijitora-nyaan@neko.kyoto.example.jp","timestamp":1493508885}]
268
+ [{"catch":{"x-mailer":"","return-path":"neko@example.com"},"token":"7e81d3b9306fc7a7f3fb4c7b705189d6806d3d6b","lhost":"omls-1.kuins.neko.example.jp","rhost":"nekonyaan0022.apcprd01.prod.exchangelabs.com","alias":"","listid":"","reason":"userunknown","action":"failed","origin":"set-of-emails/maildir/bsd/lhost-office365-13.eml","subject":"にゃーん","messageid":"","replycode":"550","smtpagent":"Office365","hardbounce":true,"smtpcommand":"","destination":"neko.kyoto.example.jp","senderdomain":"example.com","feedbacktype":"","diagnosticcode":"Error Details Reported error: 550 5.1.10 RESOLVER.ADR.RecipientNotFound; Recipient not found by SMTP address lookup DSN generated by: NEKONYAAN0022.apcprd01.prod.exchangelabs.com","diagnostictype":"","deliverystatus":"5.1.10","timezoneoffset":"+0000","addresser":"neko@example.com","recipient":"kijitora-nyaan@neko.kyoto.example.jp","timestamp":1493508885}]
204
269
  ```
205
270
 
206
271
  Sisimai Specification
207
- ===============================================================================
208
-
272
+ ===================================================================================================
209
273
  Differences between Ruby version and Perl version
210
- -------------------------------------------------------------------------------
211
- 公開中のPerl版Sisimai(p5-sisimai)とRuby版Sisimai(rb-sisimai)は下記のような違いが
212
- あります。bounceHammer 2.7.13p3とSisimai(シシマイ)の違いについては
213
- [Sisimai | 違いの一覧](https://libsisimai.org/ja/diff/)をご覧ください。
274
+ ---------------------------------------------------------------------------------------------------
275
+ 公開中のPerl版Sisimai(p5-sisimai)とRuby版Sisimai(rb-sisimai)は下記のような違いがあります。bounceHammer
276
+ 2.7.13p3とSisimai(シシマイ)の違いについては[Sisimai | 違いの一覧](https://libsisimai.org/ja/diff/)を
277
+ ご覧ください。
214
278
 
215
279
  | 機能 | Ruby version | Perl version |
216
280
  |---------------------------------------------|----------------|---------------|
217
- | 動作環境 | Ruby 2.1 - 2.6 | Perl 5.10 - |
281
+ | 動作環境 | Ruby 2.4 - 2.7 | Perl 5.10 - |
218
282
  | | JRuby 9.0.4.0- | |
219
283
  | 解析精度の割合(2000通のメール)[1] | 1.00 | 1.00 |
220
284
  | メール解析速度(1000通のメール) | 2.22秒[2] | 1.35秒 |
221
285
  | インストール方法 | gem install | cpanm, cpm |
222
286
  | 依存モジュール数(コアモジュールを除く) | 1モジュール | 2モジュール |
223
- | LOC:ソースコードの行数 | 10600行 | 10800行 |
224
- | テスト件数(spec/,t/,xt/ディレクトリ) | 241000件 | 270000件 |
287
+ | LOC:ソースコードの行数 | 10300行 | 10500行 |
288
+ | テスト件数(spec/,t/,xt/ディレクトリ) | 453000件 | 311000件 |
225
289
  | ライセンス | 二条項BSD | 二条項BSD |
226
290
  | 開発会社によるサポート契約 | 提供中 | 提供中 |
227
291
 
@@ -229,29 +293,27 @@ Differences between Ruby version and Perl version
229
293
  2. Xeon E5-2640 2.5GHz x 2 cores | 5000 bogomips | 1GB RAM | Ruby 2.3.4p301
230
294
 
231
295
  Other spec of Sisimai
232
- -------------------------------------------------------------------------------
296
+ ---------------------------------------------------------------------------------------------------
233
297
  - [**解析モジュールの一覧**](https://libsisimai.org/ja/engine/)
234
298
  - [**バウンス理由の一覧**](https://libsisimai.org/ja/reason/)
235
299
  - [**Sisimai::Dataのデータ構造**](https://libsisimai.org/ja/data/)
236
300
 
237
301
  Contributing
238
- ===============================================================================
239
-
302
+ ===================================================================================================
240
303
  Bug report
241
- -------------------------------------------------------------------------------
242
- もしもSisimaiにバグを発見した場合は[Issues](https://github.com/sisimai/rb-sisimai/issues)
243
- にて連絡をいただけると助かります。
304
+ ---------------------------------------------------------------------------------------------------
305
+ もしもSisimaiにバグを発見した場合は[Issues](https://github.com/sisimai/rb-sisimai/issues)にて連絡を
306
+ いただけると助かります。
244
307
 
245
308
  Emails could not be parsed
246
- -------------------------------------------------------------------------------
309
+ ---------------------------------------------------------------------------------------------------
247
310
  Sisimaiで解析できないバウンスメールは
248
311
  [set-of-emails/to-be-debugged-because/sisimai-cannot-parse-yet](https://github.com/sisimai/set-of-emails/tree/master/to-be-debugged-because/sisimai-cannot-parse-yet)リポジトリに追加してPull-Requestを送ってください。
249
312
 
250
313
  Other Information
251
- ===============================================================================
252
-
314
+ ===================================================================================================
253
315
  Related sites
254
- -------------------------------------------------------------------------------
316
+ ---------------------------------------------------------------------------------------------------
255
317
  * __@libsisimai__ | [Sisimai on Twitter (@libsisimai)](https://twitter.com/libsisimai)
256
318
  * __libSISIMAI.ORG__ | [Sisimai | The successor to bounceHammer, Library to parse bounce mails](https://libsisimai.org/)
257
319
  * __Sisimai Blog__ | [blog.libsisimai.org](http://blog.libsisimai.org/)
@@ -262,7 +324,7 @@ Related sites
262
324
  * __Fixtures__ | [set-of-emails - Sample emails for "make test"](https://github.com/sisimai/set-of-emails)
263
325
 
264
326
  See also
265
- -------------------------------------------------------------------------------
327
+ ---------------------------------------------------------------------------------------------------
266
328
  * [README.md - README.md in English](https://github.com/sisimai/rb-sisimai/blob/master/README.md)
267
329
  * [RFC3463 - Enhanced Mail System Status Codes](https://tools.ietf.org/html/rfc3463)
268
330
  * [RFC3464 - An Extensible Message Format for Delivery Status Notifications](https://tools.ietf.org/html/rfc3464)
@@ -271,14 +333,14 @@ See also
271
333
  * [RFC5322 - Internet Message Format](https://tools.ietf.org/html/rfc5322)
272
334
 
273
335
  Author
274
- ===============================================================================
336
+ ===================================================================================================
275
337
  [@azumakuniyuki](https://twitter.com/azumakuniyuki)
276
338
 
277
339
  Copyright
278
- ===============================================================================
279
- Copyright (C) 2015-2022 azumakuniyuki, All Rights Reserved.
340
+ ===================================================================================================
341
+ Copyright (C) 2015-2023 azumakuniyuki, All Rights Reserved.
280
342
 
281
343
  License
282
- ===============================================================================
344
+ ===================================================================================================
283
345
  This software is distributed under The BSD 2-Clause License.
284
346