sisimai 4.22.2 → 4.22.3
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of sisimai might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/ANALYTICAL-PRECISION +24 -23
- data/ChangeLog.md +39 -2
- data/README-JA.md +10 -10
- data/README.md +10 -10
- data/lib/sisimai.rb +0 -1
- data/lib/sisimai/bite/email.rb +1 -1
- data/lib/sisimai/bite/email/amazonses.rb +1 -2
- data/lib/sisimai/bite/email/exim.rb +46 -8
- data/lib/sisimai/bite/email/fml.rb +170 -0
- data/lib/sisimai/bite/email/imailserver.rb +1 -1
- data/lib/sisimai/bite/email/messagelabs.rb +6 -1
- data/lib/sisimai/bite/email/office365.rb +0 -1
- data/lib/sisimai/data.rb +34 -12
- data/lib/sisimai/datetime.rb +10 -4
- data/lib/sisimai/reason.rb +70 -55
- data/lib/sisimai/reason/blocked.rb +91 -21
- data/lib/sisimai/reason/expired.rb +7 -3
- data/lib/sisimai/reason/filtered.rb +1 -0
- data/lib/sisimai/reason/hostunknown.rb +9 -5
- data/lib/sisimai/reason/mailboxfull.rb +17 -9
- data/lib/sisimai/reason/mailererror.rb +5 -4
- data/lib/sisimai/reason/mesgtoobig.rb +2 -0
- data/lib/sisimai/reason/networkerror.rb +11 -3
- data/lib/sisimai/reason/norelaying.rb +5 -2
- data/lib/sisimai/reason/policyviolation.rb +9 -2
- data/lib/sisimai/reason/rejected.rb +41 -10
- data/lib/sisimai/reason/securityerror.rb +2 -0
- data/lib/sisimai/reason/spamdetected.rb +37 -20
- data/lib/sisimai/reason/suspend.rb +10 -4
- data/lib/sisimai/reason/systemerror.rb +1 -0
- data/lib/sisimai/reason/toomanyconn.rb +4 -0
- data/lib/sisimai/reason/userunknown.rb +40 -20
- data/lib/sisimai/reason/vacation.rb +20 -1
- data/lib/sisimai/reason/virusdetected.rb +3 -1
- data/lib/sisimai/rfc3464.rb +3 -4
- data/lib/sisimai/rfc3834.rb +37 -6
- data/lib/sisimai/rhost.rb +2 -1
- data/lib/sisimai/rhost/exchangeonline.rb +29 -0
- data/lib/sisimai/rhost/franceptt.rb +58 -0
- data/lib/sisimai/smtp/status.rb +1 -0
- data/lib/sisimai/version.rb +1 -1
- data/set-of-emails/jsonobj/json-amazonses-06.json +1 -0
- data/set-of-emails/maildir/bsd/email-exim-31.eml +39 -0
- data/set-of-emails/maildir/bsd/email-exim-32.eml +42 -0
- data/set-of-emails/maildir/bsd/email-exim-33.eml +42 -0
- data/set-of-emails/maildir/bsd/email-exim-34.eml +41 -0
- data/set-of-emails/maildir/bsd/email-exim-35.eml +41 -0
- data/set-of-emails/maildir/bsd/email-exim-36.eml +41 -0
- data/set-of-emails/maildir/bsd/email-exim-37.eml +41 -0
- data/set-of-emails/maildir/bsd/email-exim-38.eml +32 -0
- data/set-of-emails/maildir/bsd/email-exim-39.eml +47 -0
- data/set-of-emails/maildir/bsd/email-exim-40.eml +41 -0
- data/set-of-emails/maildir/bsd/email-exim-41.eml +32 -0
- data/set-of-emails/maildir/bsd/email-exim-42.eml +41 -0
- data/set-of-emails/maildir/bsd/email-exim-43.eml +60 -0
- data/set-of-emails/maildir/bsd/email-exim-44.eml +64 -0
- data/set-of-emails/maildir/bsd/email-exim-45.eml +43 -0
- data/set-of-emails/maildir/bsd/email-exim-46.eml +41 -0
- data/set-of-emails/maildir/bsd/email-exim-47.eml +42 -0
- data/set-of-emails/maildir/bsd/email-exim-48.eml +59 -0
- data/set-of-emails/maildir/bsd/email-exim-49.eml +59 -0
- data/set-of-emails/maildir/bsd/email-exim-50.eml +41 -0
- data/set-of-emails/maildir/bsd/email-exim-51.eml +41 -0
- data/set-of-emails/maildir/bsd/email-exim-52.eml +34 -0
- data/set-of-emails/maildir/bsd/email-exim-53.eml +48 -0
- data/set-of-emails/maildir/bsd/email-exim-54.eml +40 -0
- data/set-of-emails/maildir/bsd/email-exim-55.eml +38 -0
- data/set-of-emails/maildir/bsd/email-exim-56.eml +40 -0
- data/set-of-emails/maildir/bsd/email-exim-57.eml +39 -0
- data/set-of-emails/maildir/bsd/email-exim-58.eml +43 -0
- data/set-of-emails/maildir/bsd/email-fml-01.eml +70 -0
- data/set-of-emails/maildir/bsd/email-fml-02.eml +44 -0
- data/set-of-emails/maildir/bsd/email-office365-03.eml +117 -0
- data/set-of-emails/maildir/bsd/email-postfix-31.eml +94 -0
- data/set-of-emails/maildir/bsd/email-sendmail-45.eml +102 -0
- data/set-of-emails/maildir/bsd/email-sendmail-46.eml +103 -0
- data/set-of-emails/maildir/bsd/email-sendmail-47.eml +102 -0
- data/set-of-emails/maildir/bsd/email-sendmail-48.eml +101 -0
- data/set-of-emails/maildir/bsd/rfc3464-33.eml +38 -0
- data/set-of-emails/maildir/bsd/rfc3464-34.eml +53 -0
- data/set-of-emails/maildir/bsd/rhost-exchange-online-02.eml +89 -0
- data/set-of-emails/maildir/bsd/rhost-exchange-online-03.eml +205 -0
- data/set-of-emails/maildir/bsd/rhost-franceptt-01.eml +102 -0
- data/set-of-emails/maildir/bsd/rhost-franceptt-02.eml +103 -0
- metadata +47 -2
@@ -20,18 +20,22 @@ module Sisimai
|
|
20
20
|
# true: Matched
|
21
21
|
def match(argv1)
|
22
22
|
return nil unless argv1
|
23
|
-
regex = %r{(
|
23
|
+
regex = %r{(?>
|
24
24
|
connection[ ]timed[ ]out
|
25
25
|
|could[ ]not[ ]find[ ]a[ ]gateway[ ]for
|
26
26
|
|delivery[ ]time[ ]expired
|
27
|
+
|Failed[ ]to[ ]deliver[ ]to[ ]domain[ ].+[ ]after[ ]\d+[ ]tries
|
27
28
|
|giving[ ]up[ ]on
|
28
29
|
|it[ ]has[ ]not[ ]been[ ]collected[ ]after
|
29
|
-
|message[ ]
|
30
|
-
|
30
|
+
|message[ ](?:
|
31
|
+
expired[ ]after[ ]sitting[ ]in[ ]queue[ ]for
|
32
|
+
|timed[ ]out
|
33
|
+
)
|
31
34
|
|retry[ ]time[ ]not[ ]reached[ ]for[ ]any[ ]host[ ]after[ ]a[ ]long[ ]failure[ ]period
|
32
35
|
|server[ ]did[ ]not[ ]respond
|
33
36
|
|this[ ]message[ ]has[ ]been[ ]in[ ]the[ ]queue[ ]too[ ]long
|
34
37
|
|was[ ]not[ ]reachable[ ]within[ ]the[ ]allowed[ ]queue[ ]period
|
38
|
+
|Your[ ]message[ ]could[ ]not[ ]be[ ]delivered[ ]for[ ]more[ ]than
|
35
39
|
)
|
36
40
|
}ix
|
37
41
|
|
@@ -16,14 +16,15 @@ module Sisimai
|
|
16
16
|
# Try to match that the given text and regular expressions
|
17
17
|
# @param [String] argv1 String to be matched with regular expressions
|
18
18
|
# @return [True,False] false: Did not match
|
19
|
-
# true:
|
19
|
+
# true: Matched
|
20
|
+
# @since v4.0.0
|
20
21
|
def match(argv1)
|
21
22
|
return nil unless argv1
|
22
23
|
regex = %r{(?>
|
23
24
|
domain[ ](?:
|
24
25
|
does[ ]not[ ]exist
|
25
|
-
|must[ ]exist
|
26
26
|
|is[ ]not[ ]reachable
|
27
|
+
|must[ ]exist
|
27
28
|
)
|
28
29
|
|host[ ](?:
|
29
30
|
or[ ]domain[ ]name[ ]not[ ]found
|
@@ -34,10 +35,12 @@ module Sisimai
|
|
34
35
|
|name[ ]or[ ]service[ ]not[ ]known
|
35
36
|
|no[ ]such[ ]domain
|
36
37
|
|recipient[ ](?:
|
37
|
-
|
38
|
-
domain[ ]must[ ]exist
|
38
|
+
address[ ]rejected:[ ]unknown[ ]domain[ ]name
|
39
|
+
|domain[ ]must[ ]exist
|
39
40
|
)
|
41
|
+
|The[ ]account[ ]or[ ]domain[ ]may[ ]not[ ]exist
|
40
42
|
|unknown[ ]host
|
43
|
+
|Unrouteable[ ]address
|
41
44
|
)
|
42
45
|
}ix
|
43
46
|
|
@@ -65,7 +68,8 @@ module Sisimai
|
|
65
68
|
if tempreason == reasontext
|
66
69
|
# Status: 5.1.2
|
67
70
|
# Diagnostic-Code: SMTP; 550 Host unknown
|
68
|
-
|
71
|
+
require 'sisimai/reason/networkerror'
|
72
|
+
v = true unless Sisimai::Reason::NetworkError.match(diagnostic)
|
69
73
|
else
|
70
74
|
# Check the value of Diagnosic-Code: header with patterns
|
71
75
|
v = true if Sisimai::Reason::HostUnknown.match(diagnostic)
|
@@ -21,19 +21,23 @@ module Sisimai
|
|
21
21
|
def match(argv1)
|
22
22
|
return nil unless argv1
|
23
23
|
regex = %r{(?>
|
24
|
-
|
24
|
+
Account[ ]disabled[ ]temporarly[ ]for[ ]exceeding[ ]receiving[ ]limits
|
25
|
+
|account[ ]is[ ](?:
|
25
26
|
exceeding[ ]their[ ]quota
|
26
27
|
|over[ ]quota
|
27
28
|
|temporarily[ ]over[ ]quota
|
28
29
|
)
|
30
|
+
|Boite[ ]du[ ]destinataire[ ]pleine.+[A-Z]{3}.+417
|
29
31
|
|delivery[ ]failed:[ ]over[ ]quota
|
30
32
|
|disc[ ]quota[ ]exceeded
|
31
33
|
|does[ ]not[ ]have[ ]enough[ ]space
|
32
34
|
|exceeded[ ]storage[ ]allocation
|
33
35
|
|exceeding[ ]its[ ]mailbox[ ]quota
|
34
36
|
|full[ ]mailbox
|
35
|
-
|is[ ]over[ ]
|
36
|
-
|
37
|
+
|is[ ]over[ ](?:
|
38
|
+
disk[ ]quota
|
39
|
+
|quota[ ]temporarily
|
40
|
+
)
|
37
41
|
|mail[ ](?:
|
38
42
|
file[ ]size[ ]exceeds[ ]the[ ]maximum[ ]size[ ]allowed[ ]for[ ]mail[ ]delivery
|
39
43
|
|quota[ ]exceeded
|
@@ -54,22 +58,26 @@ module Sisimai
|
|
54
58
|
|mailfolder[ ]is[ ]full
|
55
59
|
|not[ ]enough[ ]storage[ ]space[ ]in
|
56
60
|
|over[ ]the[ ]allowed[ ]quota
|
57
|
-
|quota[ ]
|
58
|
-
|
61
|
+
|quota[ ](?:
|
62
|
+
exceeded
|
63
|
+
|violation[ ]for
|
64
|
+
)
|
59
65
|
|recipient[ ](?:
|
60
66
|
reached[ ]disk[ ]quota
|
61
67
|
|rejected:[ ]mailbox[ ]would[ ]exceed[ ]maximum[ ]allowed[ ]storage
|
62
68
|
)
|
63
|
-
|The[ ]
|
64
|
-
|
69
|
+
|The[ ](?:
|
70
|
+
recipient[ ]mailbox[ ]has[ ]exceeded[ ]its[ ]disk[ ]space[ ]limit
|
71
|
+
|user[']s[ ]space[ ]has[ ]been[ ]used[ ]up
|
72
|
+
|user[ ]you[ ]are[ ]trying[ ]to[ ]reach[ ]is[ ]over[ ]quota
|
73
|
+
)
|
65
74
|
|too[ ]much[ ]mail[ ]data # @docomo.ne.jp
|
66
75
|
|user[ ](?:
|
67
76
|
has[ ](?:
|
68
77
|
exceeded[ ]quota,[ ]bouncing[ ]mail
|
69
78
|
|too[ ]many[ ]messages[ ]on[ ]the[ ]server
|
70
79
|
)
|
71
|
-
|is[ ]over[ ]quota
|
72
|
-
|is[ ]over[ ]the[ ]quota
|
80
|
+
|is[ ]over[ ](?:the[ ])?quota
|
73
81
|
|over[ ]quota
|
74
82
|
|over[ ]quota[.][ ][(][#]5[.]1[.]1[)] # qmail-toaster
|
75
83
|
)
|
@@ -23,16 +23,17 @@ module Sisimai
|
|
23
23
|
def match(argv1)
|
24
24
|
return nil unless argv1
|
25
25
|
regex = %r{(?>
|
26
|
-
|
26
|
+
\Aprocmail:[ ] # procmail
|
27
|
+
|bin/(?:procmail|maildrop)
|
28
|
+
|command[ ](?:
|
27
29
|
failed:[ ]
|
28
30
|
|died[ ]with[ ]status[ ]\d+
|
29
31
|
|output:
|
30
32
|
)
|
31
|
-
|
32
|
-
|bin/(?:procmail|maildrop)
|
33
|
+
|exit[ ]\d+
|
33
34
|
|mailer[ ]error
|
35
|
+
|pipe[ ]to[ ][|][/].+
|
34
36
|
|X[-]UNIX[;][ ]\d+ # X-UNIX; 127
|
35
|
-
|exit[ ]\d+
|
36
37
|
)
|
37
38
|
}ix
|
38
39
|
|
@@ -21,6 +21,7 @@ module Sisimai
|
|
21
21
|
return nil unless argv1
|
22
22
|
regex = %r{(?>
|
23
23
|
exceeded[ ]maximum[ ]inbound[ ]message[ ]size
|
24
|
+
|Line[ ]limit[ ]exceeded
|
24
25
|
|max[ ]message[ ]size[ ]exceeded
|
25
26
|
|message[ ](?:
|
26
27
|
file[ ]too[ ]big
|
@@ -34,6 +35,7 @@ module Sisimai
|
|
34
35
|
|too[ ]large[ ]for[ ]this[ ].+
|
35
36
|
)
|
36
37
|
|size[ ]limit
|
38
|
+
|Taille[ ]limite[ ]du[ ]message[ ]atteinte.+[A-Z]{3}.+514
|
37
39
|
)
|
38
40
|
}ix
|
39
41
|
|
@@ -24,7 +24,7 @@ module Sisimai
|
|
24
24
|
# true: Matched
|
25
25
|
def match(argv1)
|
26
26
|
return nil unless argv1
|
27
|
-
regex = %r{(
|
27
|
+
regex = %r{(?>
|
28
28
|
could[ ]not[ ]connect[ ]and[ ]send[ ]the[ ]mail[ ]to
|
29
29
|
|DNS[ ]records[ ]for[ ]the[ ]destination[ ]computer[ ]could[ ]not[ ]be[ ]found
|
30
30
|
|Hop[ ]count[ ]exceeded[ ]-[ ]possible[ ]mail[ ]loop
|
@@ -32,9 +32,17 @@ module Sisimai
|
|
32
32
|
|mail[ ]forwarding[ ]loop[ ]for[ ]
|
33
33
|
|malformed[ ]name[ ]server[ ]reply
|
34
34
|
|maximum[ ]forwarding[ ]loop[ ]count[ ]exceeded
|
35
|
-
|message[ ]
|
36
|
-
|
35
|
+
|message[ ](?:
|
36
|
+
looping
|
37
|
+
|probably[ ]in[ ]a[ ]routing[ ]loop
|
38
|
+
)
|
39
|
+
|name[ ]service[ ]error[ ]for[ ].+[ ](?:
|
40
|
+
Malformed[ ]or[ ]unexpected[ ]name[ ]server[ ]reply
|
41
|
+
|Host[ ]not[ ]found,[ ]try[ ]again
|
42
|
+
)
|
43
|
+
|No[ ]route[ ]to[ ]host
|
37
44
|
|too[ ]many[ ]hops
|
45
|
+
|Unable[ ]to[ ]resolve[ ]route[ ].+[ ]
|
38
46
|
|unrouteable[ ]mail[ ]domain
|
39
47
|
)
|
40
48
|
}ix
|
@@ -29,8 +29,10 @@ module Sisimai
|
|
29
29
|
|Insecure[ ]Mail[ ]Relay
|
30
30
|
|mail[ ]server[ ]requires[ ]authentication[ ]when[ ]attempting[ ]to[ ]
|
31
31
|
send[ ]to[ ]a[ ]non-local[ ]e-mail[ ]address # MailEnable
|
32
|
-
|not[ ]
|
33
|
-
|
32
|
+
|not[ ](?:
|
33
|
+
allowed[ ]to[ ]relay[ ]through[ ]this[ ]machine
|
34
|
+
|an[ ]open[ ]relay,[ ]so[ ]get[ ]lost
|
35
|
+
)
|
34
36
|
|relay[ ](?:
|
35
37
|
access[ ]denied
|
36
38
|
|denied
|
@@ -38,6 +40,7 @@ module Sisimai
|
|
38
40
|
)
|
39
41
|
|relaying[ ]denied # Sendmail
|
40
42
|
|that[ ]domain[ ]isn[']t[ ]in[ ]my[ ]list[ ]of[ ]allowed[ ]rcpthost
|
43
|
+
|This[ ]system[ ]is[ ]not[ ]configured[ ]to[ ]relay[ ]mail
|
41
44
|
|Unable[ ]to[ ]relay[ ]for
|
42
45
|
)
|
43
46
|
}ix
|
@@ -31,15 +31,22 @@ module Sisimai
|
|
31
31
|
regex = %r{(?>
|
32
32
|
because[ ]the[ ]recipient[ ]is[ ]not[ ]accepting[ ]mail[ ]with[ ](?:attachments|embedded[ ]images) # AOL Phoenix
|
33
33
|
|closed[ ]mailing[ ]list
|
34
|
+
|Denied[ ]by[ ]policy
|
34
35
|
|email[ ](?:
|
35
36
|
not[ ]accepted[ ]for[ ]policy[ ]reasons
|
36
37
|
# http://kb.mimecast.com/Mimecast_Knowledge_Base/Administration_Console/Monitoring/Mimecast_SMTP_Error_Codes#554
|
37
38
|
|rejected[ ]due[ ]to[ ]security[ ]policies
|
38
39
|
)
|
39
|
-
|header[ ]are[ ]not[ ]accepted
|
40
|
-
|
|
40
|
+
|header[ ](?:are[ ]not[ ]accepted|error)
|
41
|
+
|Mail[ ]from[ ].+[ ]rejected[ ]for[ ]policy[ ]reasons
|
42
|
+
|message[ ](?:
|
43
|
+
given[ ]low[ ]priority
|
44
|
+
|not[ ]accepted[ ]for[ ]policy[ ]reasons
|
45
|
+
)
|
41
46
|
|Messages[ ]with[ ]multiple[ ]addresses
|
42
47
|
|You[ ]have[ ]exceeded[ ]the[ ]the[ ]allowable[ ]number[ ]of[ ]posts[ ]without[ ]solving[ ]a[ ]captcha
|
48
|
+
|Protocol[ ]violation
|
49
|
+
|The[ ]email[ ]address[ ]used[ ]to[ ]send[ ]your[ ]message[ ]is[ ]not[ ]subscribed[ ]to[ ]this[ ]group
|
43
50
|
)
|
44
51
|
}ix
|
45
52
|
|
@@ -26,43 +26,58 @@ module Sisimai
|
|
26
26
|
# true: Matched
|
27
27
|
def match(argv1)
|
28
28
|
return nil unless argv1
|
29
|
+
isnot = %r{(?:5[.]1[.]0[ ]Address
|
30
|
+
|Recipient[ ]address
|
31
|
+
|Sender[ ]IP[ ]address
|
32
|
+
)[ ]rejected
|
33
|
+
}xi
|
29
34
|
regex = %r{(?>
|
30
35
|
[<][>][ ]invalid[ ]sender
|
31
36
|
|address[ ]rejected
|
37
|
+
|Administrative[ ]prohibition
|
32
38
|
|batv[ ](?:
|
33
39
|
failed[ ]to[ ]verify # SoniWall
|
34
40
|
|validation[ ]failure # SoniWall
|
35
41
|
)
|
36
42
|
|backscatter[ ]protection[ ]detected[ ]an[ ]invalid[ ]or[ ]expired[ ]email[ ]address # MDaemon
|
37
43
|
|bogus[ ]mail[ ]from # IMail - block empty sender
|
38
|
-
|
|
44
|
+
|Connections[ ]not[ ]accepted[ ]from[ ]servers[ ]without[ ]a[ ]valid[ ]sender[ ]domain
|
39
45
|
|denied[ ]\[bouncedeny\] # McAfee
|
46
|
+
|Delivery[ ]not[ ]authorized,[ ]message[ ]refused
|
47
|
+
|does[ ]not[ ]exist[ ]E2110
|
40
48
|
|domain[ ]of[ ]sender[ ]address[ ].+[ ]does[ ]not[ ]exist
|
49
|
+
|Emetteur[ ]invalide.+[A-Z]{3}.+(?:403|405|415)
|
41
50
|
|empty[ ]envelope[ ]senders[ ]not[ ]allowed
|
42
51
|
|error:[ ]no[ ]third-party[ ]dsns # SpamWall - block empty sender
|
52
|
+
|From:[ ]Domain[ ]is[ ]invalid[.][ ]Please[ ]provide[ ]a[ ]valid[ ]From:
|
43
53
|
|fully[ ]qualified[ ]email[ ]address[ ]required # McAfee
|
44
54
|
|invalid[ ]domain,[ ]see[ ][<]url:.+[>]
|
55
|
+
|Mail[ ]from[ ]not[ ]owned[ ]by[ ]user.+[A-Z]{3}.+421
|
45
56
|
|Message[ ]rejected:[ ]Email[ ]address[ ]is[ ]not[ ]verified
|
46
57
|
|mx[ ]records[ ]for[ ].+[ ]violate[ ]section[ ].+
|
47
|
-
|name[ ]service[ ]error[ ]for[ ] # Malformed MX RR or host not found
|
48
58
|
|Null[ ]Sender[ ]is[ ]not[ ]allowed
|
49
59
|
|recipient[ ]not[ ]accepted[.][ ][(]batv:[ ]no[ ]tag
|
50
60
|
|returned[ ]mail[ ]not[ ]accepted[ ]here
|
51
61
|
|rfc[ ]1035[ ]violation:[ ]recursive[ ]cname[ ]records[ ]for
|
52
62
|
|rule[ ]imposed[ ]mailbox[ ]access[ ]for # MailMarshal
|
53
63
|
|sender[ ](?:
|
54
|
-
|
64
|
+
email[ ]address[ ]rejected
|
65
|
+
|is[ ]Spammer
|
55
66
|
|not[ ]pre[-]approved
|
56
67
|
|rejected
|
57
68
|
|domain[ ]is[ ]empty
|
69
|
+
|verify[ ]failed # Exim callout
|
58
70
|
)
|
59
71
|
|syntax[ ]error:[ ]empty[ ]email[ ]address
|
60
72
|
|the[ ]message[ ]has[ ]been[ ]rejected[ ]by[ ]batv[ ]defense
|
61
73
|
|transaction[ ]failed[ ]unsigned[ ]dsn[ ]for
|
74
|
+
|Unroutable[ ]sender[ ]address
|
75
|
+
|you[ ]are[ ]sending[ ]to[/]from[ ]an[ ]address[ ]that[ ]has[ ]been[ ]blacklisted
|
62
76
|
)
|
63
77
|
}ix
|
64
78
|
|
65
|
-
return
|
79
|
+
return false if argv1 =~ isnot
|
80
|
+
return true if argv1 =~ regex
|
66
81
|
return false
|
67
82
|
end
|
68
83
|
|
@@ -74,23 +89,39 @@ module Sisimai
|
|
74
89
|
def true(argvs)
|
75
90
|
return nil unless argvs
|
76
91
|
return nil unless argvs.is_a? Sisimai::Data
|
77
|
-
return nil unless argvs.deliverystatus.size > 0
|
78
|
-
return true if argvs.reason == Sisimai::Reason::Rejected.text
|
79
92
|
|
80
93
|
require 'sisimai/smtp/status'
|
81
94
|
statuscode = argvs.deliverystatus || ''
|
82
|
-
diagnostic = argvs.diagnosticcode || ''
|
83
95
|
reasontext = Sisimai::Reason::Rejected.text
|
96
|
+
|
97
|
+
return true if argvs.reason == reasontext
|
98
|
+
|
99
|
+
tempreason = Sisimai::SMTP::Status.name(statuscode)
|
100
|
+
tempreason = 'undefined' if tempreason.empty?
|
101
|
+
diagnostic = argvs.diagnosticcode || ''
|
84
102
|
v = false
|
85
103
|
|
86
|
-
if
|
87
|
-
# Delivery status code points
|
104
|
+
if tempreason == reasontext
|
105
|
+
# Delivery status code points "rejected".
|
88
106
|
v = true
|
89
107
|
else
|
90
108
|
# Check the value of Diagnosic-Code: header with patterns
|
91
109
|
if argvs.smtpcommand == 'MAIL'
|
92
|
-
#
|
110
|
+
# The session was rejected at 'MAIL FROM' command
|
93
111
|
v = true if Sisimai::Reason::Rejected.match(diagnostic)
|
112
|
+
|
113
|
+
elsif argvs.smtpcommand == 'DATA'
|
114
|
+
# The session was rejected at 'DATA' command
|
115
|
+
if tempreason != 'userunknown'
|
116
|
+
# Except "userunknown"
|
117
|
+
v = true if Sisimai::Reason::Rejected.match(diagnostic)
|
118
|
+
end
|
119
|
+
else
|
120
|
+
if tempreason =~ /\A(?:onhold|undefined|securityerror|systemerror)\z/
|
121
|
+
# Try to match with message patterns when the temporary reason
|
122
|
+
# is "onhold", "undefined", "securityerror", or "systemerror"
|
123
|
+
v = true if Sisimai::Reason::Rejected.match(diagnostic)
|
124
|
+
end
|
94
125
|
end
|
95
126
|
end
|
96
127
|
|
@@ -32,6 +32,7 @@ module Sisimai
|
|
32
32
|
return nil unless argv1
|
33
33
|
regex = %r{(?>
|
34
34
|
Account[ ]not[ ]subscribed[ ]to[ ]SES
|
35
|
+
|Authentification[ ]requise.+[A-Z]{3}.+402
|
35
36
|
|authentication[ ](?:
|
36
37
|
Credentials Invalid
|
37
38
|
|failure
|
@@ -40,6 +41,7 @@ module Sisimai
|
|
40
41
|
|turned[ ]on[ ]in[ ]your[ ]email[ ]client
|
41
42
|
)
|
42
43
|
|\d+[ ]denied[ ]\[[a-z]+\][ ].+[(]Mode:[ ].+[)]
|
44
|
+
|Codes?[ ]d'?[ ]*authentification[ ]invalide.+[A-Z]{3}.+305
|
43
45
|
|domain[ ].+[ ]is[ ]a[ ]dead[ ]domain
|
44
46
|
|Executable[ ]files[ ]are[ ]not[ ]allowed[ ]in[ ]compressed[ ]files
|
45
47
|
|insecure[ ]mail[ ]relay
|
@@ -45,34 +45,40 @@ module Sisimai
|
|
45
45
|
|denied[ ]due[ ]to[ ]spam[ ]list
|
46
46
|
|dt:spm[ ]mx.+[ ]http://mail[.]163[.]com/help/help_spam_16[.]htm
|
47
47
|
|greylisted.?.[ ]please[ ]try[ ]again[ ]in
|
48
|
-
|http://(?:
|
49
|
-
www[.]spamhaus[.]org
|
50
|
-
|dsbl[.]org
|
51
|
-
|www[.]sorbs[.]net
|
52
|
-
)
|
48
|
+
|http://(?:www[.]spamhaus[.]org|dsbl[.]org)
|
53
49
|
|listed[ ]in[ ]work[.]drbl[.]imedia[.]ru
|
54
50
|
|mail[ ](?:
|
55
51
|
appears[ ]to[ ]be[ ]unsolicited # rejected due to spam
|
56
52
|
|content[ ]denied # http://service.mail.qq.com/cgi-bin/help?subtype=1&&id=20022&&no=1000726
|
53
|
+
|rejete.+[A-Z]{3}.+506
|
57
54
|
)
|
58
55
|
|may[ ]consider[ ]spam
|
59
56
|
|message[ ](?:
|
60
|
-
|
57
|
+
considered[ ]as[ ]spam[ ]or[ ]virus
|
58
|
+
|content[ ]rejected
|
61
59
|
|filtered
|
62
|
-
|filtered[.][ ]
|
63
|
-
|
60
|
+
|filtered[.][ ](?:
|
61
|
+
please[ ]see[ ]the[ ]faqs[ ]section[ ]on[ ]spam
|
62
|
+
|Refer[ ]to[ ]the[ ]Troubleshooting[ ]page[ ]at[ ]
|
63
|
+
)
|
64
64
|
|looks[ ]like[ ]spam
|
65
65
|
|not[ ]accepted[ ]for[ ]policy[ ]reasons[.][ ]See[ ]http: # Yahoo!
|
66
66
|
|refused[ ]by[ ]mailmarshal[ ]spamprofiler
|
67
|
-
|rejected[ ]
|
68
|
-
|
69
|
-
|
70
|
-
|
67
|
+
|rejected[ ](?:
|
68
|
+
as[ ]spam
|
69
|
+
|because[ ]of[ ]unacceptable[ ]content
|
70
|
+
|due[ ]to[ ]suspected[ ]spam[ ]content
|
71
|
+
|for[ ]policy[ ]reasons
|
72
|
+
)
|
73
|
+
)
|
74
|
+
|our[ ](?:
|
75
|
+
email[ ]server[ ]thinks[ ]this[ ]email[ ]is[ ]spam
|
76
|
+
|filters[ ]rate[ ]at[ ]and[ ]above[ ].+[ ]percent[ ]probability[ ]of[ ]being[ ]spam
|
77
|
+
|system[ ]has[ ]detected[ ]that[ ]this[ ]message[ ]is
|
71
78
|
)
|
72
|
-
|our[ ]email[ ]server[ ]thinks[ ]this[ ]email[ ]is[ ]spam
|
73
|
-
|our[ ]filters[ ]rate[ ]at[ ]and[ ]above[ ].+[ ]percent[ ]probability[ ]of[ ]being[ ]spam
|
74
|
-
|our[ ]system[ ]has[ ]detected[ ]that[ ]this[ ]message[ ]is
|
75
79
|
|probable[ ]spam
|
80
|
+
|REJECT[ ]bulk[.]advertising
|
81
|
+
|Reject,.+[ ][-][ ]SPAM[.][ ]
|
76
82
|
|rejected(?:
|
77
83
|
:[ ]spamassassin[ ]score[ ]
|
78
84
|
|[ ]by[ ].+[ ][(]spam[)]
|
@@ -101,13 +107,24 @@ module Sisimai
|
|
101
107
|
|spambouncer[ ]identified[ ]spam # SpamBouncer identified SPAM
|
102
108
|
|spamming[ ]not[ ]allowed
|
103
109
|
|Too[ ]much[ ]spam[.] # Earthlink
|
104
|
-
|the[ ]message[ ]
|
110
|
+
|the[ ]message[ ](?:
|
111
|
+
has[ ]been[ ]rejected[ ]by[ ]spam[ ]filtering[ ]engine
|
112
|
+
|was[ ]rejected[ ]due[ ]to[ ]classification[ ]as[ ]bulk[ ]mail
|
113
|
+
)
|
105
114
|
|The[ ]content[ ]of[ ]this[ ]message[ ]looked[ ]like[ ]spam # SendGrid
|
115
|
+
|This[ ](?:e-mail|mail)[ ](?:
|
116
|
+
cannot[ ]be[ ]forwarded[ ]because[ ]it[ ]was[ ]detected[ ]as[ ]spam
|
117
|
+
|is[ ]classified[ ]as[ ]spam[ ]and[ ]is[ ]rejected
|
118
|
+
)
|
106
119
|
|this[ ]message[ ](?:
|
107
120
|
appears[ ]to[ ]be[ ]spam
|
108
|
-
|has[ ]been[ ]
|
121
|
+
|has[ ]been[ ](?:
|
122
|
+
identified[ ]as[ ]spam
|
123
|
+
|scored[ ]as[ ]spam[ ]with[ ]a[ ]probability
|
124
|
+
)
|
109
125
|
|scored[ ].+[ ]spam[ ]points
|
110
126
|
|was[ ]classified[ ]as[ ]spam
|
127
|
+
|was[ ]rejected[ ]by[ ]Recurrent[ ]Pattern[ ]Detection[ ]System
|
111
128
|
)
|
112
129
|
|transaction[ ]failed[ ]spam[ ]message[ ]not[ ]queued # SendGrid
|
113
130
|
|we[ ]dont[ ]accept[ ]spam
|
@@ -117,12 +134,12 @@ module Sisimai
|
|
117
134
|
appears[ ]similar[ ]to[ ]spam[ ]we[ ]have[ ]received[ ]before
|
118
135
|
|breaches[ ]local[ ]URIBL[ ]policy
|
119
136
|
|had[ ]spam[-]like[ ]
|
120
|
-
|is[ ]considered[ ]spam
|
121
|
-
|is[ ]probably[ ]spam
|
137
|
+
|is[ ](?:considered|probably)[ ]spam
|
122
138
|
|was[ ]detected[ ]as[ ]spam
|
123
139
|
)
|
124
140
|
|message[ ](?:
|
125
|
-
has[ ]
|
141
|
+
as[ ]spam[ ]and[ ]has[ ]prevented[ ]delivery
|
142
|
+
|has[ ]been[ ](?:
|
126
143
|
temporarily[ ]blocked[ ]by[ ]our[ ]filter
|
127
144
|
|rejected[ ]because[ ]it[ ]appears[ ]to[ ]be[ ]SPAM
|
128
145
|
)
|