sisimai 5.0.3 → 5.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (157) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/codecovio.yml +3 -1
  3. data/.github/workflows/rake-test.yml +6 -2
  4. data/ChangeLog.md +34 -0
  5. data/README-JA.md +20 -17
  6. data/README.md +20 -17
  7. data/lib/sisimai/arf.rb +3 -3
  8. data/lib/sisimai/fact/json.rb +2 -2
  9. data/lib/sisimai/fact/yaml.rb +2 -2
  10. data/lib/sisimai/fact.rb +4 -19
  11. data/lib/sisimai/lhost/activehunter.rb +4 -3
  12. data/lib/sisimai/lhost/amavis.rb +4 -4
  13. data/lib/sisimai/lhost/amazonses.rb +6 -6
  14. data/lib/sisimai/lhost/amazonworkmail.rb +4 -4
  15. data/lib/sisimai/lhost/aol.rb +4 -4
  16. data/lib/sisimai/lhost/apachejames.rb +4 -4
  17. data/lib/sisimai/lhost/barracuda.rb +4 -4
  18. data/lib/sisimai/lhost/bigfoot.rb +4 -4
  19. data/lib/sisimai/lhost/biglobe.rb +4 -4
  20. data/lib/sisimai/lhost/courier.rb +4 -4
  21. data/lib/sisimai/lhost/domino.rb +4 -4
  22. data/lib/sisimai/lhost/dragonfly.rb +114 -0
  23. data/lib/sisimai/lhost/einsundeins.rb +4 -4
  24. data/lib/sisimai/lhost/exchange2003.rb +4 -3
  25. data/lib/sisimai/lhost/exchange2007.rb +4 -3
  26. data/lib/sisimai/lhost/exim.rb +4 -4
  27. data/lib/sisimai/lhost/ezweb.rb +4 -4
  28. data/lib/sisimai/lhost/facebook.rb +4 -4
  29. data/lib/sisimai/lhost/fml.rb +4 -4
  30. data/lib/sisimai/lhost/gmail.rb +4 -4
  31. data/lib/sisimai/lhost/gmx.rb +4 -4
  32. data/lib/sisimai/lhost/googlegroups.rb +4 -4
  33. data/lib/sisimai/lhost/gsuite.rb +4 -4
  34. data/lib/sisimai/lhost/imailserver.rb +4 -3
  35. data/lib/sisimai/lhost/interscanmss.rb +5 -4
  36. data/lib/sisimai/lhost/kddi.rb +4 -4
  37. data/lib/sisimai/lhost/mailfoundry.rb +4 -4
  38. data/lib/sisimai/lhost/mailmarshalsmtp.rb +5 -4
  39. data/lib/sisimai/lhost/mailru.rb +4 -4
  40. data/lib/sisimai/lhost/mcafee.rb +4 -4
  41. data/lib/sisimai/lhost/messagelabs.rb +4 -3
  42. data/lib/sisimai/lhost/messagingserver.rb +5 -4
  43. data/lib/sisimai/lhost/mfilter.rb +4 -4
  44. data/lib/sisimai/lhost/mxlogic.rb +3 -3
  45. data/lib/sisimai/lhost/notes.rb +4 -4
  46. data/lib/sisimai/lhost/office365.rb +4 -4
  47. data/lib/sisimai/lhost/opensmtpd.rb +9 -7
  48. data/lib/sisimai/lhost/outlook.rb +4 -4
  49. data/lib/sisimai/lhost/postfix.rb +4 -4
  50. data/lib/sisimai/lhost/powermta.rb +4 -4
  51. data/lib/sisimai/lhost/qmail.rb +10 -10
  52. data/lib/sisimai/lhost/receivingses.rb +4 -4
  53. data/lib/sisimai/lhost/sendgrid.rb +4 -4
  54. data/lib/sisimai/lhost/sendmail.rb +4 -4
  55. data/lib/sisimai/lhost/surfcontrol.rb +4 -4
  56. data/lib/sisimai/lhost/v5sendmail.rb +5 -4
  57. data/lib/sisimai/lhost/verizon.rb +4 -4
  58. data/lib/sisimai/lhost/x1.rb +3 -3
  59. data/lib/sisimai/lhost/x2.rb +3 -3
  60. data/lib/sisimai/lhost/x3.rb +3 -3
  61. data/lib/sisimai/lhost/x4.rb +3 -3
  62. data/lib/sisimai/lhost/x5.rb +3 -3
  63. data/lib/sisimai/lhost/x6.rb +3 -3
  64. data/lib/sisimai/lhost/yahoo.rb +4 -4
  65. data/lib/sisimai/lhost/yandex.rb +4 -4
  66. data/lib/sisimai/lhost/zoho.rb +4 -4
  67. data/lib/sisimai/lhost.rb +5 -5
  68. data/lib/sisimai/mail/maildir.rb +1 -1
  69. data/lib/sisimai/mail/stdin.rb +1 -1
  70. data/lib/sisimai/mda.rb +3 -3
  71. data/lib/sisimai/message.rb +8 -8
  72. data/lib/sisimai/order.rb +1 -0
  73. data/lib/sisimai/reason/badreputation.rb +1 -1
  74. data/lib/sisimai/reason/norelaying.rb +1 -0
  75. data/lib/sisimai/reason/rejected.rb +1 -0
  76. data/lib/sisimai/reason.rb +8 -8
  77. data/lib/sisimai/rfc3464.rb +3 -3
  78. data/lib/sisimai/rfc3834.rb +2 -2
  79. data/lib/sisimai/rhost/apple.rb +92 -0
  80. data/lib/sisimai/rhost/cox.rb +81 -32
  81. data/lib/sisimai/rhost/franceptt.rb +84 -81
  82. data/lib/sisimai/rhost/godaddy.rb +205 -43
  83. data/lib/sisimai/rhost/google.rb +3 -5
  84. data/lib/sisimai/rhost/iua.rb +2 -2
  85. data/lib/sisimai/rhost/kddi.rb +6 -5
  86. data/lib/sisimai/rhost/microsoft.rb +4 -5
  87. data/lib/sisimai/rhost/mimecast.rb +15 -4
  88. data/lib/sisimai/rhost/nttdocomo.rb +1 -1
  89. data/lib/sisimai/rhost/spectrum.rb +100 -40
  90. data/lib/sisimai/rhost/tencent.rb +46 -25
  91. data/lib/sisimai/rhost/yahooinc.rb +110 -0
  92. data/lib/sisimai/rhost.rb +28 -35
  93. data/lib/sisimai/smtp/reply.rb +4 -3
  94. data/lib/sisimai/smtp/transcript.rb +3 -3
  95. data/lib/sisimai/version.rb +1 -1
  96. data/lib/sisimai.rb +0 -6
  97. data/set-of-emails/maildir/bsd/lhost-dragonfly-01.eml +36 -0
  98. data/set-of-emails/maildir/bsd/lhost-dragonfly-02.eml +32 -0
  99. data/set-of-emails/maildir/bsd/lhost-dragonfly-03.eml +32 -0
  100. data/set-of-emails/maildir/bsd/lhost-dragonfly-04.eml +31 -0
  101. data/set-of-emails/maildir/bsd/lhost-dragonfly-05.eml +32 -0
  102. data/set-of-emails/maildir/bsd/lhost-dragonfly-06.eml +32 -0
  103. data/set-of-emails/maildir/bsd/lhost-dragonfly-07.eml +32 -0
  104. data/set-of-emails/maildir/bsd/lhost-dragonfly-08.eml +32 -0
  105. data/set-of-emails/maildir/bsd/lhost-dragonfly-09.eml +32 -0
  106. data/set-of-emails/maildir/bsd/lhost-dragonfly-10.eml +32 -0
  107. data/set-of-emails/maildir/bsd/lhost-dragonfly-11.eml +32 -0
  108. data/set-of-emails/maildir/bsd/lhost-dragonfly-12.eml +32 -0
  109. data/set-of-emails/maildir/bsd/lhost-dragonfly-13.eml +32 -0
  110. data/set-of-emails/maildir/bsd/lhost-dragonfly-14.eml +32 -0
  111. data/set-of-emails/maildir/bsd/lhost-dragonfly-15.eml +32 -0
  112. data/set-of-emails/maildir/bsd/lhost-dragonfly-16.eml +32 -0
  113. data/set-of-emails/maildir/bsd/lhost-dragonfly-17.eml +32 -0
  114. data/set-of-emails/maildir/bsd/lhost-dragonfly-18.eml +32 -0
  115. data/set-of-emails/maildir/bsd/lhost-dragonfly-19.eml +32 -0
  116. data/set-of-emails/maildir/bsd/lhost-dragonfly-20.eml +32 -0
  117. data/set-of-emails/maildir/bsd/lhost-dragonfly-21.eml +33 -0
  118. data/set-of-emails/maildir/bsd/lhost-dragonfly-22.eml +32 -0
  119. data/set-of-emails/maildir/bsd/lhost-dragonfly-23.eml +32 -0
  120. data/set-of-emails/maildir/bsd/lhost-dragonfly-24.eml +32 -0
  121. data/set-of-emails/maildir/bsd/lhost-dragonfly-25.eml +33 -0
  122. data/set-of-emails/maildir/bsd/lhost-dragonfly-26.eml +33 -0
  123. data/set-of-emails/maildir/bsd/lhost-dragonfly-27.eml +47 -0
  124. data/set-of-emails/maildir/bsd/lhost-dragonfly-28.eml +47 -0
  125. data/set-of-emails/maildir/bsd/lhost-dragonfly-29.eml +32 -0
  126. data/set-of-emails/maildir/bsd/lhost-dragonfly-30.eml +32 -0
  127. data/set-of-emails/maildir/bsd/lhost-opensmtpd-10.eml +58 -0
  128. data/set-of-emails/maildir/bsd/lhost-opensmtpd-11.eml +58 -0
  129. data/set-of-emails/maildir/bsd/lhost-opensmtpd-12.eml +62 -0
  130. data/set-of-emails/maildir/bsd/lhost-opensmtpd-13.eml +62 -0
  131. data/set-of-emails/maildir/bsd/lhost-opensmtpd-14.eml +58 -0
  132. data/set-of-emails/maildir/bsd/lhost-opensmtpd-15.eml +63 -0
  133. data/set-of-emails/maildir/bsd/lhost-opensmtpd-16.eml +62 -0
  134. data/set-of-emails/maildir/bsd/lhost-opensmtpd-17.eml +63 -0
  135. data/set-of-emails/maildir/bsd/lhost-qmail-11.eml +29 -0
  136. data/set-of-emails/maildir/bsd/lhost-qmail-12.eml +29 -0
  137. data/set-of-emails/maildir/bsd/lhost-qmail-13.eml +29 -0
  138. data/set-of-emails/maildir/bsd/lhost-qmail-14.eml +34 -0
  139. data/set-of-emails/maildir/bsd/lhost-qmail-15.eml +30 -0
  140. data/set-of-emails/maildir/bsd/lhost-qmail-16.eml +31 -0
  141. data/set-of-emails/maildir/bsd/lhost-qmail-17.eml +38 -0
  142. data/set-of-emails/maildir/bsd/lhost-qmail-18.eml +31 -0
  143. data/set-of-emails/maildir/bsd/lhost-qmail-19.eml +31 -0
  144. data/set-of-emails/maildir/bsd/lhost-qmail-20.eml +46 -0
  145. data/set-of-emails/maildir/bsd/lhost-qmail-21.eml +41 -0
  146. data/set-of-emails/maildir/bsd/lhost-qmail-22.eml +42 -0
  147. data/set-of-emails/maildir/bsd/lhost-qmail-23.eml +43 -0
  148. data/set-of-emails/maildir/bsd/lhost-qmail-24.eml +43 -0
  149. data/set-of-emails/maildir/bsd/lhost-qmail-25.eml +54 -0
  150. data/set-of-emails/maildir/bsd/rhost-apple-01.eml +79 -0
  151. data/set-of-emails/maildir/bsd/rhost-apple-02.eml +81 -0
  152. data/set-of-emails/maildir/bsd/rhost-apple-03.eml +75 -0
  153. data/set-of-emails/maildir/bsd/rhost-apple-04.eml +74 -0
  154. data/set-of-emails/maildir/bsd/rhost-yahooinc-01.eml +80 -0
  155. data/set-of-emails/maildir/bsd/rhost-yahooinc-02.eml +83 -0
  156. data/set-of-emails/maildir/bsd/rhost-yahooinc-03.eml +125 -0
  157. metadata +65 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0eec943ed278f831725b0284faaee55afd03e0a9c1c843ff6ea5b293e557fe9b
4
- data.tar.gz: 2491ec5afc09217998fad153605ccabf5fbe6ae66fceecc70b5798f17c0120f7
3
+ metadata.gz: 5b60a0c3953cb8512fed6e5e71e63780f8b6b681576f3a2b25787e7a98b42c36
4
+ data.tar.gz: 722e000aa41aa57e4efced1cf9ce3fb1c9658a725a8a027b26b58a07b31b7408
5
5
  SHA512:
6
- metadata.gz: 35d9e9b9360bd120b9ba66d3a316536796834eb260f29ab0d0054466ea71c998eb315051fc820cbecd5676d212d410ae28c2402ed7457609d3211b425798898d
7
- data.tar.gz: '09e8845d7dd05b8d1b3931438e755411427c720e0e25f31c70c37d4bb460659fdf74110096cfda7a6a968d1f1af7423fc262f88f159952ff7637cc72bdc8f3dc'
6
+ metadata.gz: 7ff66c2010a0eb055c34a2827f9d5824641a463c574264594d422f54e484cbe002eef9500ae1cff2878906f15e694b77f0a74e70f2cd14cf89dfd16517b4d256
7
+ data.tar.gz: 87a333ddb94b2f0a37c8921858e6f9be775e8f7d85a4c220fcf4a827748d230de0992049ee8e58f81e449525274290a51e7b6b7aadc93dde988e12baf654e3d3
@@ -3,13 +3,15 @@ on:
3
3
  push:
4
4
  branches: ["5-stable"]
5
5
  pull_request:
6
- branches: ["5-stable"]
6
+ branches: ["*"]
7
7
  jobs:
8
8
  codecov:
9
9
  runs-on: ubuntu-latest
10
10
  steps:
11
11
  - name: Checkout the repository(CRuby)
12
12
  uses: actions/checkout@v4
13
+ with:
14
+ ref: ${{ github.event.pull_request.head.ref }}
13
15
  - name: Setup CRuby
14
16
  uses: ruby/setup-ruby@v1
15
17
  with:
@@ -3,7 +3,7 @@ on:
3
3
  push:
4
4
  branches: ["5-stable"]
5
5
  pull_request:
6
- branches: ["5-stable"]
6
+ branches: ["*"]
7
7
  jobs:
8
8
  test-cruby:
9
9
  name: rake test with CRuby ${{ matrix.cruby }}
@@ -15,6 +15,8 @@ jobs:
15
15
  steps:
16
16
  - name: Checkout the repository(CRuby)
17
17
  uses: actions/checkout@v4
18
+ with:
19
+ ref: ${{ github.event.pull_request.head.ref }}
18
20
  - name: Setup CRuby
19
21
  uses: ruby/setup-ruby@v1
20
22
  with:
@@ -38,7 +40,9 @@ jobs:
38
40
  jruby: ["jruby-9.2", "jruby-9.4"]
39
41
  steps:
40
42
  - name: Checkout the repository(JRuby)
41
- uses: actions/checkout@v2
43
+ uses: actions/checkout@v4
44
+ with:
45
+ ref: ${{ github.event.pull_request.head.ref }}
42
46
  - name: Setup JRuby
43
47
  uses: ruby/setup-ruby@v1
44
48
  with:
data/ChangeLog.md CHANGED
@@ -3,6 +3,40 @@ RELEASE NOTES for Ruby version of Sisimai
3
3
  - releases: "https://github.com/sisimai/rb-sisimai/releases"
4
4
  - download: "https://rubygems.org/gems/sisimai"
5
5
 
6
+ v5.1.0
7
+ ---------------------------------------------------------------------------------------------------
8
+ - release: "Mon, 1 Jul 2024 12:02:22 +0900 (JST)"
9
+ - version: "5.1.0"
10
+ - changes:
11
+ - #297 #300 Remove v4 compatible features
12
+ - `Sisimai.make()`
13
+ - `Sisimai::Fact.softbounce()`
14
+ - #292 #293 Implement `Sisimai::Lhost::DragonFly`
15
+ - Add 30 sample emails generated by DMA: DrangonFly Mail Agent (lhost-dragonfly-*.eml)
16
+ - #288 Consolidate error messages scattered under `Sisimai::Reason::*` into `Sisimai::Rhost::*`
17
+ classes for each email service #289
18
+ - `Sisimai::Rhost::YahooInc` for https://senders.yahooinc.com/smtp-error-codes/
19
+ - `Sisimai::Rhost::Apple` for iCloud Mail
20
+ - The following sample emails in `set-of-emails/maildir/bsd`:
21
+ - 3 sample emails (rhost-yahooinc-0[1-3].eml)
22
+ - 4 sample emails (rhost-apple-0[1-4].eml)
23
+ - #290 #291 #295 Sisimai::Rhost improvements
24
+ - Update the error code list and error message patterns in the following classes:
25
+ - `Sisimai::Rhost::Cox`
26
+ - `Sisimai::Rhost::FrancePTT`
27
+ - `Sisimai::Rhost::GoDaddy`
28
+ - `Sisimai::Rhost::Mimecast`
29
+ - `Sisimai::Rhost::Spectrum`
30
+ - `Sisimai::Rhost::Tencent`
31
+ - Each error message should be compared with the lowercased string
32
+ - Follow any updates of the SMTP error code and message list in each email services related to
33
+ `AuthFailure`, `BadReputation`, `RequirePTR`, and other error reasons added at v5
34
+ - No longer needed method `Sisimai::Rhost.match` method has been removed
35
+ - #296 Add 8 sample emails (lhost-opensmtpd-1[0-7].eml)generated by OpenSMTPD 6.8.0p2
36
+ - #298 Add 9 sample emails (lhost-qmail-1[1-9].eml) generated by notqmail 1.08
37
+ - #299 Add 6 sample emails (lhost-qmail-2[0-5].eml) generated by indimail 3.0.7
38
+ - Sisimai works on Ruby 3.3.3
39
+
6
40
  v5.0.3
7
41
  ---------------------------------------------------------------------------------------------------
8
42
  - release: "Wed, 22 May 2024 14:12:22 +0900 (JST)"
data/README-JA.md CHANGED
@@ -78,7 +78,7 @@ The key features of Sisimai
78
78
  * `gem install`
79
79
  * `git clone && make`
80
80
  * __高い解析精度__
81
- * [70種類のMTAs/MDAs/ESPs](https://libsisimai.org/en/engine/)に対応
81
+ * [73種類のMTAs/MDAs/ESPs](https://libsisimai.org/en/engine/)に対応
82
82
  * Feedback Loop(ARF)にも対応
83
83
  * [34種類のバウンス理由](https://libsisimai.org/en/reason/)を検出
84
84
 
@@ -110,10 +110,10 @@ Install
110
110
  ### From RubyGems.org
111
111
  ```shell
112
112
  $ sudo gem install sisimai
113
- Fetching: sisimai-5.0.3.gem (100%)
114
- Successfully installed sisimai-5.0.3
115
- Parsing documentation for sisimai-5.0.3
116
- Installing ri documentation for sisimai-5.0.3
113
+ Fetching: sisimai-5.1.0.gem (100%)
114
+ Successfully installed sisimai-5.1.0
115
+ Parsing documentation for sisimai-5.1.0
116
+ Installing ri documentation for sisimai-5.1.0
117
117
  Done installing documentation for sisimai after 6 seconds
118
118
  1 gem installed
119
119
  ```
@@ -141,13 +141,13 @@ if [ -d "/usr/local/jr" ]; then \
141
141
  ...
142
142
  3 gems installed
143
143
  /opt/local/bin/rake install
144
- sisimai 5.0.3 built to pkg/sisimai-5.0.3.gem.
145
- sisimai (5.0.3) installed.
144
+ sisimai 5.1.0 built to pkg/sisimai-5.1.0.gem.
145
+ sisimai (5.1.0) installed.
146
146
  if [ -d "/usr/local/jr" ]; then \
147
147
  PATH="/usr/local/jr/bin:$PATH" /usr/local/jr/bin/rake install; \
148
148
  fi
149
- sisimai 5.0.3 built to pkg/sisimai-5.0.3-java.gem.
150
- sisimai (5.0.3) installed.
149
+ sisimai 5.1.0 built to pkg/sisimai-5.1.0-java.gem.
150
+ sisimai (5.1.0) installed.
151
151
  ```
152
152
 
153
153
  Usage
@@ -351,12 +351,12 @@ Sisimai 5.0.0から**Ruby 2.4以上**が必要になります。
351
351
  | 動作環境(CRuby) | 2.1 - | **2.4** or later |
352
352
  | 動作環境(JRuby) | 9.0.4.0 - 9.1.17.0 | **9.2** or later |
353
353
  | 元メールファイルを操作可能なコールバック機能 | なし | あり[^3] |
354
- | 解析エンジン(MTA/ESPモジュール)の数 | 68 | 70 |
354
+ | 解析エンジン(MTA/ESPモジュール)の数 | 68 | 73 |
355
355
  | 検出可能なバウンス理由の数 | 29 | 34 |
356
356
  | 依存Gem数(Ruby Standard Gemsを除く) | 1 Gem | 1 Gem |
357
- | ソースコードの行数 | 10,800 行 | 11,370 行 |
357
+ | ソースコードの行数 | 10,800 行 | 11,660 行 |
358
358
  | テストフレームワーク | rspec | minitest |
359
- | テスト件数(spec/またはtest/ディレクトリ) | 311,000 件 | 338,000 件 |
359
+ | テスト件数(spec/またはtest/ディレクトリ) | 311,000 件 | 414,000 件 |
360
360
  | 1秒間に解析できるバウンスメール数[^4] | 231 通 | 305 通 |
361
361
  | ライセンス | 2条項BSD | 2条項BSD |
362
362
  | 開発会社による商用サポート | 提供中 | 提供中 |
@@ -389,11 +389,14 @@ MTA/ESP Module Names
389
389
  Sisimai 5で3個のESPモジュール名(解析エンジン)が変更になりました。詳細はMTA/ESPモジュールの一覧/
390
390
  [LIBSISIMAI.ORG/JA/ENGINE](https://libsisimai.org/ja/engine/)を参照してください。
391
391
 
392
- | `Sisimai::Rhost::` | Sisimai 4 | Sisimai 5 |
393
- |------------------------------------------------------|--------------------|---------------------|
394
- | Microsoft Exchange Online | `ExchangeOnline` | `Microsoft` |
395
- | Google Workspace | `GoogleApps` | `Google` |
396
- | Tencent | `TencentQQ` | `Tencent` |
392
+ | `Sisimai::` | Sisimai 4 | Sisimai 5 |
393
+ |-------------------------------------------------|-------------------------|---------------------|
394
+ | Apple iCloud Mail (added at v5.1.0) | なし | `Rhost::Apple` |
395
+ | Microsoft Exchange Online | `Rhost::ExchangeOnline` | `Rhost::Microsoft` |
396
+ | Google Workspace | `Rhost::GoogleApps` | `Rhost::Google` |
397
+ | Tencent | `Rhost::TencentQQ` | `Rhost::Tencent` |
398
+ | Yahoo Mail (added at v5.1.0) | なし | `Rhost::YahooInc` |
399
+ | DragonFly Mail Agent (added at v5.1.0) | なし | `Lhost::DragonFly` |
397
400
 
398
401
  Bounce Reasons
399
402
  ---------------------------------------------------------------------------------------------------
data/README.md CHANGED
@@ -80,7 +80,7 @@ The key features of Sisimai
80
80
  * `gem install`
81
81
  * `git clone && make`
82
82
  * __High Precision of Analysis__
83
- * Support [70 MTAs/MDAs/ESPs](https://libsisimai.org/en/engine/)
83
+ * Support [73 MTAs/MDAs/ESPs](https://libsisimai.org/en/engine/)
84
84
  * Support Feedback Loop Message(ARF)
85
85
  * Can detect [34 bounce reasons](https://libsisimai.org/en/reason/)
86
86
 
@@ -109,10 +109,10 @@ Install
109
109
  ### From RubyGems
110
110
  ```shell
111
111
  $ sudo gem install sisimai
112
- Fetching: sisimai-5.0.3.gem (100%)
113
- Successfully installed sisimai-5.0.3
114
- Parsing documentation for sisimai-5.0.3
115
- Installing ri documentation for sisimai-5.0.3
112
+ Fetching: sisimai-5.1.0.gem (100%)
113
+ Successfully installed sisimai-5.1.0
114
+ Parsing documentation for sisimai-5.1.0
115
+ Installing ri documentation for sisimai-5.1.0
116
116
  Done installing documentation for sisimai after 6 seconds
117
117
  1 gem installed
118
118
  ```
@@ -140,13 +140,13 @@ if [ -d "/usr/local/jr" ]; then \
140
140
  ...
141
141
  3 gems installed
142
142
  /opt/local/bin/rake install
143
- sisimai 5.0.3 built to pkg/sisimai-5.0.3.gem.
144
- sisimai (5.0.3) installed.
143
+ sisimai 5.1.0 built to pkg/sisimai-5.1.0.gem.
144
+ sisimai (5.1.0) installed.
145
145
  if [ -d "/usr/local/jr" ]; then \
146
146
  PATH="/usr/local/jr/bin:$PATH" /usr/local/jr/bin/rake install; \
147
147
  fi
148
- sisimai 5.0.3 built to pkg/sisimai-5.0.3-java.gem.
149
- sisimai (5.0.3) installed.
148
+ sisimai 5.1.0 built to pkg/sisimai-5.1.0-java.gem.
149
+ sisimai (5.1.0) installed.
150
150
  ```
151
151
 
152
152
  Usage
@@ -350,12 +350,12 @@ Beginning with v5.0.0, Sisimai requires **Ruby 2.4.0 or later.**
350
350
  | System requirements (CRuby) | 2.1 - 3.3.0 | **2.4** or later |
351
351
  | System requirements (JRuby) | 9.0.4.0 - 9.1.17.0 | **9.2** or later |
352
352
  | Callback feature for the original email file | N/A | Available[^3] |
353
- | The number of MTA/ESP modules | 68 | 70 |
353
+ | The number of MTA/ESP modules | 68 | 73 |
354
354
  | The number of detectable bounce reasons | 29 | 34 |
355
355
  | Dependencies (Except Ruby Standard Gems) | 1 gem | 1 gem |
356
- | Source lines of code | 10,300 lines | 11,370 lines |
356
+ | Source lines of code | 10,300 lines | 11,660 lines |
357
357
  | Test frameworks | rspec | minitest |
358
- | The number of tests in spec/ or test/ directory | 311,000 tests | 338,000 tests |
358
+ | The number of tests in spec/ or test/ directory | 311,000 tests | 414,000 tests |
359
359
  | The number of bounce emails decoded/sec (CRuby)[^4] | 231 emails | 305 emails |
360
360
  | License | 2 Clause BSD | 2 Caluse BSD |
361
361
  | Commercial support | Available | Available |
@@ -390,11 +390,14 @@ MTA/ESP Module Names
390
390
  Three ESP module names have been changed at Sisimai 5. The list of the all MTA/ESP modules is
391
391
  available at [LIBSISIMAI.ORG/EN/ENGINE](https://libsisimai.org/en/engine/)
392
392
 
393
- | `Sisimai::Rhost::` | Sisimai 4 | Sisimai 5 |
394
- |------------------------------------------------------|--------------------|---------------------|
395
- | Microsoft Exchange Online | `ExchangeOnline` | `Microsoft` |
396
- | Google Workspace | `GoogleApps` | `Google` |
397
- | Tencent | `TencentQQ` | `Tencent` |
393
+ | `Sisimai::` | Sisimai 4 | Sisimai 5 |
394
+ |-------------------------------------------------|-------------------------|---------------------|
395
+ | Apple iCloud Mail (added at v5.1.0) | None | `Rhost::Apple` |
396
+ | Microsoft Exchange Online | `Rhost::ExchangeOnline` | `Rhost::Microsoft` |
397
+ | Google Workspace | `Rhost::GoogleApps` | `Rhost::Google` |
398
+ | Tencent | `Rhost::TencentQQ` | `Rhost::Tencent` |
399
+ | Yahoo Mail (added at v5.1.0) | None | `Rhost::YahooInc` |
400
+ | DragonFly Mail Agent (added at v5.1.0) | None | `Lhost::DragonFly` |
398
401
 
399
402
  Bounce Reasons
400
403
  ---------------------------------------------------------------------------------------------------
data/lib/sisimai/arf.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  module Sisimai
2
- # Sisimai::ARF is a parser for email returned as a FeedBack Loop report message.
2
+ # Sisimai::ARF is a decoder for the email returned as a FeedBack Loop report message.
3
3
  module ARF
4
4
  class << self
5
5
  require 'sisimai/lhost'
@@ -58,11 +58,11 @@ module Sisimai
58
58
  return match
59
59
  end
60
60
 
61
- # Detect an error for Feedback Loop
61
+ # @abstract Detect an error for Feedback Loop
62
62
  # @param [Hash] mhead Message headers of a bounce email
63
63
  # @param [String] mbody Message body of a bounce email
64
64
  # @return [Hash] Bounce data list and message/rfc822 part
65
- # @return [Nil] it failed to parse or the arguments are missing
65
+ # @return [Nil] it failed to decode or the arguments are missing
66
66
  def inquire(mhead, mbody)
67
67
  return nil unless self.is_arf(mhead)
68
68
 
@@ -1,7 +1,7 @@
1
1
  module Sisimai
2
2
  class Fact
3
- # Sisimai::Fact::JSON dumps parsed data object as a JSON format. This class and method should be
4
- # called from the parent object "Sisimai::Fact".
3
+ # Sisimai::Fact::JSON dumps decoded data object as a JSON format. This class and method should
4
+ # be called from the parent object "Sisimai::Fact".
5
5
  module JSON
6
6
  class << self
7
7
  # Serializer (JSON)
@@ -1,7 +1,7 @@
1
1
  module Sisimai
2
2
  class Fact
3
- # Sisimai::Fact::YAML dumps parsed data object as a YAML format. This class and method should be
4
- # called from the parent object "Sisimai::Fact".
3
+ # Sisimai::Fact::YAML dumps decoded data object as a YAML format. This class and method should
4
+ # be called from the parent object "Sisimai::Fact".
5
5
  module YAML
6
6
  class << self
7
7
  require 'yaml'
data/lib/sisimai/fact.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  module Sisimai
2
- # Sisimai::Fact generate parsed data
2
+ # Sisimai::Fact generate the list of decoded bounce data
3
3
  class Fact
4
4
  require 'sisimai/message'
5
5
  require 'sisimai/rfc1894'
@@ -383,15 +383,9 @@ module Sisimai
383
383
  # REASON: Decide the reason of email bounce
384
384
  if o['reason'].empty? || RetryIndex[o['reason']]
385
385
  # The value of "reason" is empty or is needed to check with other values again
386
- re = ''; de = o['destination']
387
- re = Sisimai::Rhost.get(o) if Sisimai::Rhost.match(o['rhost'])
388
- if re.empty?
389
- # Failed to detect a bounce reason by the value of "rhost"
390
- re = Sisimai::Rhost.get(o, de) if Sisimai::Rhost.match(de)
391
- re = Sisimai::Reason.get(o) if re.empty?
392
- re = 'undefined' if re.empty?
393
- end
394
- o['reason'] = re
386
+ re = o['reason'].empty? ? 'undefined' : o['reason']
387
+ o['reason'] = Sisimai::Rhost.get(o) || Sisimai::Reason.get(o)
388
+ o['reason'] = re if o['reason'].empty?
395
389
  end
396
390
 
397
391
  # HARDBOUNCE: Set the value of "hardbounce", default value of "bouncebounce" is false
@@ -443,15 +437,6 @@ module Sisimai
443
437
  return listoffact
444
438
  end
445
439
 
446
- # Emulate "softbounce" accessor for the backward compatible
447
- # @return [Integer]
448
- def softbounce
449
- warn ' ***warning: Sisimai::Fact.softbounce will be removed at v5.1.0. Use Sisimai::Fact.hardbounce instead'
450
- return 0 if self.hardbounce
451
- return -1 if self.reason == 'delivered' || self.reason == 'feedback' || self.reason == 'vacation'
452
- return 1
453
- end
454
-
455
440
  # Convert from Sisimai::Fact object to a Hash
456
441
  # @return [Hash] Hashed data
457
442
  def damn
@@ -1,5 +1,6 @@
1
1
  module Sisimai::Lhost
2
- # Sisimai::Lhost::Activehunter parses a bounce email which created by TransWARE Active!hunter.
2
+ # Sisimai::Lhost::Activehunter decodes a bounce email which created by QUALITIA Active!hunter
3
+ # https://www.qualitia.com/jp/product/ah/function.html.
3
4
  # Methods in the module are called from only Sisimai::Message.
4
5
  module Activehunter
5
6
  class << self
@@ -9,11 +10,11 @@ module Sisimai::Lhost
9
10
  Boundaries = ['Content-Type: message/rfc822'].freeze
10
11
  StartingOf = { message: [' ----- The following addresses had permanent fatal errors -----'] }.freeze
11
12
 
12
- # Parse bounce messages from TransWARE Active!hunter
13
+ # @abstract decodes the bounce message from QUALITIA Active!hunter
13
14
  # @param [Hash] mhead Message headers of a bounce email
14
15
  # @param [String] mbody Message body of a bounce email
15
16
  # @return [Hash] Bounce data list and message/rfc822 part
16
- # @return [Nil] it failed to parse or the arguments are missing
17
+ # @return [Nil] it failed to decode or the arguments are missing
17
18
  def inquire(mhead, mbody)
18
19
  # :from => %r/\A"MAILER-DAEMON"/,
19
20
  # :subject => %r/FAILURE NOTICE :/,
@@ -1,6 +1,6 @@
1
1
  module Sisimai::Lhost
2
- # Sisimai::Lhost::Amavis parses a bounce email which created by amavsid-new. Methods in the module
3
- # are called from only Sisimai::Message.
2
+ # Sisimai::Lhost::Amavis decodes a bounce email which created by amavsid-new.
3
+ # Methods in the module are called from only Sisimai::Message.
4
4
  module Amavis
5
5
  class << self
6
6
  require 'sisimai/lhost'
@@ -68,11 +68,11 @@ module Sisimai::Lhost
68
68
  ],
69
69
  }.freeze
70
70
 
71
- # Parse bounce messages from amavisd-new
71
+ # @abstract Decodes the bounce message from amavisd-new
72
72
  # @param [Hash] mhead Message headers of a bounce email
73
73
  # @param [String] mbody Message body of a bounce email
74
74
  # @return [Hash] Bounce data list and message/rfc822 part
75
- # @return [Nil] it failed to parse or the arguments are missing
75
+ # @return [Nil] it failed to decode or the arguments are missing
76
76
  # @since v4.25.0
77
77
  def inquire(mhead, mbody)
78
78
  # From: "Content-filter at neko1.example.jp" <postmaster@neko1.example.jp>
@@ -1,6 +1,6 @@
1
1
  module Sisimai::Lhost
2
- # Sisimai::Lhost::AmazonSES parses a bounce email which created by Amazon Simple Email Service.
3
- # Methods in the module are called from only Sisimai::Message.
2
+ # Sisimai::Lhost::AmazonSES decodes a bounce email which created by Amazon Simple Email Service
3
+ # https://aws.amazon.com/ses/. Methods in the module are called from only Sisimai::Message.
4
4
  module AmazonSES
5
5
  class << self
6
6
  require 'sisimai/lhost'
@@ -13,11 +13,11 @@ module Sisimai::Lhost
13
13
  }.freeze
14
14
  MessagesOf = { 'expired' => ['Delivery expired'] }.freeze
15
15
 
16
- # Parse bounce messages from Amazon SES
16
+ # @abstract Decodes the bounce message from Amazon SES
17
17
  # @param [Hash] mhead Message headers of a bounce email
18
18
  # @param [String] mbody Message body of a bounce email
19
19
  # @return [Hash] Bounce data list and message/rfc822 part
20
- # @return [Nil] it failed to parse or the arguments are missing
20
+ # @return [Nil] it failed to decode or the arguments are missing
21
21
  def inquire(mhead, mbody)
22
22
  dscontents = [Sisimai::Lhost.DELIVERYSTATUS]
23
23
  recipients = 0 # (Integer) The number of 'Final-Recipient' header
@@ -292,7 +292,7 @@ module Sisimai::Lhost
292
292
  end
293
293
 
294
294
  if recipients == 0 && mbody =~ /notificationType/
295
- # Try to parse with Sisimai::Lhost::AmazonSES module
295
+ # Try to decode with Sisimai::Lhost::AmazonSES module
296
296
  j = Sisimai::Lhost::AmazonSES.json(mhead, mbody)
297
297
 
298
298
  if j['ds'].is_a? Array
@@ -328,7 +328,7 @@ module Sisimai::Lhost
328
328
  end
329
329
 
330
330
  return { 'ds' => dscontents, 'rfc822' => emailparts[1] }
331
- end # END of a parser for email message
331
+ end # END of the decoder for the email message
332
332
 
333
333
  end
334
334
  def description; return 'Amazon SES(Sending): https://aws.amazon.com/ses/'; end
@@ -1,6 +1,6 @@
1
1
  module Sisimai::Lhost
2
- # Sisimai::Lhost::AmazonWorkMail parses a bounce email which created by Amazon WorkMail. Methods
3
- # in the module are called from only Sisimai::Message.
2
+ # Sisimai::Lhost::AmazonWorkMail decodes a bounce email which created by Amazon WorkMail https://aws.amazon.com/workmail/.
3
+ # Methods in the module are called from only Sisimai::Message.
4
4
  module AmazonWorkMail
5
5
  class << self
6
6
  require 'sisimai/lhost'
@@ -10,11 +10,11 @@ module Sisimai::Lhost
10
10
  Boundaries = ['Content-Type: message/rfc822'].freeze
11
11
  StartingOf = { message: ['Technical report:'] }.freeze
12
12
 
13
- # Parse bounce messages from Amazon WorkMail
13
+ # @abstract Decodes the bounce message from Amazon WorkMail
14
14
  # @param [Hash] mhead Message headers of a bounce email
15
15
  # @param [String] mbody Message body of a bounce email
16
16
  # @return [Hash] Bounce data list and message/rfc822 part
17
- # @return [Nil] it failed to parse or the arguments are missing
17
+ # @return [Nil] it failed to decode or the arguments are missing
18
18
  def inquire(mhead, mbody)
19
19
  # X-Mailer: Amazon WorkMail
20
20
  # X-Original-Mailer: Amazon WorkMail
@@ -1,6 +1,6 @@
1
1
  module Sisimai::Lhost
2
- # Sisimai::Lhost::Aol parses a bounce email which created by Aol Mail. Methods in the module are
3
- # called from only Sisimai::Message.
2
+ # Sisimai::Lhost::Aol decodes a bounce email which created by Aol Mail https://mail.aol.com/.
3
+ # Methods in the module are called from only Sisimai::Message.
4
4
  module Aol
5
5
  class << self
6
6
  require 'sisimai/lhost'
@@ -13,11 +13,11 @@ module Sisimai::Lhost
13
13
  'notaccept' => ['type=MX: Malformed or unexpected name server reply'],
14
14
  }.freeze
15
15
 
16
- # Parse bounce messages from Aol Mail
16
+ # @abstract Decodes the bounce message from Aol Mail
17
17
  # @param [Hash] mhead Message headers of a bounce email
18
18
  # @param [String] mbody Message body of a bounce email
19
19
  # @return [Hash] Bounce data list and message/rfc822 part
20
- # @return [Nil] it failed to parse or the arguments are missing
20
+ # @return [Nil] it failed to decode or the arguments are missing
21
21
  def inquire(mhead, mbody)
22
22
  # X-AOL-IP: 192.0.2.135
23
23
  # X-AOL-VSS-INFO: 5600.1067/98281
@@ -1,6 +1,6 @@
1
1
  module Sisimai::Lhost
2
- # Sisimai::Lhost::ApacheJames parses a bounce email which created by ApacheJames. Methods in the
3
- # module are called from only Sisimai::Message.
2
+ # Sisimai::Lhost::ApacheJames decodes a bounce email which created by ApacheJames https://james.apache.org/.
3
+ # Methods in the module are called from only Sisimai::Message.
4
4
  module ApacheJames
5
5
  class << self
6
6
  require 'sisimai/lhost'
@@ -15,11 +15,11 @@ module Sisimai::Lhost
15
15
  error: ['Error message below:'],
16
16
  }.freeze
17
17
 
18
- # Parse bounce messages from Apache James
18
+ # @abstract decodes the bounce message from Apache James
19
19
  # @param [Hash] mhead Message headers of a bounce email
20
20
  # @param [String] mbody Message body of a bounce email
21
21
  # @return [Hash] Bounce data list and message/rfc822 part
22
- # @return [Nil] it failed to parse or the arguments are missing
22
+ # @return [Nil] it failed to decode or the arguments are missing
23
23
  def inquire(mhead, mbody)
24
24
  match = 0
25
25
  match += 1 if mhead['subject'] == '[BOUNCE]'
@@ -1,6 +1,6 @@
1
1
  module Sisimai::Lhost
2
- # Sisimai::Lhost::Barracuda parses a bounce email which created by Barracuda. Methods in the module
3
- # are called from only Sisimai::Message.
2
+ # Sisimai::Lhost::Barracuda decodes a bounce email which created by Barracuda https://www.barracuda.com/.
3
+ # Methods in the module are called from only Sisimai::Message.
4
4
  module Barracuda
5
5
  class << self
6
6
  require 'sisimai/lhost'
@@ -9,11 +9,11 @@ module Sisimai::Lhost
9
9
  Boundaries = ['Content-Type: text/rfc822-headers'].freeze
10
10
  StartingOf = { message: ['Your message to:'] }.freeze
11
11
 
12
- # Parse bounce messages from Barracuda
12
+ # @abstract Decodes the bounce message from Barracuda
13
13
  # @param [Hash] mhead Message headers of a bounce email
14
14
  # @param [String] mbody Message body of a bounce email
15
15
  # @return [Hash] Bounce data list and message/rfc822 part
16
- # @return [Nil] it failed to parse or the arguments are missing
16
+ # @return [Nil] it failed to decode or the arguments are missing
17
17
  # @since v4.25.6
18
18
  def inquire(mhead, mbody)
19
19
  # Subject: **Message you sent blocked by our bulk email filter**
@@ -1,6 +1,6 @@
1
1
  module Sisimai::Lhost
2
- # Sisimai::Lhost::Bigfoot parses a bounce email which created by Bigfoot. Methods in the module
3
- # are called from only Sisimai::Message.
2
+ # Sisimai::Lhost::Bigfoot decodes a bounce email which created by Bigfoot https://www.bigfoot.com/.
3
+ # Methods in the module are called from only Sisimai::Message.
4
4
  module Bigfoot
5
5
  class << self
6
6
  require 'sisimai/lhost'
@@ -9,11 +9,11 @@ module Sisimai::Lhost
9
9
  Boundaries = ['Content-Type: message/partial'].freeze
10
10
  MarkingsOf = { message: ' ----- Transcript of session follows -----' }.freeze
11
11
 
12
- # Parse bounce messages from Bigfoot
12
+ # @abstract Decodes the bounce message from Bigfoot
13
13
  # @param [Hash] mhead Message headers of a bounce email
14
14
  # @param [String] mbody Message body of a bounce email
15
15
  # @return [Hash] Bounce data list and message/rfc822 part
16
- # @return [Nil] it failed to parse or the arguments are missing
16
+ # @return [Nil] it failed to decode or the arguments are missing
17
17
  def inquire(mhead, mbody)
18
18
  # :subject => %r/\AReturned mail: /,
19
19
  match = 0
@@ -1,6 +1,6 @@
1
1
  module Sisimai::Lhost
2
- # Sisimai::Lhost::Biglobe parses a bounce email which created by BIGLOBE. Methods in the module
3
- # are called from only Sisimai::Message.
2
+ # Sisimai::Lhost::Biglobe decodes a bounce email which created by BIGLOBE https://www.biglobe.ne.jp/.
3
+ # Methods in the module are called from only Sisimai::Message.
4
4
  module Biglobe
5
5
  class << self
6
6
  require 'sisimai/lhost'
@@ -16,11 +16,11 @@ module Sisimai::Lhost
16
16
  'mailboxfull' => ["The number of messages in recipient's mailbox exceeded the local limit."],
17
17
  }.freeze
18
18
 
19
- # Parse bounce messages from Biglobe
19
+ # @asbtract Decodes the bounce message from Biglobe
20
20
  # @param [Hash] mhead Message headers of a bounce email
21
21
  # @param [String] mbody Message body of a bounce email
22
22
  # @return [Hash] Bounce data list and message/rfc822 part
23
- # @return [Nil] it failed to parse or the arguments are missing
23
+ # @return [Nil] it failed to decode or the arguments are missing
24
24
  def inquire(mhead, mbody)
25
25
  return nil unless mhead['from'].include?('postmaster@')
26
26
  return nil unless %w[biglobe inacatv tmtv ttv].any? { |a| mhead['from'].include?('@' + a + '.ne.jp') }
@@ -1,6 +1,6 @@
1
1
  module Sisimai::Lhost
2
- # Sisimai::Lhost::Courier parses a bounce email which created by Courier MTA. Methods in the module
3
- # are called from only Sisimai::Message.
2
+ # Sisimai::Lhost::Courier decodes a bounce email which created by Courier MTA https://www.courier-mta.org/.
3
+ # Methods in the module are called from only Sisimai::Message.
4
4
  module Courier
5
5
  class << self
6
6
  require 'sisimai/lhost'
@@ -23,11 +23,11 @@ module Sisimai::Lhost
23
23
  'networkerror' => ['DNS lookup failed.'],
24
24
  }.freeze
25
25
 
26
- # Parse bounce messages from Courier MTA
26
+ # @abstract Decodes the bounce message from Courier MTA
27
27
  # @param [Hash] mhead Message headers of a bounce email
28
28
  # @param [String] mbody Message body of a bounce email
29
29
  # @return [Hash] Bounce data list and message/rfc822 part
30
- # @return [Nil] it failed to parse or the arguments are missing
30
+ # @return [Nil] it failed to decode or the arguments are missing
31
31
  def inquire(mhead, mbody)
32
32
  match = 0
33
33
  match += 1 if mhead['from'].include?('Courier mail server at ')
@@ -1,6 +1,6 @@
1
1
  module Sisimai::Lhost
2
- # Sisimai::Lhost::Domino parses a bounce email which created by IBM Domino Server. Methods in the
3
- # module are called from only Sisimai::Message.
2
+ # Sisimai::Lhost::Domino decodes a bounce email which created by HCL Domino https://www.hcl-software.com/domino.
3
+ # Methods in the module are called from only Sisimai::Message.
4
4
  module Domino
5
5
  class << self
6
6
  require 'sisimai/lhost'
@@ -20,11 +20,11 @@ module Sisimai::Lhost
20
20
  'systemerror' => ['Several matches found in Domino Directory'],
21
21
  }.freeze
22
22
 
23
- # Parse bounce messages from IBM Domino Server
23
+ # @abstract Decodes the bounce message from HCL Domino (formerly IBM Domino Server (formerly Lotus Domino))
24
24
  # @param [Hash] mhead Message headers of a bounce email
25
25
  # @param [String] mbody Message body of a bounce email
26
26
  # @return [Hash] Bounce data list and message/rfc822 part
27
- # @return [Nil] it failed to parse or the arguments are missing
27
+ # @return [Nil] it failed to decode or the arguments are missing
28
28
  def inquire(mhead, mbody)
29
29
  return nil unless mhead['subject'].start_with?('DELIVERY FAILURE:', 'DELIVERY_FAILURE:')
30
30