sisimai 4.25.16-java → 5.0.2-java
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.github/workflows/rake-test.yml +55 -0
- data/.travis.yml +3 -3
- data/ANALYTICAL-PRECISION +2 -2
- data/Benchmarks.mk +3 -3
- data/CONTRIBUTING +1 -1
- data/ChangeLog.md +451 -393
- data/Developers.mk +5 -6
- data/Gemfile +1 -1
- data/Makefile +15 -15
- data/README-JA.md +323 -149
- data/README.md +319 -149
- 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 +506 -0
- data/lib/sisimai/lhost/activehunter.rb +12 -14
- data/lib/sisimai/lhost/amavis.rb +11 -14
- data/lib/sisimai/lhost/amazonses.rb +37 -42
- data/lib/sisimai/lhost/amazonworkmail.rb +15 -19
- data/lib/sisimai/lhost/aol.rb +12 -15
- data/lib/sisimai/lhost/apachejames.rb +19 -21
- data/lib/sisimai/lhost/barracuda.rb +10 -12
- data/lib/sisimai/lhost/bigfoot.rb +21 -22
- data/lib/sisimai/lhost/biglobe.rb +15 -16
- data/lib/sisimai/lhost/courier.rb +20 -20
- data/lib/sisimai/lhost/domino.rb +23 -20
- data/lib/sisimai/lhost/einsundeins.rb +23 -18
- data/lib/sisimai/lhost/exchange2003.rb +30 -29
- data/lib/sisimai/lhost/exchange2007.rb +70 -58
- data/lib/sisimai/lhost/exim.rb +179 -174
- data/lib/sisimai/lhost/ezweb.rb +31 -56
- data/lib/sisimai/lhost/facebook.rb +21 -34
- 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 +11 -11
- data/lib/sisimai/lhost/gsuite.rb +21 -28
- 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 +37 -40
- data/lib/sisimai/lhost/mcafee.rb +21 -31
- data/lib/sisimai/lhost/messagelabs.rb +17 -21
- data/lib/sisimai/lhost/messagingserver.rb +40 -37
- data/lib/sisimai/lhost/mfilter.rb +16 -17
- data/lib/sisimai/lhost/mxlogic.rb +24 -33
- data/lib/sisimai/lhost/notes.rb +17 -17
- data/lib/sisimai/lhost/office365.rb +64 -28
- data/lib/sisimai/lhost/opensmtpd.rb +12 -13
- data/lib/sisimai/lhost/outlook.rb +12 -16
- data/lib/sisimai/lhost/postfix.rb +179 -130
- data/lib/sisimai/lhost/powermta.rb +12 -14
- data/lib/sisimai/lhost/qmail.rb +44 -47
- data/lib/sisimai/lhost/receivingses.rb +15 -21
- data/lib/sisimai/lhost/sendgrid.rb +34 -34
- data/lib/sisimai/lhost/sendmail.rb +65 -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 -21
- 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 +444 -326
- data/lib/sisimai/order.rb +5 -5
- data/lib/sisimai/reason/authfailure.rb +65 -0
- data/lib/sisimai/reason/badreputation.rb +53 -0
- data/lib/sisimai/reason/blocked.rb +96 -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 +7 -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 +11 -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 +34 -36
- data/lib/sisimai/reason/spamdetected.rb +115 -147
- data/lib/sisimai/reason/speeding.rb +49 -0
- data/lib/sisimai/reason/suspend.rb +12 -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 +177 -146
- 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/google.rb +530 -0
- 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 +51 -42
- data/lib/sisimai/rhost/nttdocomo.rb +12 -12
- 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 +507 -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 +46 -31
- 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/lhost-sendmail-60.eml +85 -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 +48 -26
- 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/lib/sisimai/rhost/googleapps.rb +0 -261
- /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,12 +1,11 @@
|
|
1
1
|
module Sisimai
|
2
2
|
module Reason
|
3
|
-
# Sisimai::Reason::PolicyViolation checks the bounce reason is "policyviolation"
|
4
|
-
#
|
3
|
+
# Sisimai::Reason::PolicyViolation checks the bounce reason is "policyviolation" or not. This class
|
4
|
+
# is called only Sisimai::Reason class.
|
5
5
|
#
|
6
|
-
# This is the error that a policy violation was detected on a destination mail
|
7
|
-
#
|
8
|
-
#
|
9
|
-
# will set "policyviolation".
|
6
|
+
# This is the error that a policy violation was detected on a destination mail host. When a header
|
7
|
+
# content or a format of the original message violates security policies, or multiple addresses
|
8
|
+
# exist in the From: header, Sisimai will set "policyviolation".
|
10
9
|
#
|
11
10
|
# Status: 5.7.0
|
12
11
|
# Remote-MTA: DNS; gmail-smtp-in.l.google.com
|
@@ -14,15 +13,15 @@ module Sisimai
|
|
14
13
|
# Last-Attempt-Date: Tue, 28 Apr 2009 11:02:45 +0900 (JST)
|
15
14
|
#
|
16
15
|
module PolicyViolation
|
17
|
-
# Imported from p5-Sisimail/lib/Sisimai/Reason/PolicyViolation.pm
|
18
16
|
class << self
|
17
|
+
require 'sisimai/string'
|
18
|
+
|
19
19
|
Index = [
|
20
20
|
'an illegal attachment on your message',
|
21
21
|
'because the recipient is not accepting mail with ', # AOL Phoenix
|
22
22
|
'by non-member to a members-only list',
|
23
23
|
'closed mailing list',
|
24
24
|
'denied by policy',
|
25
|
-
'dmarc policy',
|
26
25
|
'email not accepted for policy reasons',
|
27
26
|
# http://kb.mimecast.com/Mimecast_Knowledge_Base/Administration_Console/Monitoring/Mimecast_SMTP_Error_Codes#554
|
28
27
|
'email rejected due to security policies',
|
@@ -40,9 +39,11 @@ module Sisimai
|
|
40
39
|
'the message was rejected by organization policy',
|
41
40
|
'this message was blocked because its content presents a potential',
|
42
41
|
'we do not accept messages containing images or other attachments',
|
43
|
-
'
|
44
|
-
|
45
|
-
|
42
|
+
"you're using a mass mailer",
|
43
|
+
].freeze
|
44
|
+
Pairs = [
|
45
|
+
['you have exceeded the', 'allowable number of posts without solving a captcha'],
|
46
|
+
].freeze
|
46
47
|
|
47
48
|
def text; return 'policyviolation'; end
|
48
49
|
def description; return 'Email rejected due to policy violation on a destination host'; end
|
@@ -55,11 +56,12 @@ module Sisimai
|
|
55
56
|
def match(argv1)
|
56
57
|
return nil unless argv1
|
57
58
|
return true if Index.any? { |a| argv1.include?(a) }
|
59
|
+
return true if Pairs.any? { |a| Sisimai::String.aligned(argv1, a) }
|
58
60
|
return false
|
59
61
|
end
|
60
62
|
|
61
63
|
# The bounce reason is "policyviolation" or not
|
62
|
-
# @param [Sisimai::
|
64
|
+
# @param [Sisimai::Fact] argvs Object to be detected the reason
|
63
65
|
# @return [True,False] true: is policy violation
|
64
66
|
# false: is not policy violation
|
65
67
|
# @since 4.22.0
|
@@ -1,25 +1,23 @@
|
|
1
1
|
module Sisimai
|
2
2
|
module Reason
|
3
|
-
# Sisimai::Reason::Rejected checks the bounce reason is "rejected" or not.
|
4
|
-
#
|
3
|
+
# Sisimai::Reason::Rejected checks the bounce reason is "rejected" or not. This class is called
|
4
|
+
# only Sisimai::Reason class.
|
5
5
|
#
|
6
|
-
# This is the error that a connection to destination server was rejected by
|
7
|
-
#
|
8
|
-
#
|
9
|
-
#
|
10
|
-
# MAIL command.
|
6
|
+
# This is the error that a connection to destination server was rejected by a sender's email
|
7
|
+
# address (envelope from). Sisimai set "rejected" to the reason of email bounce if the value of
|
8
|
+
# Status: field in a bounce email is "5.1.8" or the connection has been rejected due to the
|
9
|
+
# argument of SMTP MAIL command.
|
11
10
|
#
|
12
11
|
# <kijitora@example.org>:
|
13
12
|
# Connected to 192.0.2.225 but sender was rejected.
|
14
13
|
# Remote host said: 550 5.7.1 <root@nijo.example.jp>... Access denied
|
15
14
|
module Rejected
|
16
|
-
# Imported from p5-Sisimail/lib/Sisimai/Reason/Rejected.pm
|
17
15
|
class << self
|
18
16
|
IsNot = [
|
19
17
|
'5.1.0 address rejected',
|
20
18
|
'recipient address rejected',
|
21
19
|
'sender ip address rejected',
|
22
|
-
]
|
20
|
+
].freeze
|
23
21
|
Index = [
|
24
22
|
'access denied (in reply to mail from command)',
|
25
23
|
'access denied (sender blacklisted)',
|
@@ -30,6 +28,7 @@ module Sisimai
|
|
30
28
|
'backscatter protection detected an invalid or expired email address', # MDaemon
|
31
29
|
"because the sender isn't on the recipient's list of senders to accept mail from",
|
32
30
|
'bogus mail from', # IMail - block empty sender
|
31
|
+
"can't determine purported responsible address",
|
33
32
|
'connections not accepted from servers without a valid sender domain',
|
34
33
|
'denied [bouncedeny]', # McAfee
|
35
34
|
'denied by secumail valid-address-filter',
|
@@ -55,6 +54,7 @@ module Sisimai
|
|
55
54
|
'returned mail not accepted here',
|
56
55
|
'rfc 1035 violation: recursive cname records for',
|
57
56
|
'rule imposed mailbox access for', # MailMarshal
|
57
|
+
'sending this from a different address or alias using the ',
|
58
58
|
'sender address has been blacklisted',
|
59
59
|
'sender email address rejected',
|
60
60
|
'sender is in my black list',
|
@@ -62,7 +62,8 @@ module Sisimai
|
|
62
62
|
'sender not pre-approved',
|
63
63
|
'sender rejected',
|
64
64
|
'sender domain is empty',
|
65
|
-
'sender verify failed',
|
65
|
+
'sender verify failed', # Exim callout
|
66
|
+
'spam reporting address', # SendGrid|a message to an address has previously been marked as Spam by the recipient.
|
66
67
|
'syntax error: empty email address',
|
67
68
|
'the message has been rejected by batv defense',
|
68
69
|
'this server does not accept mail from',
|
@@ -70,8 +71,9 @@ module Sisimai
|
|
70
71
|
'unroutable sender address',
|
71
72
|
'you are not allowed to post to this mailing list',
|
72
73
|
'you are sending to/from an address that has been blacklisted',
|
73
|
-
'your access to submit messages to this e-mail system has been rejected'
|
74
|
-
|
74
|
+
'your access to submit messages to this e-mail system has been rejected',
|
75
|
+
'your email address has been blacklisted', # MessageLabs
|
76
|
+
].freeze
|
75
77
|
|
76
78
|
def text; return 'rejected'; end
|
77
79
|
def description; return "Email rejected due to a sender's email address (envelope from)"; end
|
@@ -88,32 +90,32 @@ module Sisimai
|
|
88
90
|
end
|
89
91
|
|
90
92
|
# Rejected by the envelope sender address or not
|
91
|
-
# @param [Sisimai::
|
93
|
+
# @param [Sisimai::Fact] argvs Object to be detected the reason
|
92
94
|
# @return [True,False] true: is rejected
|
93
95
|
# false: is not rejected by the sender
|
94
96
|
# @see http://www.ietf.org/rfc/rfc2822.txt
|
95
97
|
def true(argvs)
|
96
|
-
return true if argvs
|
97
|
-
tempreason = Sisimai::SMTP::Status.name(argvs
|
98
|
+
return true if argvs['reason'] == 'rejected'
|
99
|
+
tempreason = Sisimai::SMTP::Status.name(argvs['deliverystatus']) || 'undefined'
|
98
100
|
return true if tempreason == 'rejected' # Delivery status code points "rejected".
|
99
101
|
|
100
102
|
# Check the value of Diagnosic-Code: header with patterns
|
101
|
-
|
102
|
-
|
103
|
-
if
|
103
|
+
issuedcode = argvs['diagnosticcode'].downcase
|
104
|
+
thecommand = argvs['smtpcommand'] || ''
|
105
|
+
if thecommand == 'MAIL'
|
104
106
|
# The session was rejected at 'MAIL FROM' command
|
105
|
-
return true if match(
|
107
|
+
return true if match(issuedcode)
|
106
108
|
|
107
|
-
elsif
|
109
|
+
elsif thecommand == 'DATA'
|
108
110
|
# The session was rejected at 'DATA' command
|
109
111
|
if tempreason != 'userunknown'
|
110
112
|
# Except "userunknown"
|
111
|
-
return true if match(
|
113
|
+
return true if match(issuedcode)
|
112
114
|
end
|
113
115
|
elsif %w[onhold undefined securityerror systemerror].include?(tempreason)
|
114
|
-
# Try to match with message patterns when the temporary reason
|
115
|
-
#
|
116
|
-
return true if match(
|
116
|
+
# Try to match with message patterns when the temporary reason is "onhold", "undefined",
|
117
|
+
# "securityerror", or "systemerror"
|
118
|
+
return true if match(issuedcode)
|
117
119
|
end
|
118
120
|
return false
|
119
121
|
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
module Sisimai
|
2
|
+
module Reason
|
3
|
+
# Sisimai::Reason::RequirePTR checks the bounce reason is "requireptr" or not. This class is
|
4
|
+
# called only from Sisimai::Reason class. This is the error that SMTP connection was rejected
|
5
|
+
# due to missing PTR record or having invalid PTR record at the source IP address used for the
|
6
|
+
# SMTP connection.
|
7
|
+
module RequirePTR
|
8
|
+
class << self
|
9
|
+
require 'sisimai/string'
|
10
|
+
|
11
|
+
Index = [
|
12
|
+
'access denied. ip name lookup failed',
|
13
|
+
'all mail servers must have a ptr record with a valid reverse dns entry',
|
14
|
+
'bad dns ptr resource record',
|
15
|
+
'cannot find your hostname',
|
16
|
+
'client host rejected: cannot find your hostname', # Yahoo!
|
17
|
+
'fix reverse dns for ',
|
18
|
+
'ips with missing ptr records',
|
19
|
+
'no ptr record found.',
|
20
|
+
'please get a custom reverse dns name from your isp for your host',
|
21
|
+
'ptr record setup',
|
22
|
+
'reverse dns failed',
|
23
|
+
'reverse dns required',
|
24
|
+
'sender ip reverse lookup rejected',
|
25
|
+
'the ip address sending this message does not have a ptr record setup', # Google
|
26
|
+
'the corresponding forward dns entry does not point to the sending ip', # Google
|
27
|
+
'this system will not accept messages from servers/devices with no reverse dns',
|
28
|
+
'unresolvable relay host name',
|
29
|
+
'we do not accept mail from hosts with dynamic ip or generic dns ptr-records',
|
30
|
+
].freeze
|
31
|
+
Pairs = [
|
32
|
+
['domain ',' mismatches client ip'],
|
33
|
+
['dns lookup failure: ', ' try again later'],
|
34
|
+
['reverse dns lookup for host ', ' failed permanently'],
|
35
|
+
['server access ', ' forbidden by invalid rdns record of your mail server'],
|
36
|
+
['service permits ', ' unverifyable sending ips'],
|
37
|
+
].freeze
|
38
|
+
|
39
|
+
def text; return 'requireptr'; end
|
40
|
+
def description; return 'Email rejected due to missing PTR record or having invalid PTR record'; end
|
41
|
+
|
42
|
+
# Try to match that the given text and regular expressions
|
43
|
+
# @param [String] argv1 String to be matched with regular expressions
|
44
|
+
# @return [True,False] false: Did not match
|
45
|
+
# true: Matched
|
46
|
+
def match(argv1)
|
47
|
+
return nil unless argv1
|
48
|
+
return true if Index.any? { |a| argv1.include?(a) }
|
49
|
+
return true if Pairs.any? { |a| Sisimai::String.aligned(argv1, a) }
|
50
|
+
return false
|
51
|
+
end
|
52
|
+
|
53
|
+
# Check the email rejected due to missing PTR record or having invalid PTR record OR not
|
54
|
+
# @param [Hash] argvs Hash to be detected the value of reason
|
55
|
+
# @return [true,false] true: is missing PTR or invalid PTR
|
56
|
+
# false: is not blocked due to missing PTR record
|
57
|
+
# @see http://www.ietf.org/rfc/rfc5322.txt
|
58
|
+
def true(argvs)
|
59
|
+
return true if argvs['reason'] == 'requireptr'
|
60
|
+
return true if Sisimai::SMTP::Status.name(argvs['deliverystatus']).to_s == 'requireptr'
|
61
|
+
return true if match(argvs['diagnosticcode'].downcase)
|
62
|
+
return false
|
63
|
+
end
|
64
|
+
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
@@ -1,14 +1,13 @@
|
|
1
1
|
module Sisimai
|
2
2
|
module Reason
|
3
|
-
# Sisimai::Reason::SecurityError checks the bounce reason is "securityerror"
|
4
|
-
#
|
3
|
+
# Sisimai::Reason::SecurityError checks the bounce reason is "securityerror" or not. This class
|
4
|
+
# is called only Sisimai::Reason class.
|
5
5
|
#
|
6
|
-
# This is the error that a security violation was detected on a destination
|
7
|
-
#
|
8
|
-
# address is camouflaged address.
|
6
|
+
# This is the error that a security violation was detected on a destination mail server. Depends
|
7
|
+
# on the security policy on the server, a sender's email address is camouflaged address.
|
9
8
|
#
|
10
|
-
# Sisimai will set "securityerror" to the reason
|
11
|
-
#
|
9
|
+
# Sisimai will set "securityerror" to the reason of email bounce if the value of Status: field
|
10
|
+
# in a bounce email is "5.7.*".
|
12
11
|
#
|
13
12
|
# Action: failed
|
14
13
|
# Status: 5.7.1
|
@@ -17,34 +16,32 @@ module Sisimai
|
|
17
16
|
# Last-Attempt-Date: Tue, 28 Apr 2009 11:02:45 +0900 (JST)
|
18
17
|
#
|
19
18
|
module SecurityError
|
20
|
-
# Imported from p5-Sisimail/lib/Sisimai/Reason/SecurityError.pm
|
21
19
|
class << self
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
}x
|
20
|
+
require 'sisimai/string'
|
21
|
+
|
22
|
+
Index = [
|
23
|
+
'account not subscribed to ses',
|
24
|
+
'authentication credentials invalid',
|
25
|
+
'authentication failure',
|
26
|
+
'authentication required',
|
27
|
+
'authentication turned on in your email client',
|
28
|
+
'executable files are not allowed in compressed files',
|
29
|
+
'insecure mail relay',
|
30
|
+
'recipient address rejected: access denied',
|
31
|
+
"sorry, you don't authenticate or the domain isn't in my list of allowed rcpthosts",
|
32
|
+
'starttls is required to send mail',
|
33
|
+
'tls required but not supported', # SendGrid:the recipient mailserver does not support TLS or have a valid certificate
|
34
|
+
'unauthenticated senders not allowed',
|
35
|
+
'verification failure',
|
36
|
+
'you are not authorized to send mail, authentication is required',
|
37
|
+
].freeze
|
38
|
+
Pairs = [
|
39
|
+
['authentication failed; server ', ' said: '], # Postfix
|
40
|
+
['authentification invalide', '305'],
|
41
|
+
['authentification requise', '402'],
|
42
|
+
['domain ', ' is a dead domain'],
|
43
|
+
['user ', ' is not authorized to perform ses:sendrawemail on resource'],
|
44
|
+
].freeze
|
48
45
|
|
49
46
|
def text; return 'securityerror'; end
|
50
47
|
def description; return 'Email rejected due to security violation was detected on a destination host'; end
|
@@ -55,12 +52,13 @@ module Sisimai
|
|
55
52
|
# true: Matched
|
56
53
|
def match(argv1)
|
57
54
|
return nil unless argv1
|
58
|
-
return true if argv1
|
55
|
+
return true if Index.any? { |a| argv1.include?(a) }
|
56
|
+
return true if Pairs.any? { |a| Sisimai::String.aligned(argv1, a) }
|
59
57
|
return false
|
60
58
|
end
|
61
59
|
|
62
60
|
# The bounce reason is security error or not
|
63
|
-
# @param [Sisimai::
|
61
|
+
# @param [Sisimai::Fact] argvs Object to be detected the reason
|
64
62
|
# @return [True,False] true: is security error
|
65
63
|
# false: is not security error
|
66
64
|
# @see http://www.ietf.org/rfc/rfc2822.txt
|