sisimai 5.0.2-java → 5.1.0-java

Sign up to get free protection for your applications and to get access to all the features.
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