sisimai 5.0.2 → 5.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/codecovio.yml +35 -0
- data/.github/workflows/rake-test.yml +27 -24
- data/ChangeLog.md +62 -0
- data/Gemfile +2 -0
- data/README-JA.md +21 -18
- data/README.md +23 -20
- data/lib/sisimai/arf.rb +27 -8
- data/lib/sisimai/fact/json.rb +2 -2
- data/lib/sisimai/fact/yaml.rb +2 -2
- data/lib/sisimai/fact.rb +4 -19
- data/lib/sisimai/lhost/activehunter.rb +4 -3
- data/lib/sisimai/lhost/amavis.rb +4 -4
- data/lib/sisimai/lhost/amazonses.rb +6 -6
- data/lib/sisimai/lhost/amazonworkmail.rb +4 -4
- data/lib/sisimai/lhost/aol.rb +4 -4
- data/lib/sisimai/lhost/apachejames.rb +4 -4
- data/lib/sisimai/lhost/barracuda.rb +4 -4
- data/lib/sisimai/lhost/bigfoot.rb +4 -4
- data/lib/sisimai/lhost/biglobe.rb +4 -4
- data/lib/sisimai/lhost/courier.rb +4 -4
- data/lib/sisimai/lhost/domino.rb +4 -4
- data/lib/sisimai/lhost/dragonfly.rb +114 -0
- data/lib/sisimai/lhost/einsundeins.rb +4 -4
- data/lib/sisimai/lhost/exchange2003.rb +4 -3
- data/lib/sisimai/lhost/exchange2007.rb +4 -3
- data/lib/sisimai/lhost/exim.rb +4 -4
- data/lib/sisimai/lhost/ezweb.rb +4 -4
- data/lib/sisimai/lhost/facebook.rb +4 -4
- data/lib/sisimai/lhost/fml.rb +4 -4
- data/lib/sisimai/lhost/gmail.rb +4 -4
- data/lib/sisimai/lhost/gmx.rb +4 -4
- data/lib/sisimai/lhost/googlegroups.rb +4 -4
- data/lib/sisimai/lhost/gsuite.rb +4 -4
- data/lib/sisimai/lhost/imailserver.rb +4 -3
- data/lib/sisimai/lhost/interscanmss.rb +5 -4
- data/lib/sisimai/lhost/kddi.rb +4 -4
- data/lib/sisimai/lhost/mailfoundry.rb +4 -4
- data/lib/sisimai/lhost/mailmarshalsmtp.rb +6 -5
- data/lib/sisimai/lhost/mailru.rb +4 -4
- data/lib/sisimai/lhost/mcafee.rb +4 -4
- data/lib/sisimai/lhost/messagelabs.rb +4 -3
- data/lib/sisimai/lhost/messagingserver.rb +5 -4
- data/lib/sisimai/lhost/mfilter.rb +4 -4
- data/lib/sisimai/lhost/mxlogic.rb +3 -3
- data/lib/sisimai/lhost/notes.rb +4 -4
- data/lib/sisimai/lhost/office365.rb +4 -4
- data/lib/sisimai/lhost/opensmtpd.rb +9 -7
- data/lib/sisimai/lhost/outlook.rb +4 -4
- data/lib/sisimai/lhost/postfix.rb +4 -4
- data/lib/sisimai/lhost/powermta.rb +4 -4
- data/lib/sisimai/lhost/qmail.rb +10 -10
- data/lib/sisimai/lhost/receivingses.rb +4 -4
- data/lib/sisimai/lhost/sendgrid.rb +4 -4
- data/lib/sisimai/lhost/sendmail.rb +4 -4
- data/lib/sisimai/lhost/surfcontrol.rb +4 -4
- data/lib/sisimai/lhost/v5sendmail.rb +5 -4
- data/lib/sisimai/lhost/verizon.rb +4 -4
- data/lib/sisimai/lhost/x1.rb +3 -3
- data/lib/sisimai/lhost/x2.rb +3 -3
- data/lib/sisimai/lhost/x3.rb +3 -3
- data/lib/sisimai/lhost/x4.rb +3 -3
- data/lib/sisimai/lhost/x5.rb +3 -3
- data/lib/sisimai/lhost/x6.rb +3 -3
- data/lib/sisimai/lhost/yahoo.rb +4 -4
- data/lib/sisimai/lhost/yandex.rb +4 -4
- data/lib/sisimai/lhost/zoho.rb +4 -4
- data/lib/sisimai/lhost.rb +5 -5
- data/lib/sisimai/mail/maildir.rb +1 -1
- data/lib/sisimai/mail/stdin.rb +1 -1
- data/lib/sisimai/mda.rb +3 -3
- data/lib/sisimai/message.rb +9 -9
- data/lib/sisimai/order.rb +1 -0
- data/lib/sisimai/reason/badreputation.rb +1 -1
- data/lib/sisimai/reason/blocked.rb +1 -0
- data/lib/sisimai/reason/expired.rb +7 -0
- data/lib/sisimai/reason/filtered.rb +1 -0
- data/lib/sisimai/reason/mailboxfull.rb +3 -0
- data/lib/sisimai/reason/norelaying.rb +2 -0
- data/lib/sisimai/reason/rejected.rb +2 -1
- data/lib/sisimai/reason/suspend.rb +4 -0
- data/lib/sisimai/reason/userunknown.rb +4 -1
- data/lib/sisimai/reason.rb +8 -8
- data/lib/sisimai/rfc3464.rb +3 -3
- data/lib/sisimai/rfc3834.rb +2 -2
- data/lib/sisimai/rhost/apple.rb +92 -0
- data/lib/sisimai/rhost/cox.rb +81 -32
- data/lib/sisimai/rhost/franceptt.rb +84 -81
- data/lib/sisimai/rhost/godaddy.rb +205 -43
- data/lib/sisimai/rhost/google.rb +85 -72
- data/lib/sisimai/rhost/iua.rb +2 -2
- data/lib/sisimai/rhost/kddi.rb +6 -5
- data/lib/sisimai/rhost/microsoft.rb +12 -5
- data/lib/sisimai/rhost/mimecast.rb +15 -4
- data/lib/sisimai/rhost/nttdocomo.rb +4 -4
- data/lib/sisimai/rhost/spectrum.rb +100 -40
- data/lib/sisimai/rhost/tencent.rb +46 -25
- data/lib/sisimai/rhost/yahooinc.rb +110 -0
- data/lib/sisimai/rhost.rb +28 -35
- data/lib/sisimai/smtp/reply.rb +4 -3
- data/lib/sisimai/smtp/transcript.rb +3 -3
- data/lib/sisimai/version.rb +1 -1
- data/lib/sisimai.rb +0 -6
- data/set-of-emails/maildir/bsd/arf-26.eml +27 -0
- data/set-of-emails/maildir/bsd/lhost-dragonfly-01.eml +36 -0
- data/set-of-emails/maildir/bsd/lhost-dragonfly-02.eml +32 -0
- data/set-of-emails/maildir/bsd/lhost-dragonfly-03.eml +32 -0
- data/set-of-emails/maildir/bsd/lhost-dragonfly-04.eml +31 -0
- data/set-of-emails/maildir/bsd/lhost-dragonfly-05.eml +32 -0
- data/set-of-emails/maildir/bsd/lhost-dragonfly-06.eml +32 -0
- data/set-of-emails/maildir/bsd/lhost-dragonfly-07.eml +32 -0
- data/set-of-emails/maildir/bsd/lhost-dragonfly-08.eml +32 -0
- data/set-of-emails/maildir/bsd/lhost-dragonfly-09.eml +32 -0
- data/set-of-emails/maildir/bsd/lhost-dragonfly-10.eml +32 -0
- data/set-of-emails/maildir/bsd/lhost-dragonfly-11.eml +32 -0
- data/set-of-emails/maildir/bsd/lhost-dragonfly-12.eml +32 -0
- data/set-of-emails/maildir/bsd/lhost-dragonfly-13.eml +32 -0
- data/set-of-emails/maildir/bsd/lhost-dragonfly-14.eml +32 -0
- data/set-of-emails/maildir/bsd/lhost-dragonfly-15.eml +32 -0
- data/set-of-emails/maildir/bsd/lhost-dragonfly-16.eml +32 -0
- data/set-of-emails/maildir/bsd/lhost-dragonfly-17.eml +32 -0
- data/set-of-emails/maildir/bsd/lhost-dragonfly-18.eml +32 -0
- data/set-of-emails/maildir/bsd/lhost-dragonfly-19.eml +32 -0
- data/set-of-emails/maildir/bsd/lhost-dragonfly-20.eml +32 -0
- data/set-of-emails/maildir/bsd/lhost-dragonfly-21.eml +33 -0
- data/set-of-emails/maildir/bsd/lhost-dragonfly-22.eml +32 -0
- data/set-of-emails/maildir/bsd/lhost-dragonfly-23.eml +32 -0
- data/set-of-emails/maildir/bsd/lhost-dragonfly-24.eml +32 -0
- data/set-of-emails/maildir/bsd/lhost-dragonfly-25.eml +33 -0
- data/set-of-emails/maildir/bsd/lhost-dragonfly-26.eml +33 -0
- data/set-of-emails/maildir/bsd/lhost-dragonfly-27.eml +47 -0
- data/set-of-emails/maildir/bsd/lhost-dragonfly-28.eml +47 -0
- data/set-of-emails/maildir/bsd/lhost-dragonfly-29.eml +32 -0
- data/set-of-emails/maildir/bsd/lhost-dragonfly-30.eml +32 -0
- data/set-of-emails/maildir/bsd/lhost-opensmtpd-10.eml +58 -0
- data/set-of-emails/maildir/bsd/lhost-opensmtpd-11.eml +58 -0
- data/set-of-emails/maildir/bsd/lhost-opensmtpd-12.eml +62 -0
- data/set-of-emails/maildir/bsd/lhost-opensmtpd-13.eml +62 -0
- data/set-of-emails/maildir/bsd/lhost-opensmtpd-14.eml +58 -0
- data/set-of-emails/maildir/bsd/lhost-opensmtpd-15.eml +63 -0
- data/set-of-emails/maildir/bsd/lhost-opensmtpd-16.eml +62 -0
- data/set-of-emails/maildir/bsd/lhost-opensmtpd-17.eml +63 -0
- data/set-of-emails/maildir/bsd/lhost-qmail-11.eml +29 -0
- data/set-of-emails/maildir/bsd/lhost-qmail-12.eml +29 -0
- data/set-of-emails/maildir/bsd/lhost-qmail-13.eml +29 -0
- data/set-of-emails/maildir/bsd/lhost-qmail-14.eml +34 -0
- data/set-of-emails/maildir/bsd/lhost-qmail-15.eml +30 -0
- data/set-of-emails/maildir/bsd/lhost-qmail-16.eml +31 -0
- data/set-of-emails/maildir/bsd/lhost-qmail-17.eml +38 -0
- data/set-of-emails/maildir/bsd/lhost-qmail-18.eml +31 -0
- data/set-of-emails/maildir/bsd/lhost-qmail-19.eml +31 -0
- data/set-of-emails/maildir/bsd/lhost-qmail-20.eml +46 -0
- data/set-of-emails/maildir/bsd/lhost-qmail-21.eml +41 -0
- data/set-of-emails/maildir/bsd/lhost-qmail-22.eml +42 -0
- data/set-of-emails/maildir/bsd/lhost-qmail-23.eml +43 -0
- data/set-of-emails/maildir/bsd/lhost-qmail-24.eml +43 -0
- data/set-of-emails/maildir/bsd/lhost-qmail-25.eml +54 -0
- data/set-of-emails/maildir/bsd/rhost-apple-01.eml +79 -0
- data/set-of-emails/maildir/bsd/rhost-apple-02.eml +81 -0
- data/set-of-emails/maildir/bsd/rhost-apple-03.eml +75 -0
- data/set-of-emails/maildir/bsd/rhost-apple-04.eml +74 -0
- data/set-of-emails/maildir/bsd/rhost-microsoft-04.eml +86 -0
- data/set-of-emails/maildir/bsd/rhost-microsoft-05.eml +83 -0
- data/set-of-emails/maildir/bsd/rhost-yahooinc-01.eml +80 -0
- data/set-of-emails/maildir/bsd/rhost-yahooinc-02.eml +83 -0
- data/set-of-emails/maildir/bsd/rhost-yahooinc-03.eml +125 -0
- metadata +69 -3
- data/.travis.yml +0 -23
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5b60a0c3953cb8512fed6e5e71e63780f8b6b681576f3a2b25787e7a98b42c36
|
4
|
+
data.tar.gz: 722e000aa41aa57e4efced1cf9ce3fb1c9658a725a8a027b26b58a07b31b7408
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7ff66c2010a0eb055c34a2827f9d5824641a463c574264594d422f54e484cbe002eef9500ae1cff2878906f15e694b77f0a74e70f2cd14cf89dfd16517b4d256
|
7
|
+
data.tar.gz: 87a333ddb94b2f0a37c8921858e6f9be775e8f7d85a4c220fcf4a827748d230de0992049ee8e58f81e449525274290a51e7b6b7aadc93dde988e12baf654e3d3
|
@@ -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: ["
|
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
|
-
-
|
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
|
-
-
|
22
|
-
|
23
|
-
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
-
|
30
|
-
|
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
|
-
-
|
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
|
-
-
|
46
|
-
|
47
|
-
- name:
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
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
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
|
-
* [
|
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.
|
114
|
-
Successfully installed sisimai-5.0
|
115
|
-
Parsing documentation for sisimai-5.0
|
116
|
-
Installing ri documentation for sisimai-5.0
|
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
|
145
|
-
sisimai (5.0
|
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
|
150
|
-
sisimai (5.0
|
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 |
|
354
|
+
| 解析エンジン(MTA/ESPモジュール)の数 | 68 | 73 |
|
355
355
|
| 検出可能なバウンス理由の数 | 29 | 34 |
|
356
356
|
| 依存Gem数(Ruby Standard Gemsを除く) | 1 Gem | 1 Gem |
|
357
|
-
| ソースコードの行数 | 10,800 行 | 11,
|
357
|
+
| ソースコードの行数 | 10,800 行 | 11,660 行 |
|
358
358
|
| テストフレームワーク | rspec | minitest |
|
359
|
-
| テスト件数(spec/またはtest/ディレクトリ) | 311,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
|
393
|
-
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
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 [
|
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.
|
113
|
-
Successfully installed sisimai-5.0
|
114
|
-
Parsing documentation for sisimai-5.0
|
115
|
-
Installing ri documentation for sisimai-5.0
|
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
|
144
|
-
sisimai (5.0
|
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
|
149
|
-
sisimai (5.0
|
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-
|
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 |
|
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,
|
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 |
|
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
|
394
|
-
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
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
|
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
|
-
|
43
|
-
|
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
|
-
|
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
|
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|
|
data/lib/sisimai/fact/json.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
module Sisimai
|
2
2
|
class Fact
|
3
|
-
# Sisimai::Fact::JSON dumps
|
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)
|
data/lib/sisimai/fact/yaml.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
module Sisimai
|
2
2
|
class Fact
|
3
|
-
# Sisimai::Fact::YAML dumps
|
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
|
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 = ''
|
387
|
-
|
388
|
-
if
|
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
|
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
|
-
#
|
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
|
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 :/,
|
data/lib/sisimai/lhost/amavis.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
module Sisimai::Lhost
|
2
|
-
# Sisimai::Lhost::Amavis
|
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
|
-
#
|
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
|
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
|
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
|
-
#
|
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
|
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
|
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
|
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
|
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
|
-
#
|
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
|
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
|