sisimai 5.0.2-java → 5.1.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 (168) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/codecovio.yml +35 -0
  3. data/.github/workflows/rake-test.yml +27 -24
  4. data/ChangeLog.md +62 -0
  5. data/Gemfile +2 -0
  6. data/README-JA.md +21 -18
  7. data/README.md +23 -20
  8. data/lib/sisimai/arf.rb +27 -8
  9. data/lib/sisimai/fact/json.rb +2 -2
  10. data/lib/sisimai/fact/yaml.rb +2 -2
  11. data/lib/sisimai/fact.rb +4 -19
  12. data/lib/sisimai/lhost/activehunter.rb +4 -3
  13. data/lib/sisimai/lhost/amavis.rb +4 -4
  14. data/lib/sisimai/lhost/amazonses.rb +6 -6
  15. data/lib/sisimai/lhost/amazonworkmail.rb +4 -4
  16. data/lib/sisimai/lhost/aol.rb +4 -4
  17. data/lib/sisimai/lhost/apachejames.rb +4 -4
  18. data/lib/sisimai/lhost/barracuda.rb +4 -4
  19. data/lib/sisimai/lhost/bigfoot.rb +4 -4
  20. data/lib/sisimai/lhost/biglobe.rb +4 -4
  21. data/lib/sisimai/lhost/courier.rb +4 -4
  22. data/lib/sisimai/lhost/domino.rb +4 -4
  23. data/lib/sisimai/lhost/dragonfly.rb +114 -0
  24. data/lib/sisimai/lhost/einsundeins.rb +4 -4
  25. data/lib/sisimai/lhost/exchange2003.rb +4 -3
  26. data/lib/sisimai/lhost/exchange2007.rb +4 -3
  27. data/lib/sisimai/lhost/exim.rb +4 -4
  28. data/lib/sisimai/lhost/ezweb.rb +4 -4
  29. data/lib/sisimai/lhost/facebook.rb +4 -4
  30. data/lib/sisimai/lhost/fml.rb +4 -4
  31. data/lib/sisimai/lhost/gmail.rb +4 -4
  32. data/lib/sisimai/lhost/gmx.rb +4 -4
  33. data/lib/sisimai/lhost/googlegroups.rb +4 -4
  34. data/lib/sisimai/lhost/gsuite.rb +4 -4
  35. data/lib/sisimai/lhost/imailserver.rb +4 -3
  36. data/lib/sisimai/lhost/interscanmss.rb +5 -4
  37. data/lib/sisimai/lhost/kddi.rb +4 -4
  38. data/lib/sisimai/lhost/mailfoundry.rb +4 -4
  39. data/lib/sisimai/lhost/mailmarshalsmtp.rb +6 -5
  40. data/lib/sisimai/lhost/mailru.rb +4 -4
  41. data/lib/sisimai/lhost/mcafee.rb +4 -4
  42. data/lib/sisimai/lhost/messagelabs.rb +4 -3
  43. data/lib/sisimai/lhost/messagingserver.rb +5 -4
  44. data/lib/sisimai/lhost/mfilter.rb +4 -4
  45. data/lib/sisimai/lhost/mxlogic.rb +3 -3
  46. data/lib/sisimai/lhost/notes.rb +4 -4
  47. data/lib/sisimai/lhost/office365.rb +4 -4
  48. data/lib/sisimai/lhost/opensmtpd.rb +9 -7
  49. data/lib/sisimai/lhost/outlook.rb +4 -4
  50. data/lib/sisimai/lhost/postfix.rb +4 -4
  51. data/lib/sisimai/lhost/powermta.rb +4 -4
  52. data/lib/sisimai/lhost/qmail.rb +10 -10
  53. data/lib/sisimai/lhost/receivingses.rb +4 -4
  54. data/lib/sisimai/lhost/sendgrid.rb +4 -4
  55. data/lib/sisimai/lhost/sendmail.rb +4 -4
  56. data/lib/sisimai/lhost/surfcontrol.rb +4 -4
  57. data/lib/sisimai/lhost/v5sendmail.rb +5 -4
  58. data/lib/sisimai/lhost/verizon.rb +4 -4
  59. data/lib/sisimai/lhost/x1.rb +3 -3
  60. data/lib/sisimai/lhost/x2.rb +3 -3
  61. data/lib/sisimai/lhost/x3.rb +3 -3
  62. data/lib/sisimai/lhost/x4.rb +3 -3
  63. data/lib/sisimai/lhost/x5.rb +3 -3
  64. data/lib/sisimai/lhost/x6.rb +3 -3
  65. data/lib/sisimai/lhost/yahoo.rb +4 -4
  66. data/lib/sisimai/lhost/yandex.rb +4 -4
  67. data/lib/sisimai/lhost/zoho.rb +4 -4
  68. data/lib/sisimai/lhost.rb +5 -5
  69. data/lib/sisimai/mail/maildir.rb +1 -1
  70. data/lib/sisimai/mail/stdin.rb +1 -1
  71. data/lib/sisimai/mda.rb +3 -3
  72. data/lib/sisimai/message.rb +9 -9
  73. data/lib/sisimai/order.rb +1 -0
  74. data/lib/sisimai/reason/badreputation.rb +1 -1
  75. data/lib/sisimai/reason/blocked.rb +1 -0
  76. data/lib/sisimai/reason/expired.rb +7 -0
  77. data/lib/sisimai/reason/filtered.rb +1 -0
  78. data/lib/sisimai/reason/mailboxfull.rb +3 -0
  79. data/lib/sisimai/reason/norelaying.rb +2 -0
  80. data/lib/sisimai/reason/rejected.rb +2 -1
  81. data/lib/sisimai/reason/suspend.rb +4 -0
  82. data/lib/sisimai/reason/userunknown.rb +4 -1
  83. data/lib/sisimai/reason.rb +8 -8
  84. data/lib/sisimai/rfc3464.rb +3 -3
  85. data/lib/sisimai/rfc3834.rb +2 -2
  86. data/lib/sisimai/rhost/apple.rb +92 -0
  87. data/lib/sisimai/rhost/cox.rb +81 -32
  88. data/lib/sisimai/rhost/franceptt.rb +84 -81
  89. data/lib/sisimai/rhost/godaddy.rb +205 -43
  90. data/lib/sisimai/rhost/google.rb +85 -72
  91. data/lib/sisimai/rhost/iua.rb +2 -2
  92. data/lib/sisimai/rhost/kddi.rb +6 -5
  93. data/lib/sisimai/rhost/microsoft.rb +12 -5
  94. data/lib/sisimai/rhost/mimecast.rb +15 -4
  95. data/lib/sisimai/rhost/nttdocomo.rb +4 -4
  96. data/lib/sisimai/rhost/spectrum.rb +100 -40
  97. data/lib/sisimai/rhost/tencent.rb +46 -25
  98. data/lib/sisimai/rhost/yahooinc.rb +110 -0
  99. data/lib/sisimai/rhost.rb +28 -35
  100. data/lib/sisimai/smtp/reply.rb +4 -3
  101. data/lib/sisimai/smtp/transcript.rb +3 -3
  102. data/lib/sisimai/version.rb +1 -1
  103. data/lib/sisimai.rb +0 -6
  104. data/set-of-emails/maildir/bsd/arf-26.eml +27 -0
  105. data/set-of-emails/maildir/bsd/lhost-dragonfly-01.eml +36 -0
  106. data/set-of-emails/maildir/bsd/lhost-dragonfly-02.eml +32 -0
  107. data/set-of-emails/maildir/bsd/lhost-dragonfly-03.eml +32 -0
  108. data/set-of-emails/maildir/bsd/lhost-dragonfly-04.eml +31 -0
  109. data/set-of-emails/maildir/bsd/lhost-dragonfly-05.eml +32 -0
  110. data/set-of-emails/maildir/bsd/lhost-dragonfly-06.eml +32 -0
  111. data/set-of-emails/maildir/bsd/lhost-dragonfly-07.eml +32 -0
  112. data/set-of-emails/maildir/bsd/lhost-dragonfly-08.eml +32 -0
  113. data/set-of-emails/maildir/bsd/lhost-dragonfly-09.eml +32 -0
  114. data/set-of-emails/maildir/bsd/lhost-dragonfly-10.eml +32 -0
  115. data/set-of-emails/maildir/bsd/lhost-dragonfly-11.eml +32 -0
  116. data/set-of-emails/maildir/bsd/lhost-dragonfly-12.eml +32 -0
  117. data/set-of-emails/maildir/bsd/lhost-dragonfly-13.eml +32 -0
  118. data/set-of-emails/maildir/bsd/lhost-dragonfly-14.eml +32 -0
  119. data/set-of-emails/maildir/bsd/lhost-dragonfly-15.eml +32 -0
  120. data/set-of-emails/maildir/bsd/lhost-dragonfly-16.eml +32 -0
  121. data/set-of-emails/maildir/bsd/lhost-dragonfly-17.eml +32 -0
  122. data/set-of-emails/maildir/bsd/lhost-dragonfly-18.eml +32 -0
  123. data/set-of-emails/maildir/bsd/lhost-dragonfly-19.eml +32 -0
  124. data/set-of-emails/maildir/bsd/lhost-dragonfly-20.eml +32 -0
  125. data/set-of-emails/maildir/bsd/lhost-dragonfly-21.eml +33 -0
  126. data/set-of-emails/maildir/bsd/lhost-dragonfly-22.eml +32 -0
  127. data/set-of-emails/maildir/bsd/lhost-dragonfly-23.eml +32 -0
  128. data/set-of-emails/maildir/bsd/lhost-dragonfly-24.eml +32 -0
  129. data/set-of-emails/maildir/bsd/lhost-dragonfly-25.eml +33 -0
  130. data/set-of-emails/maildir/bsd/lhost-dragonfly-26.eml +33 -0
  131. data/set-of-emails/maildir/bsd/lhost-dragonfly-27.eml +47 -0
  132. data/set-of-emails/maildir/bsd/lhost-dragonfly-28.eml +47 -0
  133. data/set-of-emails/maildir/bsd/lhost-dragonfly-29.eml +32 -0
  134. data/set-of-emails/maildir/bsd/lhost-dragonfly-30.eml +32 -0
  135. data/set-of-emails/maildir/bsd/lhost-opensmtpd-10.eml +58 -0
  136. data/set-of-emails/maildir/bsd/lhost-opensmtpd-11.eml +58 -0
  137. data/set-of-emails/maildir/bsd/lhost-opensmtpd-12.eml +62 -0
  138. data/set-of-emails/maildir/bsd/lhost-opensmtpd-13.eml +62 -0
  139. data/set-of-emails/maildir/bsd/lhost-opensmtpd-14.eml +58 -0
  140. data/set-of-emails/maildir/bsd/lhost-opensmtpd-15.eml +63 -0
  141. data/set-of-emails/maildir/bsd/lhost-opensmtpd-16.eml +62 -0
  142. data/set-of-emails/maildir/bsd/lhost-opensmtpd-17.eml +63 -0
  143. data/set-of-emails/maildir/bsd/lhost-qmail-11.eml +29 -0
  144. data/set-of-emails/maildir/bsd/lhost-qmail-12.eml +29 -0
  145. data/set-of-emails/maildir/bsd/lhost-qmail-13.eml +29 -0
  146. data/set-of-emails/maildir/bsd/lhost-qmail-14.eml +34 -0
  147. data/set-of-emails/maildir/bsd/lhost-qmail-15.eml +30 -0
  148. data/set-of-emails/maildir/bsd/lhost-qmail-16.eml +31 -0
  149. data/set-of-emails/maildir/bsd/lhost-qmail-17.eml +38 -0
  150. data/set-of-emails/maildir/bsd/lhost-qmail-18.eml +31 -0
  151. data/set-of-emails/maildir/bsd/lhost-qmail-19.eml +31 -0
  152. data/set-of-emails/maildir/bsd/lhost-qmail-20.eml +46 -0
  153. data/set-of-emails/maildir/bsd/lhost-qmail-21.eml +41 -0
  154. data/set-of-emails/maildir/bsd/lhost-qmail-22.eml +42 -0
  155. data/set-of-emails/maildir/bsd/lhost-qmail-23.eml +43 -0
  156. data/set-of-emails/maildir/bsd/lhost-qmail-24.eml +43 -0
  157. data/set-of-emails/maildir/bsd/lhost-qmail-25.eml +54 -0
  158. data/set-of-emails/maildir/bsd/rhost-apple-01.eml +79 -0
  159. data/set-of-emails/maildir/bsd/rhost-apple-02.eml +81 -0
  160. data/set-of-emails/maildir/bsd/rhost-apple-03.eml +75 -0
  161. data/set-of-emails/maildir/bsd/rhost-apple-04.eml +74 -0
  162. data/set-of-emails/maildir/bsd/rhost-microsoft-04.eml +86 -0
  163. data/set-of-emails/maildir/bsd/rhost-microsoft-05.eml +83 -0
  164. data/set-of-emails/maildir/bsd/rhost-yahooinc-01.eml +80 -0
  165. data/set-of-emails/maildir/bsd/rhost-yahooinc-02.eml +83 -0
  166. data/set-of-emails/maildir/bsd/rhost-yahooinc-03.eml +125 -0
  167. metadata +69 -3
  168. data/.travis.yml +0 -23
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6a197e428eb68e19937e14dfb13e98f47a80ca886951c2a4a7001f1ff6c76914
4
- data.tar.gz: f5ea7644d137db6c52eb94b914fa01869e08e63480a14bc1ef4addce6d9e1f40
3
+ metadata.gz: ddf0430c212f7bed1058a268f5dbbff54ecbcfdf7560259647552b6edf082e94
4
+ data.tar.gz: 978bceb01352802bc8c2f597a2eacca31309fd9b8be107229ca3e4598d849f04
5
5
  SHA512:
6
- metadata.gz: 5544060881b8a8950ce6183761481567a29be849ad06aa8c520486b3a8d0ef5d8725c89ac58b2e213e5d089be2b52f17b6d6d81a0bd865d5dfa2d69ca8a87fc7
7
- data.tar.gz: 6ed183fab34228e2403f807943c34e2fa17e3f845ed2391cd6fc57d95d9d4c421b4a4cb9c0eaadafde0ceec5f08c9a8ba01eebd61e1cad8bb4e1852d15ef8f35
6
+ metadata.gz: dc57b195ed29e0644c63a0217f8a4e0f6f7d055aef63e638c7ed484a575b61d4991a194ced77be9c8bf6520aebab565ac1aa33879b065a3695bd3635ceb6b478
7
+ data.tar.gz: 4217c94e42e8805db27369da7d1f4f5f052f8865cf28ae38910fe2262cd37073d5c8f938e2b774d2f352b21eea96999e7537c314b02751588ffae263476dc9ea
@@ -0,0 +1,35 @@
1
+ name: Upload coverage reports to Codecov
2
+ on:
3
+ push:
4
+ branches: ["5-stable"]
5
+ pull_request:
6
+ branches: ["*"]
7
+ jobs:
8
+ codecov:
9
+ runs-on: ubuntu-latest
10
+ steps:
11
+ - name: Checkout the repository(CRuby)
12
+ uses: actions/checkout@v4
13
+ with:
14
+ ref: ${{ github.event.pull_request.head.ref }}
15
+ - name: Setup CRuby
16
+ uses: ruby/setup-ruby@v1
17
+ with:
18
+ ruby-version: "3.3"
19
+ - name: Install minitest
20
+ run: gem install minitest -v 5.15.0
21
+ - name: Install oj
22
+ run: gem install oj -v 3.10.0
23
+ - name: Install bundle, rake, simplecov, and simplecov-cobertura
24
+ run: gem install bundle rake simplecov simplecov-cobertura
25
+ - name: Check the CRuby version
26
+ run: ruby -v
27
+ - name: Execute public tests with the coverage report
28
+ run: ruby -I./lib ./test/coverage.rb
29
+ - name: Run Codecov on GitHub Actions
30
+ uses: codecov/codecov-action@v4.4.0
31
+ with:
32
+ token: ${{ secrets.CODECOV_TOKEN }}
33
+ files: ./coverage/coverage.xml
34
+ verbose: true
35
+
@@ -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 }}
@@ -13,22 +13,24 @@ jobs:
13
13
  matrix:
14
14
  cruby: ["2.4", "3.3"]
15
15
  steps:
16
- - uses: actions/checkout@v4
16
+ - name: Checkout the repository(CRuby)
17
+ uses: actions/checkout@v4
18
+ with:
19
+ ref: ${{ github.event.pull_request.head.ref }}
17
20
  - name: Setup CRuby
18
21
  uses: ruby/setup-ruby@v1
19
22
  with:
20
23
  ruby-version: ${{ matrix.cruby }}
21
- - run: gem install minitest -v 5.15.0
22
- - run: gem install oj -v 3.10.0
23
- - run: gem install bundle rake
24
- - name: Cache the dependent gems
25
- uses: actions/cache@v2
26
- with:
27
- path: ./cache
28
- key: ${{ runner.os }}-ruby-${{ matrix.cruby }}-${{ hashFiles('./gem.snapshot') }}
29
- - run: ruby -v
30
- - run: rake publictest
31
- - run: rake privatetest
24
+ - name: Install minitest
25
+ run: gem install minitest -v 5.15.0
26
+ - name: Install oj
27
+ run: gem install oj -v 3.10.0
28
+ - name: Install bundle and rake
29
+ run: gem install bundle rake
30
+ - name: Check the CRuby version
31
+ run: ruby -v
32
+ - name: Execute public tests
33
+ run: rake publictest
32
34
  test-jruby:
33
35
  name: rake test with JRuby ${{ matrix.jruby }}
34
36
  runs-on: ubuntu-latest
@@ -37,19 +39,20 @@ jobs:
37
39
  matrix:
38
40
  jruby: ["jruby-9.2", "jruby-9.4"]
39
41
  steps:
40
- - uses: actions/checkout@v2
42
+ - name: Checkout the repository(JRuby)
43
+ uses: actions/checkout@v4
44
+ with:
45
+ ref: ${{ github.event.pull_request.head.ref }}
41
46
  - name: Setup JRuby
42
47
  uses: ruby/setup-ruby@v1
43
48
  with:
44
49
  ruby-version: ${{ matrix.jruby }}
45
- - run: gem install minitest -v 5.15.0
46
- - run: gem install bundle rake jrjackson
47
- - name: Cache the dependent gems
48
- uses: actions/cache@v2
49
- with:
50
- path: ./cache
51
- key: ${{ runner.os }}-ruby-${{ matrix.jruby }}-${{ hashFiles('./gem.snapshot') }}
52
- - run: ruby -v
53
- - run: rake publictest
54
- - run: rake privatetest
50
+ - name: Install minitest
51
+ run: gem install minitest -v 5.15.0
52
+ - name: Install bundle, rake, and jrjackson
53
+ run: gem install bundle rake jrjackson
54
+ - name: Check the JRuby version
55
+ run: jruby -v
56
+ - name: Execute public tests
57
+ run: rake publictest
55
58
 
data/ChangeLog.md CHANGED
@@ -3,6 +3,68 @@ 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
+
40
+ v5.0.3
41
+ ---------------------------------------------------------------------------------------------------
42
+ - release: "Wed, 22 May 2024 14:12:22 +0900 (JST)"
43
+ - version: "5.0.3"
44
+ - changes:
45
+ - Remove `.travis.yml` from this repository
46
+ - Follow updates in Gmail SMTP errors and codes on Apr 29 and May 10 at `Sisimai::Rhost::Google`
47
+ #275 #277 #283
48
+ - https://support.google.com/a/answer/3726730?hl=en
49
+ - https://github.com/azumakuniyuki/feb-2024-no-auth-no-entry/commit/1d6adede
50
+ - https://github.com/azumakuniyuki/feb-2024-no-auth-no-entry/commit/d477b178
51
+ - Implement SMTP error codes as follows: `4.7.23`, `4.7.30`, `4.7.32`, `5.7.29`, and `5.7.30`
52
+ - Shortened error message patterns to make them more adaptable to minor sentence changes.
53
+ - Multibyte characters in the code and comments have been replaced with ASCII characters #278
54
+ - #279 #280 Deal the Apple unsubscribe notification as an ARF message. Thanks to @mnmallea
55
+ - Add the following error message patterns returned from Exchange Online #281
56
+ - 4.4.317, 5.4.317: STARTTLS is required to send mail
57
+ - 4.4.318, 5.4.318: Connection was closed abruptly (SuspiciousRemoteServerError)
58
+ - #282 Added 16 error message patterns into the following reasons:
59
+ - `Blocked`
60
+ - `Expired`
61
+ - `Filtered`
62
+ - `MailboxFull`
63
+ - `NoRelaying`
64
+ - `Suspend`
65
+ - `UserUnknown`
66
+ - #286 Use Codecov for the coverage
67
+
6
68
  v5.0.2
7
69
  ---------------------------------------------------------------------------------------------------
8
70
  - release: "Wed, 13 Mar 2024 13:00:00 +0900 (JST)"
data/Gemfile CHANGED
@@ -7,5 +7,7 @@ group :development, :test do
7
7
  gem 'rake', :require => false
8
8
  gem 'minitest', :require => false
9
9
  gem 'coveralls', :require => false
10
+ gem 'simplecov', :require => false
11
+ gem 'simplecov-cobertura', :require => false
10
12
  end
11
13
 
data/README-JA.md CHANGED
@@ -1,8 +1,8 @@
1
1
  ![](https://libsisimai.org/static/images/logo/sisimai-x01.png)
2
2
  [![License](https://img.shields.io/badge/license-BSD%202--Clause-orange.svg)](https://github.com/sisimai/rb-sisimai/blob/master/LICENSE)
3
- [![Coverage Status](https://img.shields.io/coveralls/sisimai/rb-sisimai.svg)](https://coveralls.io/r/sisimai/rb-sisimai)
4
3
  [![Ruby](https://img.shields.io/badge/ruby-v2.4.0--v3.3.0-red.svg)](https://www.ruby-lang.org/)
5
4
  [![Gem Version](https://badge.fury.io/rb/sisimai.svg)](https://badge.fury.io/rb/sisimai)
5
+ [![codecov](https://codecov.io/github/sisimai/rb-sisimai/graph/badge.svg?token=YGkyluNWiZ)](https://codecov.io/github/sisimai/rb-sisimai)
6
6
 
7
7
  > [!IMPORTANT]
8
8
  > **2024年2月2日の時点でこのリポジトリのデフォルトブランチは[5-stable](https://github.com/sisimai/rb-sisimai/tree/5-stable)
@@ -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.2.gem (100%)
114
- Successfully installed sisimai-5.0.2
115
- Parsing documentation for sisimai-5.0.2
116
- Installing ri documentation for sisimai-5.0.2
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.2 built to pkg/sisimai-5.0.2.gem.
145
- sisimai (5.0.2) 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.2 built to pkg/sisimai-5.0.2-java.gem.
150
- sisimai (5.0.2) 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
@@ -1,8 +1,8 @@
1
1
  ![](https://libsisimai.org/static/images/logo/sisimai-x01.png)
2
2
  [![License](https://img.shields.io/badge/license-BSD%202--Clause-orange.svg)](https://github.com/sisimai/rb-sisimai/blob/master/LICENSE)
3
- [![Coverage Status](https://img.shields.io/coveralls/sisimai/rb-sisimai.svg)](https://coveralls.io/r/sisimai/rb-sisimai)
4
3
  [![Ruby](https://img.shields.io/badge/ruby-v2.4.0--v3.3.0-red.svg)](https://www.ruby-lang.org/)
5
4
  [![Gem Version](https://badge.fury.io/rb/sisimai.svg)](https://badge.fury.io/rb/sisimai)
5
+ [![codecov](https://codecov.io/github/sisimai/rb-sisimai/graph/badge.svg?token=YGkyluNWiZ)](https://codecov.io/github/sisimai/rb-sisimai)
6
6
 
7
7
  > [!IMPORTANT]
8
8
  > **The default branch of this repository is [5-stable](https://github.com/sisimai/rb-sisimai/tree/5-stable)
@@ -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
 
@@ -101,7 +101,7 @@ More details about system requirements are available at
101
101
 
102
102
  * [Ruby 2.4.0 or later](http://www.ruby-lang.org/)
103
103
  * [__oj | The fastest JSON parser and object serializer__](https://rubygems.org/gems/oj)
104
- * Also works on [JRuby 9.2 or later](http://jruby.org)~~
104
+ * Also works on [JRuby 9.2 or later](http://jruby.org)
105
105
  * [__jrjackson | A mostly native JRuby wrapper for the java jackson json processor jar__](https://rubygems.org/gems/jrjackson)
106
106
 
107
107
  Install
@@ -109,10 +109,10 @@ Install
109
109
  ### From RubyGems
110
110
  ```shell
111
111
  $ sudo gem install sisimai
112
- Fetching: sisimai-5.0.2.gem (100%)
113
- Successfully installed sisimai-5.0.2
114
- Parsing documentation for sisimai-5.0.2
115
- Installing ri documentation for sisimai-5.0.2
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.2 built to pkg/sisimai-5.0.2.gem.
144
- sisimai (5.0.2) 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.2 built to pkg/sisimai-5.0.2-java.gem.
149
- sisimai (5.0.2) 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
@@ -301,7 +301,7 @@ One-Liner
301
301
 
302
302
  Output example
303
303
  ---------------------------------------------------------------------------------------------------
304
- ![](https://libsisimai.org/static/images/demo/sisimai-5-cli-dump-p01.gif)
304
+ ![](https://libsisimai.org/static/images/demo/sisimai-5-cli-dump-r01.gif)
305
305
 
306
306
  ```json
307
307
  [
@@ -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'
@@ -37,13 +37,12 @@ module Sisimai
37
37
  # false: is not Feedback loop
38
38
  def is_arf(heads)
39
39
  return false unless heads
40
- match = false
41
40
 
42
- if Sisimai::String.aligned(heads['content-type'], ['report-type=', 'feedback-report'])
43
- # Content-Type: multipart/report; report-type=feedback-report; ...
44
- match = true
41
+ # Content-Type: multipart/report; report-type=feedback-report; ...
42
+ return true if Sisimai::String.aligned(heads['content-type'], ['report-type=', 'feedback-report'])
45
43
 
46
- elsif heads['content-type'].include?('multipart/mixed')
44
+ match = false
45
+ if heads['content-type'].include?('multipart/mixed')
47
46
  # Microsoft (Hotmail, MSN, Live, Outlook) uses its own report format.
48
47
  # Amazon SES Complaints bounces
49
48
  cv = Sisimai::Address.s3s4(heads['from'])
@@ -54,14 +53,16 @@ module Sisimai
54
53
  match = true if ReportFrom.any? { |a| cv.include?(a) }
55
54
  end
56
55
  end
56
+ match = true if heads['x-apple-unsubscribe'] == 'true'
57
+
57
58
  return match
58
59
  end
59
60
 
60
- # Detect an error for Feedback Loop
61
+ # @abstract Detect an error for Feedback Loop
61
62
  # @param [Hash] mhead Message headers of a bounce email
62
63
  # @param [String] mbody Message body of a bounce email
63
64
  # @return [Hash] Bounce data list and message/rfc822 part
64
- # @return [Nil] it failed to parse or the arguments are missing
65
+ # @return [Nil] it failed to decode or the arguments are missing
65
66
  def inquire(mhead, mbody)
66
67
  return nil unless self.is_arf(mhead)
67
68
 
@@ -280,6 +281,24 @@ module Sisimai
280
281
  arfheaders['rhost'] = mhead['subject'][mhead['subject'].rindex(' ') + 1, mhead['subject'].size]
281
282
  commondata['diagnosis'] =
282
283
  'This is a Microsoft email abuse report for an email message received from IP' << arfheaders['rhost'] + ' on ' << mhead['date']
284
+
285
+ elsif mhead['subject'].include?('unsubscribe')
286
+ # Apple Mail sent this email to unsubscribe from the message
287
+ while true
288
+ # Subject: unsubscribe
289
+ # Content-Type: text/plain; charset=UTF-8
290
+ # Auto-Submitted: auto-replied
291
+ # X-Apple-Unsubscribe: true
292
+ #
293
+ # Apple Mail sent this email to unsubscribe from the message
294
+ break unless mhead['x-apple-unsubscribe']
295
+ break unless mhead['x-apple-unsubscribe'] == 'true'
296
+ break unless mbody.include?('Apple Mail sent this email to unsubscribe from the message');
297
+
298
+ dscontents[-1]['recipient'] = Sisimai::Address.s3s4(mhead['from'])
299
+ dscontents[-1]['feedbacktype'] = 'opt-out'
300
+ break
301
+ end
283
302
  end
284
303
 
285
304
  dscontents.each do |e|
@@ -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