sisimai 4.25.17 → 5.0.0
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/.travis.yml +3 -3
- data/ANALYTICAL-PRECISION +2 -2
- data/Benchmarks.mk +3 -3
- data/CONTRIBUTING +1 -1
- data/ChangeLog.md +406 -407
- data/Developers.mk +5 -6
- data/Gemfile +1 -1
- data/Makefile +12 -12
- data/README-JA.md +142 -94
- data/README.md +282 -150
- data/Rakefile +9 -3
- data/Repository.mk +2 -3
- data/lib/sisimai/address.rb +118 -74
- data/lib/sisimai/arf.rb +84 -82
- data/lib/sisimai/datetime.rb +5 -52
- data/lib/sisimai/{data → fact}/json.rb +7 -9
- data/lib/sisimai/fact/yaml.rb +31 -0
- data/lib/sisimai/fact.rb +468 -0
- data/lib/sisimai/lhost/activehunter.rb +12 -14
- data/lib/sisimai/lhost/amavis.rb +11 -14
- data/lib/sisimai/lhost/amazonses.rb +37 -41
- data/lib/sisimai/lhost/amazonworkmail.rb +15 -18
- data/lib/sisimai/lhost/aol.rb +12 -14
- data/lib/sisimai/lhost/apachejames.rb +19 -21
- data/lib/sisimai/lhost/barracuda.rb +10 -12
- data/lib/sisimai/lhost/bigfoot.rb +21 -21
- data/lib/sisimai/lhost/biglobe.rb +15 -16
- data/lib/sisimai/lhost/courier.rb +20 -20
- data/lib/sisimai/lhost/domino.rb +23 -19
- data/lib/sisimai/lhost/einsundeins.rb +20 -16
- data/lib/sisimai/lhost/exchange2003.rb +30 -29
- data/lib/sisimai/lhost/exchange2007.rb +70 -58
- data/lib/sisimai/lhost/exim.rb +175 -161
- data/lib/sisimai/lhost/ezweb.rb +31 -56
- data/lib/sisimai/lhost/facebook.rb +21 -33
- data/lib/sisimai/lhost/fml.rb +43 -48
- data/lib/sisimai/lhost/gmail.rb +29 -29
- data/lib/sisimai/lhost/gmx.rb +18 -17
- data/lib/sisimai/lhost/googlegroups.rb +9 -10
- data/lib/sisimai/lhost/gsuite.rb +21 -27
- data/lib/sisimai/lhost/imailserver.rb +25 -39
- data/lib/sisimai/lhost/interscanmss.rb +28 -31
- data/lib/sisimai/lhost/kddi.rb +22 -28
- data/lib/sisimai/lhost/mailfoundry.rb +11 -12
- data/lib/sisimai/lhost/mailmarshalsmtp.rb +25 -29
- data/lib/sisimai/lhost/mailru.rb +33 -27
- data/lib/sisimai/lhost/mcafee.rb +21 -31
- data/lib/sisimai/lhost/messagelabs.rb +17 -20
- data/lib/sisimai/lhost/messagingserver.rb +40 -37
- data/lib/sisimai/lhost/mfilter.rb +15 -16
- data/lib/sisimai/lhost/mxlogic.rb +24 -23
- data/lib/sisimai/lhost/notes.rb +17 -17
- data/lib/sisimai/lhost/office365.rb +63 -27
- data/lib/sisimai/lhost/opensmtpd.rb +12 -13
- data/lib/sisimai/lhost/outlook.rb +12 -15
- data/lib/sisimai/lhost/postfix.rb +179 -129
- data/lib/sisimai/lhost/powermta.rb +12 -14
- data/lib/sisimai/lhost/qmail.rb +44 -47
- data/lib/sisimai/lhost/receivingses.rb +15 -20
- data/lib/sisimai/lhost/sendgrid.rb +34 -32
- data/lib/sisimai/lhost/sendmail.rb +66 -53
- data/lib/sisimai/lhost/surfcontrol.rb +19 -19
- data/lib/sisimai/lhost/v5sendmail.rb +45 -39
- data/lib/sisimai/lhost/verizon.rb +35 -39
- data/lib/sisimai/lhost/x1.rb +18 -17
- data/lib/sisimai/lhost/x2.rb +17 -14
- data/lib/sisimai/lhost/x3.rb +19 -19
- data/lib/sisimai/lhost/x4.rb +72 -57
- data/lib/sisimai/lhost/x5.rb +17 -19
- data/lib/sisimai/lhost/x6.rb +41 -17
- data/lib/sisimai/lhost/yahoo.rb +17 -16
- data/lib/sisimai/lhost/yandex.rb +16 -20
- data/lib/sisimai/lhost/zoho.rb +16 -15
- data/lib/sisimai/lhost.rb +8 -10
- data/lib/sisimai/mail/maildir.rb +1 -3
- data/lib/sisimai/mail/mbox.rb +3 -4
- data/lib/sisimai/mail/memory.rb +0 -1
- data/lib/sisimai/mail/stdin.rb +1 -3
- data/lib/sisimai/mail.rb +3 -7
- data/lib/sisimai/mda.rb +28 -42
- data/lib/sisimai/message.rb +435 -325
- data/lib/sisimai/order.rb +5 -5
- data/lib/sisimai/reason/authfailure.rb +64 -0
- data/lib/sisimai/reason/badreputation.rb +53 -0
- data/lib/sisimai/reason/blocked.rb +94 -160
- data/lib/sisimai/reason/contenterror.rb +8 -9
- data/lib/sisimai/reason/delivered.rb +4 -6
- data/lib/sisimai/reason/exceedlimit.rb +10 -12
- data/lib/sisimai/reason/expired.rb +6 -8
- data/lib/sisimai/reason/feedback.rb +2 -3
- data/lib/sisimai/reason/filtered.rb +17 -19
- data/lib/sisimai/reason/hasmoved.rb +9 -10
- data/lib/sisimai/reason/hostunknown.rb +15 -15
- data/lib/sisimai/reason/mailboxfull.rb +10 -12
- data/lib/sisimai/reason/mailererror.rb +18 -20
- data/lib/sisimai/reason/mesgtoobig.rb +9 -11
- data/lib/sisimai/reason/networkerror.rb +5 -8
- data/lib/sisimai/reason/norelaying.rb +8 -11
- data/lib/sisimai/reason/notaccept.rb +13 -14
- data/lib/sisimai/reason/notcompliantrfc.rb +43 -0
- data/lib/sisimai/reason/onhold.rb +6 -9
- data/lib/sisimai/reason/policyviolation.rb +14 -12
- data/lib/sisimai/reason/rejected.rb +26 -24
- data/lib/sisimai/reason/requireptr.rb +69 -0
- data/lib/sisimai/reason/securityerror.rb +33 -36
- data/lib/sisimai/reason/spamdetected.rb +114 -147
- data/lib/sisimai/reason/speeding.rb +49 -0
- data/lib/sisimai/reason/suspend.rb +11 -11
- data/lib/sisimai/reason/syntaxerror.rb +11 -10
- data/lib/sisimai/reason/systemerror.rb +7 -9
- data/lib/sisimai/reason/systemfull.rb +7 -8
- data/lib/sisimai/reason/toomanyconn.rb +9 -11
- data/lib/sisimai/reason/undefined.rb +2 -3
- data/lib/sisimai/reason/userunknown.rb +129 -146
- data/lib/sisimai/reason/vacation.rb +3 -4
- data/lib/sisimai/reason/virusdetected.rb +10 -11
- data/lib/sisimai/reason.rb +59 -64
- data/lib/sisimai/rfc1894.rb +55 -28
- data/lib/sisimai/rfc2045.rb +373 -0
- data/lib/sisimai/rfc3464.rb +250 -308
- data/lib/sisimai/rfc3834.rb +42 -45
- data/lib/sisimai/rfc5322.rb +75 -100
- data/lib/sisimai/rfc5965.rb +31 -0
- data/lib/sisimai/rhost/cox.rb +5 -6
- data/lib/sisimai/rhost/franceptt.rb +6 -8
- data/lib/sisimai/rhost/godaddy.rb +12 -12
- data/lib/sisimai/rhost/{googleapps.rb → google.rb} +80 -72
- data/lib/sisimai/rhost/iua.rb +9 -10
- data/lib/sisimai/rhost/kddi.rb +6 -8
- data/lib/sisimai/rhost/{exchangeonline.rb → microsoft.rb} +115 -114
- data/lib/sisimai/rhost/mimecast.rb +42 -40
- data/lib/sisimai/rhost/nttdocomo.rb +13 -18
- data/lib/sisimai/rhost/spectrum.rb +10 -12
- data/lib/sisimai/rhost/{tencentqq.rb → tencent.rb} +7 -8
- data/lib/sisimai/rhost.rb +23 -31
- data/lib/sisimai/smtp/command.rb +59 -0
- data/lib/sisimai/smtp/error.rb +4 -7
- data/lib/sisimai/smtp/reply.rb +161 -74
- data/lib/sisimai/smtp/status.rb +504 -393
- data/lib/sisimai/smtp/transcript.rb +124 -0
- data/lib/sisimai/smtp.rb +0 -1
- data/lib/sisimai/string.rb +74 -5
- data/lib/sisimai/time.rb +1 -2
- data/lib/sisimai/version.rb +1 -1
- data/lib/sisimai.rb +35 -21
- data/set-of-emails/maildir/bsd/lhost-domino-02.eml +6 -3
- data/set-of-emails/maildir/bsd/lhost-googlegroups-15.eml +174 -0
- data/set-of-emails/maildir/bsd/lhost-gsuite-15.eml +229 -0
- data/set-of-emails/maildir/bsd/lhost-postfix-75.eml +51 -0
- data/set-of-emails/maildir/bsd/lhost-postfix-76.eml +101 -0
- data/set-of-emails/maildir/bsd/lhost-postfix-77.eml +74 -0
- data/set-of-emails/maildir/bsd/lhost-postfix-78.eml +91 -0
- data/set-of-emails/maildir/bsd/lhost-receivingses-08.eml +88 -0
- data/set-of-emails/maildir/bsd/rfc3464-43.eml +88 -0
- data/set-of-emails/maildir/bsd/rhost-google-03.eml +101 -0
- data/set-of-emails/maildir/bsd/rhost-google-04.eml +102 -0
- data/set-of-emails/maildir/bsd/rhost-google-05.eml +82 -0
- data/set-of-emails/maildir/bsd/rhost-google-06.eml +102 -0
- data/set-of-emails/maildir/bsd/rhost-google-07.eml +69 -0
- data/set-of-emails/maildir/bsd/rhost-google-08.eml +99 -0
- data/sisimai-java.gemspec +1 -1
- data/sisimai.gemspec +1 -1
- metadata +41 -21
- data/.rspec +0 -2
- data/lib/sisimai/data/yaml.rb +0 -33
- data/lib/sisimai/data.rb +0 -411
- data/lib/sisimai/mime.rb +0 -456
- data/set-of-emails/maildir/mac/reported-from-nick4tech-san-01.eml +0 -6
- /data/set-of-emails/maildir/bsd/{rfc3464-41.eml → rfc3834-05.eml} +0 -0
- /data/set-of-emails/maildir/bsd/{rhost-googleapps-01.eml → rhost-google-01.eml} +0 -0
- /data/set-of-emails/maildir/bsd/{rhost-googleapps-02.eml → rhost-google-02.eml} +0 -0
- /data/set-of-emails/maildir/bsd/{rhost-exchangeonline-01.eml → rhost-microsoft-01.eml} +0 -0
- /data/set-of-emails/maildir/bsd/{rhost-exchangeonline-02.eml → rhost-microsoft-02.eml} +0 -0
- /data/set-of-emails/maildir/bsd/{rhost-exchangeonline-03.eml → rhost-microsoft-03.eml} +0 -0
- /data/set-of-emails/maildir/bsd/{rhost-tencentqq-01.eml → rhost-tencent-01.eml} +0 -0
- /data/set-of-emails/maildir/bsd/{rhost-tencentqq-02.eml → rhost-tencent-02.eml} +0 -0
- /data/set-of-emails/maildir/bsd/{rhost-tencentqq-03.eml → rhost-tencent-03.eml} +0 -0
@@ -1,11 +1,40 @@
|
|
1
1
|
module Sisimai
|
2
2
|
module Rhost
|
3
|
-
# Sisimai::Rhost detects the bounce reason from the content of Sisimai::
|
4
|
-
#
|
5
|
-
#
|
6
|
-
module
|
3
|
+
# Sisimai::Rhost detects the bounce reason from the content of Sisimai::Fact object as an argument
|
4
|
+
# of get() method when the value of "rhost" of the object is "aspmx.l.google.com". This class is
|
5
|
+
# called only Sisimai::Fact class.
|
6
|
+
module Google
|
7
7
|
class << self
|
8
8
|
MessagesOf = {
|
9
|
+
'authfailure' => [
|
10
|
+
# - 550 5.7.26 Unauthenticated email from domain-name is not accepted due to domain's
|
11
|
+
# DMARC policy. Please contact the administrator of domain-name domain. If this was
|
12
|
+
# a legitimate mail please visit [Control unauthenticated mail from your domain] to
|
13
|
+
# learn about the DMARC initiative. If the messages are valid and aren't spam, con-
|
14
|
+
# tact the administrator of the receiving mail server to determine why your outgoing
|
15
|
+
# messages don't pass authentication checks.
|
16
|
+
['550', '5.7.26', "is not accepted due to domain's dmarc policy"],
|
17
|
+
|
18
|
+
# - 550 5.7.26 This message does not have authentication information or fails to pass
|
19
|
+
# authentication checks (SPF or DKIM). To best protect our users from spam, the mes-
|
20
|
+
# sage has been blocked. Please visit https://support.google.com/mail/answer/81126
|
21
|
+
# for more information.
|
22
|
+
['550', '5.7.1', 'fails to pass authentication checks'],
|
23
|
+
['550', '5.7.26', 'fails to pass authentication checks'],
|
24
|
+
|
25
|
+
# - 550 5.7.26 This message fails to pass SPF checks for an SPF record with a hard fail
|
26
|
+
# policy (-all). To best protect our users from spam and phishing, the message has
|
27
|
+
# been blocked. Please visit https://support.google.com/mail/answer/81126 for more
|
28
|
+
# information.
|
29
|
+
['550', '5.7.26', 'this message fails to pass spf checks for an spf record with a hard fail'],
|
30
|
+
],
|
31
|
+
'badreputation' => [
|
32
|
+
# - 550 5.7.1 Our system has detected that this message is likely suspicious due to the
|
33
|
+
# very low reputation of the sending IP address. To best protect our users from spam,
|
34
|
+
# the message has been blocked.
|
35
|
+
# Please visit https://support.google.com/mail/answer/188131 for more information.
|
36
|
+
['550', '5.7.1', 'this message is likely suspicious due to the very low reputation of the sending ip address'],
|
37
|
+
],
|
9
38
|
'blocked' => [
|
10
39
|
['421', '4.7.0', 'ip not in whitelist for rcpt domain, closing connection.'],
|
11
40
|
|
@@ -32,37 +61,6 @@ module Sisimai
|
|
32
61
|
# to our servers. Please use the SMTP relay at your service provider instead. For
|
33
62
|
# more information, visit https://support.google.com/mail/answer/10336
|
34
63
|
['550', '5.7.1', "the ip you're using to send mail is not authorized to send email directly to our servers"],
|
35
|
-
|
36
|
-
# - 550 5.7.25 The IP address sending this message does not have a PTR record setup, or
|
37
|
-
# the corresponding forward DNS entry does not point to the sending IP. As a policy,
|
38
|
-
# Gmail does not accept messages from IPs with missing PTR records.
|
39
|
-
['550', '5.7.25', 'the ip address sending this message does not have a ptr record setup'],
|
40
|
-
|
41
|
-
# - 550 5.7.26 Unauthenticated email from domain-name is not accepted due to domain's
|
42
|
-
# DMARC policy. Please contact the administrator of domain-name domain. If this was
|
43
|
-
# a legitimate mail please visit [Control unauthenticated mail from your domain] to
|
44
|
-
# learn about the DMARC initiative. If the messages are valid and aren't spam, con-
|
45
|
-
# tact the administrator of the receiving mail server to determine why your outgoing
|
46
|
-
# messages don't pass authentication checks.
|
47
|
-
['550', '5.7.26', "is not accepted due to domain's dmarc policy"],
|
48
|
-
|
49
|
-
# - 550 5.7.26 This message does not have authentication information or fails to pass
|
50
|
-
# authentication checks (SPF or DKIM). To best protect our users from spam, the mes-
|
51
|
-
# sage has been blocked. Please visit https://support.google.com/mail/answer/81126
|
52
|
-
# for more information.
|
53
|
-
['550', '5.7.1', 'fails to pass authentication checks'],
|
54
|
-
['550', '5.7.26', 'fails to pass authentication checks'],
|
55
|
-
|
56
|
-
# - 550 5.7.26 This message fails to pass SPF checks for an SPF record with a hard fail
|
57
|
-
# policy (-all). To best protect our users from spam and phishing, the message has
|
58
|
-
# been blocked. Please visit https://support.google.com/mail/answer/81126 for more
|
59
|
-
# information.
|
60
|
-
['550', '5.7.26', 'this message fails to pass spf checks for an spf record with a hard fail'],
|
61
|
-
# - 550 5.7.1 Our system has detected that this message is likely suspicious due to the
|
62
|
-
# very low reputation of the sending IP address. To best protect our users from spam,
|
63
|
-
# the message has been blocked.
|
64
|
-
# Please visit https://support.google.com/mail/answer/188131 for more information.
|
65
|
-
['550', '5.7.1', 'this message is likely suspicious due to the very low reputation of the sending ip address'],
|
66
64
|
],
|
67
65
|
'contenterror' => [
|
68
66
|
['554', '5.6.0', 'mail message is malformed. Not accepted'],
|
@@ -88,6 +86,9 @@ module Sisimai
|
|
88
86
|
'norelaying' => [
|
89
87
|
['550', '5.7.0', 'mail relay denied'],
|
90
88
|
],
|
89
|
+
'notcompliantrfc' => [
|
90
|
+
['550', '5.7.1', 'this message is not rfc 5322 compliant'],
|
91
|
+
],
|
91
92
|
'policyviolation' => [
|
92
93
|
['550', '5.7.1', 'messages with multiple addresses in from: header are not accepted'],
|
93
94
|
|
@@ -114,6 +115,12 @@ module Sisimai
|
|
114
115
|
|
115
116
|
['550', '5.7.1', 'unauthenticated email is not accepted from this domain'],
|
116
117
|
],
|
118
|
+
'requireptr' => [
|
119
|
+
# - 550 5.7.25 The IP address sending this message does not have a PTR record setup, or
|
120
|
+
# the corresponding forward DNS entry does not point to the sending IP. As a policy,
|
121
|
+
# Gmail does not accept messages from IPs with missing PTR records.
|
122
|
+
['550', '5.7.25', 'the ip address sending this message does not have a ptr record setup'],
|
123
|
+
],
|
117
124
|
'securityerror' => [
|
118
125
|
['421', '4.7.0', 'tls required for rcpt domain, closing connection'],
|
119
126
|
['501', '5.5.2', 'cannot decode response'], # 2FA related error, maybe.
|
@@ -142,8 +149,39 @@ module Sisimai
|
|
142
149
|
# For more information, visit https://support.google.com/mail/answer/188131
|
143
150
|
['550', '5.7.1', 'our system has detected that this message is likely unsolicited mail'],
|
144
151
|
],
|
152
|
+
'speeding' => [
|
153
|
+
# - 450 4.2.1 The user you are trying to contact is receiving mail too quickly. Please
|
154
|
+
# resend your message at a later time. If the user is able to receive mail at that
|
155
|
+
# time, your message will be delivered.
|
156
|
+
# For more information, visit https://support.google.com/mail/answer/22839
|
157
|
+
['450', '4.2.1', 'is receiving mail too quickly'],
|
158
|
+
|
159
|
+
# - 450 4.2.1 The user you are trying to contact is receiving mail at a rate that pre-
|
160
|
+
# vents additional messages from being delivered. Please resend your message at a
|
161
|
+
# later time. If the user is able to receive mail at that time, your message will be
|
162
|
+
# delivered. For more information, visit https://support.google.com/mail/answer/6592
|
163
|
+
['450', '4.2.1', 'is receiving mail at a rate that prevents additional messages from being delivered'],
|
164
|
+
['550', '5.2.1', 'is receiving mail at a rate that prevents additional messages from being delivered'],
|
165
|
+
|
166
|
+
# - 450 4.2.1 Peak SMTP relay limit exceeded for customer. This is a temporary error.
|
167
|
+
# For more information on SMTP relay limits, please contact your administrator or
|
168
|
+
# visit https://support.google.com/a/answer/6140680
|
169
|
+
['450', '4.2.1', 'peak smtp relay limit exceeded for customer'],
|
170
|
+
|
171
|
+
# - 550 5.4.5 Daily SMTP relay limit exceeded for user. For more information on SMTP
|
172
|
+
# relay sending limits please contact your administrator or visit SMTP relay service
|
173
|
+
# error messages.
|
174
|
+
['550', '5.4.5', 'daily smtp relay limit exceeded for user'],
|
175
|
+
['550', '5.4.5', 'daily sending quota exceeded'],
|
176
|
+
|
177
|
+
# - 550 5.7.1 Daily SMTP relay limit exceeded for customer. For more information on
|
178
|
+
# SMTP relay sending limits please contact your administrator or visit
|
179
|
+
# https://support.google.com/a/answer/6140680
|
180
|
+
['550', '5.7.1', 'daily smtp relay limit exceeded for customer'],
|
181
|
+
],
|
145
182
|
'suspend' => [
|
146
183
|
['550', '5.2.1', 'the email account that you tried to reach is disabled'],
|
184
|
+
['550', '5.2.1', 'the email account that you tried to reach is inactive'],
|
147
185
|
],
|
148
186
|
'syntaxerror' => [
|
149
187
|
['451', '4.5.0', 'smtp protocol violation, visit rfc 2821'],
|
@@ -180,35 +218,6 @@ module Sisimai
|
|
180
218
|
# - 452 4.5.3 Your message has too many recipients. For more information regarding
|
181
219
|
# Google's sending limits, visit https://support.google.com/mail/answer/6592
|
182
220
|
['452', '4.5.3', 'your message has too many recipients'],
|
183
|
-
|
184
|
-
# - 450 4.2.1 The user you are trying to contact is receiving mail too quickly. Please
|
185
|
-
# resend your message at a later time. If the user is able to receive mail at that
|
186
|
-
# time, your message will be delivered.
|
187
|
-
# For more information, visit https://support.google.com/mail/answer/22839
|
188
|
-
['450', '4.2.1', 'is receiving mail too quickly'],
|
189
|
-
|
190
|
-
# - 450 4.2.1 The user you are trying to contact is receiving mail at a rate that pre-
|
191
|
-
# vents additional messages from being delivered. Please resend your message at a
|
192
|
-
# later time. If the user is able to receive mail at that time, your message will be
|
193
|
-
# delivered. For more information, visit https://support.google.com/mail/answer/6592
|
194
|
-
['450', '4.2.1', 'is receiving mail at a rate that prevents additional messages from being delivered'],
|
195
|
-
['550', '5.2.1', 'is receiving mail at a rate that prevents additional messages from being delivered'],
|
196
|
-
|
197
|
-
# - 450 4.2.1 Peak SMTP relay limit exceeded for customer. This is a temporary error.
|
198
|
-
# For more information on SMTP relay limits, please contact your administrator or
|
199
|
-
# visit https://support.google.com/a/answer/6140680
|
200
|
-
['450', '4.2.1', 'peak smtp relay limit exceeded for customer'],
|
201
|
-
|
202
|
-
# - 550 5.4.5 Daily SMTP relay limit exceeded for user. For more information on SMTP
|
203
|
-
# relay sending limits please contact your administrator or visit SMTP relay service
|
204
|
-
# error messages.
|
205
|
-
['550', '5.4.5', 'daily smtp relay limit exceeded for user'],
|
206
|
-
['550', '5.4.5', 'daily sending quota exceeded'],
|
207
|
-
|
208
|
-
# - 550 5.7.1 Daily SMTP relay limit exceeded for customer. For more information on
|
209
|
-
# SMTP relay sending limits please contact your administrator or visit
|
210
|
-
# https://support.google.com/a/answer/6140680
|
211
|
-
['550', '5.7.1', 'daily smtp relay limit exceeded for customer'],
|
212
221
|
],
|
213
222
|
'userunknown' => [
|
214
223
|
# - 550 5.1.1 The email account that you tried to reach does not exist. Please try dou-
|
@@ -228,15 +237,14 @@ module Sisimai
|
|
228
237
|
# @return [String] The bounce reason for Google Workspace
|
229
238
|
# @see https://support.google.com/a/answer/3726730?hl=en
|
230
239
|
def get(argvs)
|
231
|
-
return argvs
|
232
|
-
return '' if argvs
|
233
|
-
return ''
|
234
|
-
return ''
|
235
|
-
return '' unless argvs.deliverystatus =~ /\A[245][.]\d[.]\d+\z/
|
240
|
+
return argvs['reason'] unless argvs['reason'].empty?
|
241
|
+
return '' if argvs['diagnosticcode'].empty?
|
242
|
+
return '' unless Sisimai::SMTP::Reply.test(argvs['replycode'])
|
243
|
+
return '' unless Sisimai::SMTP::Status.test(argvs['deliverystatus'])
|
236
244
|
|
237
|
-
statuscode = argvs
|
238
|
-
esmtpreply = argvs
|
239
|
-
esmtperror = argvs
|
245
|
+
statuscode = argvs['deliverystatus'][2,6]
|
246
|
+
esmtpreply = argvs['replycode'][1,2]
|
247
|
+
esmtperror = argvs['diagnosticcode'].downcase
|
240
248
|
reasontext = ''
|
241
249
|
|
242
250
|
MessagesOf.each_key do |e|
|
data/lib/sisimai/rhost/iua.rb
CHANGED
@@ -1,11 +1,10 @@
|
|
1
1
|
module Sisimai
|
2
2
|
module Rhost
|
3
|
-
# Sisimai::Rhost detects the bounce reason from the content of Sisimai::
|
4
|
-
#
|
5
|
-
#
|
3
|
+
# Sisimai::Rhost detects the bounce reason from the content of Sisimai::Fact object as an argument
|
4
|
+
# of get() method when the value of "rhost" of the object is "*.email.ua". This class is called
|
5
|
+
# only Sisimai::Fact class.
|
6
6
|
module IUA
|
7
7
|
class << self
|
8
|
-
# Imported from p5-Sisimail/lib/Sisimai/Rhost/IUA.pm
|
9
8
|
ErrorCodes = {
|
10
9
|
# http://mail.i.ua/err/$(CODE)
|
11
10
|
'1' => 'norelaying', # The use of SMTP as mail gate is forbidden.
|
@@ -21,15 +20,15 @@ module Sisimai
|
|
21
20
|
}.freeze
|
22
21
|
|
23
22
|
# Detect bounce reason from https://www.i.ua/
|
24
|
-
# @param [Sisimai::
|
23
|
+
# @param [Sisimai::Fact] argvs Parsed email object
|
25
24
|
# @return [String] The bounce reason at https://www.i.ua/
|
26
25
|
def get(argvs)
|
27
|
-
return argvs
|
26
|
+
return argvs['reason'] unless argvs['reason'].empty?
|
27
|
+
issuedcode = argvs['diagnosticcode'].downcase
|
28
|
+
codenumber = issuedcode.index('.i.ua/err/') > 0 ? issuedcode[issuedcode.index('/err/') + 5, 2] : 0
|
29
|
+
codenumber = codenumber[0, 1] if codenumber.index('/') == 1
|
28
30
|
|
29
|
-
|
30
|
-
return ErrorCodes[cv[1]] || ''
|
31
|
-
end
|
32
|
-
return ''
|
31
|
+
return ErrorCodes[codenumber] || ''
|
33
32
|
end
|
34
33
|
|
35
34
|
end
|
data/lib/sisimai/rhost/kddi.rb
CHANGED
@@ -1,27 +1,25 @@
|
|
1
1
|
module Sisimai
|
2
2
|
module Rhost
|
3
|
-
# Sisimai::Rhost detects the bounce reason from the content of Sisimai::
|
4
|
-
#
|
5
|
-
# is
|
6
|
-
# This class is called only Sisimai::Data class.
|
3
|
+
# Sisimai::Rhost detects the bounce reason from the content of Sisimai::Fact object as an argument
|
4
|
+
# of get() method when the value of "rhost" of the object is "lsean.ezweb.ne.jp" or "msmx.au.com".
|
5
|
+
# This class is called only Sisimai::Fact class.
|
7
6
|
module KDDI
|
8
7
|
class << self
|
9
|
-
# Imported from p5-Sisimail/lib/Sisimai/Rhost/KDDI.pm
|
10
8
|
MessagesOf = {
|
11
9
|
'filtered' => '550 : User unknown', # The response was: 550 : User unknown
|
12
10
|
'userunknown' => '>: User unknown', # The response was: 550 <...>: User unknown
|
13
11
|
}.freeze
|
14
12
|
|
15
13
|
# Detect bounce reason from au (KDDI)
|
16
|
-
# @param [Sisimai::
|
14
|
+
# @param [Sisimai::Fact] argvs Parsed email object
|
17
15
|
# @return [String] The bounce reason for au.com or ezweb.ne.jp
|
18
16
|
def get(argvs)
|
19
|
-
statusmesg = argvs
|
17
|
+
statusmesg = argvs['diagnosticcode']
|
20
18
|
reasontext = ''
|
21
19
|
|
22
20
|
MessagesOf.each_key do |e|
|
23
21
|
# Try to match the error message with message patterns defined in $MessagesOf
|
24
|
-
next unless statusmesg.
|
22
|
+
next unless statusmesg.include?(MessagesOf[e])
|
25
23
|
reasontext = e
|
26
24
|
break
|
27
25
|
end
|
@@ -1,15 +1,70 @@
|
|
1
1
|
module Sisimai
|
2
2
|
module Rhost
|
3
|
-
# Sisimai::Rhost detects the bounce reason from the content of Sisimai::
|
4
|
-
#
|
5
|
-
# is
|
6
|
-
#
|
3
|
+
# Sisimai::Rhost detects the bounce reason from the content of Sisimai::Fact object as an argument
|
4
|
+
# of get() method when the value of "rhost" of the object is *.protection.outlook.com. This class
|
5
|
+
# is called only Sisimai::Fact class.
|
6
|
+
#
|
7
7
|
# https://technet.microsoft.com/en-us/library/bb232118
|
8
8
|
# https://learn.microsoft.com/en-us/Exchange/mail-flow-best-practices/non-delivery-reports-in-exchange-online/non-delivery-reports-in-exchange-online
|
9
9
|
# https://learn.microsoft.com/en-us/Exchange/mail-flow/non-delivery-reports-and-bounce-messages/non-delivery-reports-and-bounce-messages
|
10
|
-
module
|
10
|
+
module Microsoft
|
11
11
|
class << self
|
12
12
|
MessagesOf = {
|
13
|
+
'authfailure' => [
|
14
|
+
# - Access denied, a message sent over IPv6 [2a01:111:f200:2004::240] must pass either
|
15
|
+
# SPF or DKIM validation, this message is not signed
|
16
|
+
# - The sending message sent over IPv6 must pass either SPF or DKIM.
|
17
|
+
['4.7.26', 0, 0, 'must pass either spf or dkim validation, this message is not signed'],
|
18
|
+
|
19
|
+
# - Records are DNSSEC authentic, but one or multiple of these scenarios occurred:
|
20
|
+
# - The destination mail server's certificate doesn't match with what is expected per
|
21
|
+
# the authentic TLSA record.
|
22
|
+
# - Authentic TLSA record is misconfigured.
|
23
|
+
# - Destination domain is being attacked.
|
24
|
+
# - Any other DANE failure.
|
25
|
+
# - This message usually indicates an issue on the destination email server. Check the
|
26
|
+
# validity of recipient address and determine if the destination server is configured
|
27
|
+
# correctly to receive messages.
|
28
|
+
# - For more information about DANE, see: https://datatracker.ietf.org/doc/html/rfc7671
|
29
|
+
['4.7.323', 0, 0, 'tlsa-invalid: The domain failed dane validation'],
|
30
|
+
['5.7.323', 0, 0, 'tlsa-invalid: The domain failed dane validation'],
|
31
|
+
|
32
|
+
# - The destination domain indicated it was DNSSEC-authentic, but Exchange Online was
|
33
|
+
# not able to verify it as DNSSEC-authentic.
|
34
|
+
['4.7.324', 0, 0, 'dnssec-invalid: destination domain returned invalid dnssec records'],
|
35
|
+
['5.7.324', 0, 0, 'dnssec-invalid: destination domain returned invalid dnssec records'],
|
36
|
+
|
37
|
+
# - This happens when the presented certificate identities (CN and SAN) of a destina-
|
38
|
+
# tion SMTP target host don't match any of the domains or MX host.
|
39
|
+
# - This message usually indicates an issue on the destination email server. Check the
|
40
|
+
# validity of recipient address and determine if the destination server is configured
|
41
|
+
# correctly to receive messages. For more information, see How SMTP DNS-based Authen-
|
42
|
+
# tication of Named Entities (DANE) works to secure email communications.
|
43
|
+
['4.7.325', 0, 0, 'certificate-host-mismatch: remote certificate must have a common name or subject alternative name matching the hostname (dane)'],
|
44
|
+
['5.7.325', 0, 0, 'certificate-host-mismatch: remote certificate must have a common name or subject alternative name matching the hostname (dane)'],
|
45
|
+
|
46
|
+
# - The destination email system uses SPF to validate inbound mail, and there's a prob-
|
47
|
+
# lem with your SPF configuration.
|
48
|
+
['5.7.23', 0, 0, 'the message was rejected because of sender policy framework violation'],
|
49
|
+
|
50
|
+
# - DNSSEC checks have passed, yet upon establishing the connection the destination
|
51
|
+
# mail server provides a certificate that is expired.
|
52
|
+
# - A valid X.509 certificate that isn't expired must be presented. X.509 certificates
|
53
|
+
# must be renewed after their expiration, commonly annually.
|
54
|
+
['5.7.322', 0, 0, "certificate-expired: destination mail server's certificate is expired"],
|
55
|
+
|
56
|
+
# - Access denied, sending domain [$SenderDomain] does not pass DMARC verification
|
57
|
+
# - The sender's domain in the 5322.From address doesn't pass DMARC.
|
58
|
+
['5.7.509', 0, 0, 'does not pass dmarc verification'],
|
59
|
+
],
|
60
|
+
'badreputation' => [
|
61
|
+
# Undocumented error messages ---------------------------------------------------------
|
62
|
+
# - status=deferred (host outlook-com.olc.protection.outlook.com[192.0.2.255] said:
|
63
|
+
# 451 4.7.650 The mail server [192.0.2.5] has been temporarily rate limited due to IP
|
64
|
+
# reputation. For e-mail delivery information, see https://postmaster.live.com (S775)
|
65
|
+
# [***.prod.protection.outlook.com] (in reply to MAIL FROM command))
|
66
|
+
['4.7.650', 0, 0, 'has been temporarily rate limited due to ip reputation'],
|
67
|
+
],
|
13
68
|
'blocked' => [
|
14
69
|
# Exchange Server 2019 ----------------------------------------------------------------
|
15
70
|
# - Transient network issues or server problems that might eventually correct them-
|
@@ -87,58 +142,6 @@ module Sisimai
|
|
87
142
|
# - 550 5.7.1 Unfortunately, messages from [10.0.2.5] weren't sent. Please contact your
|
88
143
|
# Internet service provider since part of their network is on our block list (S3150).
|
89
144
|
['5.7.1', 0, 0, 'part of their network is on our block list (s3150)'],
|
90
|
-
|
91
|
-
# - Access denied, a message sent over IPv6 [2a01:111:f200:2004::240] must pass either
|
92
|
-
# SPF or DKIM validation, this message is not signed
|
93
|
-
# - The sending message sent over IPv6 must pass either SPF or DKIM.
|
94
|
-
['4.7.26', 0, 0, 'must pass either spf or dkim validation, this message is not signed'],
|
95
|
-
|
96
|
-
# - Records are DNSSEC authentic, but one or multiple of these scenarios occurred:
|
97
|
-
# - The destination mail server's certificate doesn't match with what is expected per
|
98
|
-
# the authentic TLSA record.
|
99
|
-
# - Authentic TLSA record is misconfigured.
|
100
|
-
# - Destination domain is being attacked.
|
101
|
-
# - Any other DANE failure.
|
102
|
-
# - This message usually indicates an issue on the destination email server. Check the
|
103
|
-
# validity of recipient address and determine if the destination server is configured
|
104
|
-
# correctly to receive messages.
|
105
|
-
# - For more information about DANE, see: https://datatracker.ietf.org/doc/html/rfc7671
|
106
|
-
['4.7.323', 0, 0, 'tlsa-invalid: The domain failed dane validation'],
|
107
|
-
['5.7.323', 0, 0, 'tlsa-invalid: The domain failed dane validation'],
|
108
|
-
|
109
|
-
# - The destination domain indicated it was DNSSEC-authentic, but Exchange Online was
|
110
|
-
# not able to verify it as DNSSEC-authentic.
|
111
|
-
['4.7.324', 0, 0, 'dnssec-invalid: destination domain returned invalid dnssec records'],
|
112
|
-
['5.7.324', 0, 0, 'dnssec-invalid: destination domain returned invalid dnssec records'],
|
113
|
-
|
114
|
-
# - This happens when the presented certificate identities (CN and SAN) of a destina-
|
115
|
-
# tion SMTP target host don't match any of the domains or MX host.
|
116
|
-
# - This message usually indicates an issue on the destination email server. Check the
|
117
|
-
# validity of recipient address and determine if the destination server is configured
|
118
|
-
# correctly to receive messages. For more information, see How SMTP DNS-based Authen-
|
119
|
-
# tication of Named Entities (DANE) works to secure email communications.
|
120
|
-
['4.7.325', 0, 0, 'certificate-host-mismatch: remote certificate must have a common name or subject alternative name matching the hostname (dane)'],
|
121
|
-
['5.7.325', 0, 0, 'certificate-host-mismatch: remote certificate must have a common name or subject alternative name matching the hostname (dane)'],
|
122
|
-
|
123
|
-
# - The destination email system uses SPF to validate inbound mail, and there's a prob-
|
124
|
-
# lem with your SPF configuration.
|
125
|
-
['5.7.23', 0, 0, 'the message was rejected because of sender policy framework violation'],
|
126
|
-
|
127
|
-
# - DNSSEC checks have passed, yet upon establishing the connection the destination
|
128
|
-
# mail server provides a certificate that is expired.
|
129
|
-
# - A valid X.509 certificate that isn't expired must be presented. X.509 certificates
|
130
|
-
# must be renewed after their expiration, commonly annually.
|
131
|
-
['5.7.322', 0, 0, "certificate-expired: destination mail server's certificate is expired"],
|
132
|
-
|
133
|
-
# - Access denied, sending domain [$SenderDomain] does not pass DMARC verification
|
134
|
-
# - The sender's domain in the 5322.From address doesn't pass DMARC.
|
135
|
-
['5.7.509', 0, 0, 'does not pass dmarc verification'],
|
136
|
-
# Undocumented error messages ---------------------------------------------------------
|
137
|
-
# - status=deferred (host outlook-com.olc.protection.outlook.com[192.0.2.255] said:
|
138
|
-
# 451 4.7.650 The mail server [192.0.2.5] has been temporarily rate limited due to IP
|
139
|
-
# reputation. For e-mail delivery information, see https://postmaster.live.com (S775)
|
140
|
-
# [***.prod.protection.outlook.com] (in reply to MAIL FROM command))
|
141
|
-
['4.7.650', 0, 0, 'has been temporarily rate limited due to ip reputation'],
|
142
145
|
],
|
143
146
|
'contenterror' => [
|
144
147
|
# Exchange Server 2019 ----------------------------------------------------------------
|
@@ -477,6 +480,53 @@ module Sisimai
|
|
477
480
|
['5.2.1', 0, 0, 'content filter agent quarantined this message'],
|
478
481
|
],
|
479
482
|
'speeding' => [
|
483
|
+
# Exchange Online ---------------------------------------------------------------------
|
484
|
+
# - The recipient mailbox's ability to accept messages is being throttled because it's
|
485
|
+
# receiving too many messages too quickly. This is done so a single recipient's mail
|
486
|
+
# processing doesn't unfairly impact other recipients sharing the same mailbox data-
|
487
|
+
# base.
|
488
|
+
['4.3.2', 0, 0, 'storedrv.deliver; recipient thread limit exceeded'],
|
489
|
+
|
490
|
+
# - The sender has exceeded the recipient rate limit as described in Sending limits.
|
491
|
+
# - This could indicate the account has been compromised and is being used to send
|
492
|
+
# spam.
|
493
|
+
['5.1.90', 0, 0, "your message can't be sent because you've reached your daily limit for message recipients"],
|
494
|
+
|
495
|
+
# - The sender has exceeded the recipient rate limit or the message rate limit as de-
|
496
|
+
# scribed in Sending limits.
|
497
|
+
# - This could indicate the account has been compromised and is being used to send
|
498
|
+
# spam.
|
499
|
+
['5.2.2', 0, 0, 'submission quota exceeded'],
|
500
|
+
|
501
|
+
# - The sender has exceeded the maximum number of messages they're allowed to send per
|
502
|
+
# hour to a specific recipient in Exchange Online.
|
503
|
+
# - The automated mailer or sender should try again later, and reduce the number of
|
504
|
+
# messages they send per hour to a specific recipient. This limit helps protect
|
505
|
+
# Microsoft 365 or Office 365 users from rapidly filling their inboxes with a large
|
506
|
+
# number of messages from errant automated notification systems or other single-send-
|
507
|
+
# er mail storms.
|
508
|
+
['5.2.121', 0, 0, "recipient's per hour message receive limit from specific sender exceeded"],
|
509
|
+
|
510
|
+
# - The Microsoft 365 or Office 365 recipient has exceeded the number of messages they
|
511
|
+
# can receive per hour from all senders.
|
512
|
+
# - The automated mailer or sender should try again later, and reduce the number of
|
513
|
+
# messages they send per hour to a specific recipient. This limit helps protect
|
514
|
+
# Microsoft 365 and Office 365 users from rapidly filling their inboxes with a large
|
515
|
+
# number of messages from errant automated notification systems or other mail storms.
|
516
|
+
['5.2.122', 0, 0, "recipient's per hour message receive limit exceeded"],
|
517
|
+
|
518
|
+
# - Access denied, [$SenderIPAddress] has exceeded permitted limits within $range range
|
519
|
+
# - The sender's IPv6 range has attempted to send too many messages in too short a time
|
520
|
+
# period.
|
521
|
+
['5.7.508', 0, 0, 'has exceeded permitted limits within'],
|
522
|
+
|
523
|
+
# - The majority of traffic from this tenant has been detected as suspicious and has
|
524
|
+
# resulted in a ban on sending ability for the tenant.
|
525
|
+
# - Ensure that any compromises or open relays have been resolved, and then contact
|
526
|
+
# support through your regular channel. For more information, see Fix email delivery
|
527
|
+
# issues for error codes 5.7.700 through 5.7.750 in Exchange Online.
|
528
|
+
['5.7.', 700, 749, 'access denied, tenant has exceeded threshold'],
|
529
|
+
['5.7.', 700, 749, 'access denied, traffic not accepted from this ip'],
|
480
530
|
],
|
481
531
|
'suspend' => [
|
482
532
|
# Exchange Online ---------------------------------------------------------------------
|
@@ -588,54 +638,6 @@ module Sisimai
|
|
588
638
|
|
589
639
|
# Previous versions of Exchange Server ------------------------------------------------
|
590
640
|
['5.2.122', 0, 0, 'the recipient has exceeded their limit for'],
|
591
|
-
|
592
|
-
# Exchange Online ---------------------------------------------------------------------
|
593
|
-
# - The recipient mailbox's ability to accept messages is being throttled because it's
|
594
|
-
# receiving too many messages too quickly. This is done so a single recipient's mail
|
595
|
-
# processing doesn't unfairly impact other recipients sharing the same mailbox data-
|
596
|
-
# base.
|
597
|
-
['4.3.2', 0, 0, 'storedrv.deliver; recipient thread limit exceeded'],
|
598
|
-
|
599
|
-
# - The sender has exceeded the recipient rate limit as described in Sending limits.
|
600
|
-
# - This could indicate the account has been compromised and is being used to send
|
601
|
-
# spam.
|
602
|
-
['5.1.90', 0, 0, "your message can't be sent because you've reached your daily limit for message recipients"],
|
603
|
-
|
604
|
-
# - The sender has exceeded the recipient rate limit or the message rate limit as de-
|
605
|
-
# scribed in Sending limits.
|
606
|
-
# - This could indicate the account has been compromised and is being used to send
|
607
|
-
# spam.
|
608
|
-
['5.2.2', 0, 0, 'submission quota exceeded'],
|
609
|
-
|
610
|
-
# - The sender has exceeded the maximum number of messages they're allowed to send per
|
611
|
-
# hour to a specific recipient in Exchange Online.
|
612
|
-
# - The automated mailer or sender should try again later, and reduce the number of
|
613
|
-
# messages they send per hour to a specific recipient. This limit helps protect
|
614
|
-
# Microsoft 365 or Office 365 users from rapidly filling their inboxes with a large
|
615
|
-
# number of messages from errant automated notification systems or other single-send-
|
616
|
-
# er mail storms.
|
617
|
-
['5.2.121', 0, 0, "recipient's per hour message receive limit from specific sender exceeded"],
|
618
|
-
|
619
|
-
# - The Microsoft 365 or Office 365 recipient has exceeded the number of messages they
|
620
|
-
# can receive per hour from all senders.
|
621
|
-
# - The automated mailer or sender should try again later, and reduce the number of
|
622
|
-
# messages they send per hour to a specific recipient. This limit helps protect
|
623
|
-
# Microsoft 365 and Office 365 users from rapidly filling their inboxes with a large
|
624
|
-
# number of messages from errant automated notification systems or other mail storms.
|
625
|
-
['5.2.122', 0, 0, "recipient's per hour message receive limit exceeded"],
|
626
|
-
|
627
|
-
# - Access denied, [$SenderIPAddress] has exceeded permitted limits within $range range
|
628
|
-
# - The sender's IPv6 range has attempted to send too many messages in too short a time
|
629
|
-
# period.
|
630
|
-
['5.7.508', 0, 0, 'has exceeded permitted limits within'],
|
631
|
-
|
632
|
-
# - The majority of traffic from this tenant has been detected as suspicious and has
|
633
|
-
# resulted in a ban on sending ability for the tenant.
|
634
|
-
# - Ensure that any compromises or open relays have been resolved, and then contact
|
635
|
-
# support through your regular channel. For more information, see Fix email delivery
|
636
|
-
# issues for error codes 5.7.700 through 5.7.750 in Exchange Online.
|
637
|
-
['5.7.', 700, 749, 'access denied, tenant has exceeded threshold'],
|
638
|
-
['5.7.', 700, 749, 'access denied, traffic not accepted from this ip'],
|
639
641
|
],
|
640
642
|
'userunknown' => [
|
641
643
|
# Exchange Server 2019 ----------------------------------------------------------------
|
@@ -700,17 +702,17 @@ module Sisimai
|
|
700
702
|
],
|
701
703
|
}.freeze
|
702
704
|
|
703
|
-
# Detect bounce reason from Exchange Online
|
704
|
-
# @param [Sisimai::
|
705
|
+
# Detect bounce reason from Exchange Server 2019 or older and Exchange Online
|
706
|
+
# @param [Sisimai::Fact] argvs Parsed email object
|
705
707
|
# @return [String] The bounce reason for Exchange Online
|
706
708
|
def get(argvs)
|
707
|
-
return argvs
|
708
|
-
return '' if argvs
|
709
|
-
return '' if argvs
|
710
|
-
return '' unless argvs
|
709
|
+
return argvs['reason'] unless argvs['reason'].empty?
|
710
|
+
return '' if argvs['diagnosticcode'].empty?
|
711
|
+
return '' if argvs['deliverystatus'].empty?
|
712
|
+
return '' unless Sisimai::SMTP::Status.test(argvs['deliverystatus'])
|
711
713
|
|
712
|
-
statuscode = argvs
|
713
|
-
esmtperror = argvs
|
714
|
+
statuscode = argvs['deliverystatus']
|
715
|
+
esmtperror = argvs['diagnosticcode'].downcase
|
714
716
|
thirddigit = statuscode.split('.')[-1].to_i
|
715
717
|
reasontext = ''
|
716
718
|
|
@@ -735,7 +737,6 @@ module Sisimai
|
|
735
737
|
break unless reasontext.empty?
|
736
738
|
end
|
737
739
|
|
738
|
-
|
739
740
|
return reasontext
|
740
741
|
end
|
741
742
|
|