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.
- 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: ddf0430c212f7bed1058a268f5dbbff54ecbcfdf7560259647552b6edf082e94
|
|
4
|
+
data.tar.gz: 978bceb01352802bc8c2f597a2eacca31309fd9b8be107229ca3e4598d849f04
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
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: ["
|
|
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
|

|
|
2
2
|
[](https://github.com/sisimai/rb-sisimai/blob/master/LICENSE)
|
|
3
|
-
[](https://coveralls.io/r/sisimai/rb-sisimai)
|
|
4
3
|
[](https://www.ruby-lang.org/)
|
|
5
4
|
[](https://badge.fury.io/rb/sisimai)
|
|
5
|
+
[](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
|

|
|
2
2
|
[](https://github.com/sisimai/rb-sisimai/blob/master/LICENSE)
|
|
3
|
-
[](https://coveralls.io/r/sisimai/rb-sisimai)
|
|
4
3
|
[](https://www.ruby-lang.org/)
|
|
5
4
|
[](https://badge.fury.io/rb/sisimai)
|
|
5
|
+
[](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
|
-

|
|
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
|