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
@@ -106,7 +106,7 @@ module Sisimai::Bite::Email
|
|
106
106
|
# Original message follows.
|
107
107
|
v = dscontents[-1]
|
108
108
|
|
109
|
-
if cv = e.match(/\A(
|
109
|
+
if cv = e.match(/\A([^ ]+)[ ](.+)[:][ \t]*([^ ]+[@][^ ]+)/)
|
110
110
|
# Unknown user: kijitora@example.com
|
111
111
|
if v['recipient']
|
112
112
|
# There are multiple recipient addresses in the message body.
|
@@ -18,7 +18,12 @@ module Sisimai::Bite::Email
|
|
18
18
|
:endof => %r/\A__END_OF_EMAIL_MESSAGE__\z/,
|
19
19
|
}.freeze
|
20
20
|
ReFailure = {
|
21
|
-
userunknown: %r
|
21
|
+
userunknown: %r{(?:
|
22
|
+
542[ ].+[ ]Rejected
|
23
|
+
|No[ ]such[ ]user
|
24
|
+
)
|
25
|
+
}x,
|
26
|
+
securityerror: %r/Please turn on SMTP Authentication in your mail client/,
|
22
27
|
}.freeze
|
23
28
|
Indicators = Sisimai::Bite::Email.INDICATORS
|
24
29
|
|
@@ -29,7 +29,6 @@ module Sisimai::Bite::Email
|
|
29
29
|
%r/\A4[.]7[.]26\z/ => 'securityerror',
|
30
30
|
%r/\A4[.]7[.][56]\d\d\z/ => 'blocked',
|
31
31
|
%r/\A4[.]7[.]8[5-9]\d\z/ => 'blocked',
|
32
|
-
%r/\A5[.]1[.]0\z/ => 'userunknown',
|
33
32
|
%r/\A5[.]4[.]1\z/ => 'norelaying',
|
34
33
|
%r/\A5[.]4[.]6\z/ => 'networkerror',
|
35
34
|
%r/\A5[.]6[.]11\z/ => 'contenterror',
|
data/lib/sisimai/data.rb
CHANGED
@@ -257,7 +257,7 @@ module Sisimai
|
|
257
257
|
|
258
258
|
# Subject: header of the original message
|
259
259
|
p['subject'] = rfc822data['subject'] || ''
|
260
|
-
p['subject'] = p['subject'].gsub(/\r\z/, '')
|
260
|
+
p['subject'] = p['subject'].scrub('?').gsub(/\r\z/, '')
|
261
261
|
|
262
262
|
# The value of "List-Id" header
|
263
263
|
p['listid'] = rfc822data['list-id'] || ''
|
@@ -285,20 +285,42 @@ module Sisimai
|
|
285
285
|
|
286
286
|
# CHECK_DELIVERY_STATUS_VALUE:
|
287
287
|
# Cleanup the value of "Diagnostic-Code:" header
|
288
|
-
p['diagnosticcode'] = p['diagnosticcode'].sub(/[ \t]+#{EndOfEmail}/, '')
|
289
|
-
|
290
|
-
if
|
291
|
-
#
|
292
|
-
p['
|
293
|
-
|
288
|
+
p['diagnosticcode'] = p['diagnosticcode'].sub(/[ \t.]+#{EndOfEmail}/, '')
|
289
|
+
|
290
|
+
if p['diagnosticcode'].size > 0
|
291
|
+
# Count the number of D.S.N. and SMTP Reply Code
|
292
|
+
vs = Sisimai::SMTP::Status.find(p['diagnosticcode'])
|
293
|
+
vr = Sisimai::SMTP::Reply.find(p['diagnosticcode'])
|
294
|
+
vm = 0
|
295
|
+
re = nil
|
296
|
+
|
297
|
+
if vs.size > 0
|
298
|
+
# How many times does the D.S.N. appeared
|
299
|
+
vm += p['diagnosticcode'].scan(/\b#{vs}\b/).size
|
300
|
+
p['deliverystatus'] = vs if vs =~ /\A[45][.][1-9][.][1-9]\z/
|
301
|
+
end
|
294
302
|
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
|
303
|
+
if vr.size > 0
|
304
|
+
# How many times does the SMTP reply code appeared
|
305
|
+
vm += p['diagnosticcode'].scan(/\b#{vr}\b/).size
|
306
|
+
p['replycode'] ||= vr
|
307
|
+
end
|
308
|
+
|
309
|
+
if vm > 2
|
310
|
+
# Build regular expression for removing string like '550-5.1.1'
|
311
|
+
# from the value of "diagnosticcode"
|
312
|
+
re = %r/[ ]#{vr}[- ](?:#{vs})?/
|
313
|
+
|
314
|
+
# 550-5.7.1 [192.0.2.222] Our system has detected that this message is
|
315
|
+
# 550-5.7.1 likely unsolicited mail. To reduce the amount of spam sent to Gmail,
|
316
|
+
# 550-5.7.1 this message has been blocked. Please visit
|
317
|
+
# 550 5.7.1 https://support.google.com/mail/answer/188131 for more information.
|
318
|
+
p['diagnosticcode'] = p['diagnosticcode'].gsub(re, ' ')
|
319
|
+
p['diagnosticdoee'] = Sisimai::String.sweep(p['diagnosticcode'])
|
300
320
|
end
|
301
321
|
end
|
322
|
+
p['diagnostictype'] ||= 'X-UNIX' if p['reason'] == 'mailererror'
|
323
|
+
p['diagnostictype'] ||= 'SMTP' unless p['reason'] =~ /\A(?:feedback|vacation)\z/
|
302
324
|
|
303
325
|
# Check the value of SMTP command
|
304
326
|
p['smtpcommand'] = '' unless p['smtpcommand'] =~ rxcommands
|
data/lib/sisimai/datetime.rb
CHANGED
@@ -346,12 +346,12 @@ module Sisimai
|
|
346
346
|
elsif cr = p.match(/\A([0-2]\d):([0-5]\d)\z/)
|
347
347
|
# Time; 12:34 => 12:34:00
|
348
348
|
if cr[1].to_i < 24 && cr[2].to_i < 60
|
349
|
-
v[:T] = sprintf('%02d:%02d:00', cr[1], cr[2])
|
349
|
+
v[:T] = sprintf('%02d:%02d:00', cr[1].to_i, cr[2].to_i)
|
350
350
|
end
|
351
351
|
|
352
352
|
elsif cr = p.match(/\A(\d\d?):(\d\d?)\z/)
|
353
353
|
# Time: 1:4 => 01:04:00
|
354
|
-
v[:T] = sprintf('%02d:%02d:00', cr[1], cr[2])
|
354
|
+
v[:T] = sprintf('%02d:%02d:00', cr[1].to_i, cr[2].to_i)
|
355
355
|
|
356
356
|
elsif p =~ /\A[APap][Mm]\z/
|
357
357
|
# AM or PM
|
@@ -382,7 +382,7 @@ module Sisimai
|
|
382
382
|
v[:d] = cr[3].to_i if cr[3].to_i < 32
|
383
383
|
|
384
384
|
if cr[4].to_i < 24 && cr[5].to_i < 60 && cr[6].to_i < 60
|
385
|
-
v[:T] = sprintf('%02d:%02d:%02d', cr[4], cr[5], cr[6])
|
385
|
+
v[:T] = sprintf('%02d:%02d:%02d', cr[4].to_i, cr[5].to_i, cr[6].to_i)
|
386
386
|
end
|
387
387
|
|
388
388
|
elsif cr = p.match(%r|\A(\d{1,2})/(\d{1,2})/(\d{1,2})\z|)
|
@@ -391,6 +391,12 @@ module Sisimai
|
|
391
391
|
v[:d] = cr[2].to_i
|
392
392
|
v[:Y] = cr[3].to_i + 2000
|
393
393
|
v[:Y] -= 100 if v[:Y].to_i > ::DateTime.now.year + 1
|
394
|
+
|
395
|
+
elsif cr = p.match(%r|\A(\d{1,2})[-/](\d{1,2})[-/](\d{4})|)
|
396
|
+
# 29-04-2017 22:22
|
397
|
+
v[:d] = cr[1].to_i if cr[1].to_i < 32
|
398
|
+
v[:M] = MonthName[:abbr][cr[2].to_i - 1]
|
399
|
+
v[:Y] = cr[3].to_i
|
394
400
|
end
|
395
401
|
end
|
396
402
|
end
|
@@ -400,7 +406,7 @@ module Sisimai
|
|
400
406
|
# +12
|
401
407
|
t0 = v[:T]
|
402
408
|
t1 = v[:T].split(':')
|
403
|
-
v[:T] = sprintf('%02d:%02d:%02d', t1[0].to_i + 12, t1[1], t1[2])
|
409
|
+
v[:T] = sprintf('%02d:%02d:%02d', t1[0].to_i + 12, t1[1].to_i, t1[2].to_i)
|
404
410
|
v[:T] = t0 if t1[0].to_i > 12
|
405
411
|
end
|
406
412
|
v[:a] ||= 'Thu' # There is no day of week
|
data/lib/sisimai/reason.rb
CHANGED
@@ -8,7 +8,10 @@ module Sisimai
|
|
8
8
|
# Reason list better to retry detecting an error reason
|
9
9
|
# @return [Array] Reason list
|
10
10
|
def retry
|
11
|
-
return %w|
|
11
|
+
return %w|
|
12
|
+
undefined onhold systemerror securityerror networkerror
|
13
|
+
hostunknown userunknown
|
14
|
+
|
|
12
15
|
end
|
13
16
|
RetryReasons = Sisimai::Reason.retry
|
14
17
|
|
@@ -72,14 +75,16 @@ module Sisimai
|
|
72
75
|
|
73
76
|
if reasontext == 'undefined' || reasontext.empty?
|
74
77
|
# Action: delayed => "expired"
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
78
|
+
reasontext = nil
|
79
|
+
reasontext ||= 'expired' if argvs.action == 'delayed'
|
80
|
+
unless reasontext
|
81
|
+
# Try to match with message patterns in Sisimai::Reason::Vacation
|
82
|
+
require 'sisimai/reason/vacation'
|
83
|
+
reasontext = 'vacation' if Sisimai::Reason::Vacation.match(argvs.diagnosticcode)
|
80
84
|
end
|
85
|
+
reasontext ||= 'onhold' if argvs.diagnosticcode.size > 0
|
81
86
|
end
|
82
|
-
reasontext
|
87
|
+
reasontext ||= 'undefined'
|
83
88
|
end
|
84
89
|
return reasontext
|
85
90
|
end
|
@@ -97,6 +102,7 @@ module Sisimai
|
|
97
102
|
statuscode = argvs.deliverystatus || ''
|
98
103
|
diagnostic = argvs.diagnosticcode || ''
|
99
104
|
commandtxt = argvs.smtpcommand || ''
|
105
|
+
trytomatch = nil
|
100
106
|
reasontext = ''
|
101
107
|
classorder = %w|
|
102
108
|
MailboxFull SpamDetected PolicyViolation VirusDetected SecurityError
|
@@ -107,60 +113,69 @@ module Sisimai
|
|
107
113
|
require 'sisimai/smtp/status'
|
108
114
|
reasontext = Sisimai::SMTP::Status.name(statuscode)
|
109
115
|
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
116
|
+
catch :TRY_TO_MATCH do
|
117
|
+
loop do
|
118
|
+
trytomatch ||= true if reasontext.empty?
|
119
|
+
trytomatch ||= true if RetryReasons.index(reasontext)
|
120
|
+
trytomatch ||= true if argvs.diagnostictype != 'SMTP'
|
121
|
+
throw :TRY_TO_MATCH unless trytomatch
|
122
|
+
|
123
|
+
# Could not decide the reason by the value of Status:
|
124
|
+
classorder.each do |e|
|
125
|
+
# Trying to match with other patterns in Sisimai::Reason::* classes
|
126
|
+
p = 'Sisimai::Reason::' + e
|
127
|
+
r = nil
|
128
|
+
begin
|
129
|
+
require p.downcase.gsub('::', '/')
|
130
|
+
r = Module.const_get(p)
|
131
|
+
rescue
|
132
|
+
warn ' ***warning: Failed to load ' + p
|
133
|
+
next
|
134
|
+
end
|
123
135
|
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
136
|
+
next unless r.match(diagnostic)
|
137
|
+
reasontext = e.downcase
|
138
|
+
break
|
139
|
+
end
|
128
140
|
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
141
|
+
if reasontext.empty?
|
142
|
+
# Check the value of Status:
|
143
|
+
v = statuscode[0, 3]
|
144
|
+
if v == '5.6' || v == '4.6'
|
145
|
+
# X.6.0 Other or undefined media error
|
146
|
+
reasontext = 'contenterror'
|
147
|
+
|
148
|
+
elsif v == '5.7' || v == '4.7'
|
149
|
+
# X.7.0 Other or undefined security status
|
150
|
+
reasontext = 'securityerror'
|
151
|
+
|
152
|
+
elsif argvs.diagnostictype =~ /\AX-(?:UNIX|POSTFIX)\z/
|
153
|
+
# Diagnostic-Code: X-UNIX; ...
|
154
|
+
reasontext = 'mailererror'
|
155
|
+
|
156
|
+
else
|
157
|
+
# 50X Syntax Error?
|
158
|
+
require 'sisimai/reason/syntaxerror'
|
159
|
+
reasontext = 'syntaxerror' if Sisimai::Reason::SyntaxError.true(argvs)
|
160
|
+
end
|
148
161
|
end
|
149
|
-
end
|
150
162
|
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
163
|
+
if reasontext.empty?
|
164
|
+
# Check the value of Action: field, first
|
165
|
+
if argvs.action =~ /\A(?:delayed|expired)/
|
166
|
+
# Action: delayed, expired
|
167
|
+
reasontext = 'expired'
|
168
|
+
|
169
|
+
else
|
170
|
+
# Check the value of SMTP command
|
171
|
+
if commandtxt =~ /\A(?:EHLO|HELO)\z/
|
172
|
+
# Rejected at connection or after EHLO|HELO
|
173
|
+
reasontext = 'blocked'
|
174
|
+
end
|
162
175
|
end
|
163
176
|
end
|
177
|
+
|
178
|
+
throw :TRY_TO_MATCH
|
164
179
|
end
|
165
180
|
end
|
166
181
|
return reasontext
|
@@ -23,56 +23,126 @@ module Sisimai
|
|
23
23
|
regex = %r{(?>
|
24
24
|
access[ ]denied[.][ ]IP[ ]name[ ]lookup[ ]failed
|
25
25
|
|access[ ]from[ ]ip[ ]address[ ].+[ ]blocked
|
26
|
+
|all[ ]mail[ ]servers[ ]must[ ]have[ ]a[ ]PTR[ ]record[ ]with[ ]a[ ]valid[ ]Reverse[ ]DNS[ ]entry
|
27
|
+
|Bad[ ]sender[ ]IP[ ]address
|
26
28
|
|blacklisted[ ]by
|
27
|
-
|Blocked[ ]-[ ]see[ ]https
|
29
|
+
|(?:Blocked|Refused)[ ]-[ ]see[ ]https?://
|
28
30
|
|can[']t[ ]determine[ ]Purported[ ]Responsible[ ]Address
|
29
31
|
|cannot[ ]resolve[ ]your[ ]address
|
30
|
-
|client[ ]host[ ]
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
32
|
+
|client[ ]host[ ](?:
|
33
|
+
.+[ ]blocked[ ]using
|
34
|
+
|rejected:[ ](?:
|
35
|
+
Abus[ ]detecte[ ]GU_EIB_0[24] # SFR
|
36
|
+
|cannot[ ]find[ ]your[ ]hostname # Yahoo!
|
37
|
+
|may[ ]not[ ]be[ ]mail[ ]exchanger
|
38
|
+
|was[ ]not[ ]authenticated # Microsoft
|
39
|
+
)
|
35
40
|
)
|
36
41
|
|confirm[ ]this[ ]mail[ ]server
|
37
42
|
|connection[ ](?:
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
|
44
|
-
|
43
|
+
dropped
|
44
|
+
|refused[ ]by
|
45
|
+
|reset[ ]by[ ]peer
|
46
|
+
|was[ ]dropped[ ]by[ ]remote[ ]host
|
47
|
+
)
|
48
|
+
|Connections[ ](?:
|
49
|
+
not[ ]accepted[ ]from[ ]IP[ ]addresses[ ]on[ ]Spamhaus[ ]XBL
|
50
|
+
|will[ ]not[ ]be[ ]accepted[ ]from[ ].+because[ ]the[ ]ip[ ]is[ ]in[ ]Spamhaus's[ ]list
|
51
|
+
)
|
52
|
+
|Currently[ ]Sending[ ]Spam[ ]See:[ ]
|
53
|
+
|domain[ ](?:
|
54
|
+
.+[ ]mismatches[ ]client[ ]ip
|
55
|
+
|does[ ]not[ ]exist:
|
56
|
+
)
|
45
57
|
|dns[ ]lookup[ ]failure:[ ].+[ ]try[ ]again[ ]later
|
46
58
|
|DNSBL:ATTRBL
|
59
|
+
|Dynamic/zombied/spam[ ]IPs[ ]blocked
|
60
|
+
|Email[ ]blocked[ ]by[ ](?:.+[.]barracudacentral[.]org|SPAMHAUS)
|
61
|
+
|Fix[ ]reverse[ ]DNS[ ]for[ ].+
|
47
62
|
|Go[ ]away
|
63
|
+
|host[ ].+[ ]refused[ ]to[ ]talk[ ]to[ ]me:[ ]\d+[ ]Blocked
|
48
64
|
|hosts[ ]with[ ]dynamic[ ]ip
|
65
|
+
|http://(?:
|
66
|
+
spf[.]pobox[.]com/why[.]html
|
67
|
+
|www[.]spamcop[.]net/bl[.]
|
68
|
+
)
|
69
|
+
|INVALID[ ]IP[ ]FOR[ ]SENDING[ ]MAIL[ ]OF[ ]DOMAIN
|
49
70
|
|IP[ ]\d{1,3}[.]\d{1,3}[.]\d{1,3}[.]\d{1,3}[ ]is[ ]blocked[ ]by[ ]EarthLink # Earthlink
|
50
71
|
|IP[/]domain[ ]reputation[ ]problems
|
51
|
-
|is[ ]
|
72
|
+
|is[ ](?:
|
73
|
+
in[ ]a[ ]black[ ]list[ ]at[ ].+[.]
|
74
|
+
|in[ ]an[ ].*RBL[ ]on[ ].+
|
75
|
+
|not[ ]allowed[ ]to[ ]send[ ](?:
|
76
|
+
mail[ ]from
|
77
|
+
|from[ ].+[ ]per[ ]it's[ ]SPF[ ]Record
|
78
|
+
)
|
79
|
+
)
|
52
80
|
|mail[ ]server[ ]at[ ].+[ ]is[ ]blocked
|
81
|
+
|Mail[ ]from[ ]\d+[.]\d+[.]\d+[.]\d[ ]refused:
|
82
|
+
|Message[ ]from[ ].+[ ]rejected[ ]based[ ]on[ ]blacklist
|
53
83
|
|Messages[ ]from[ ].+[ ]temporarily[ ]deferred[ ]due[ ]to[ ]user[ ]complaints # Yahoo!
|
54
|
-
|no[ ]
|
84
|
+
|no[ ](?:
|
85
|
+
access[ ]from[ ]mail[ ]server
|
86
|
+
|PTR[ ]Record[ ]found[.]
|
87
|
+
)
|
55
88
|
|Not[ ]currently[ ]accepting[ ]mail[ ]from[ ]your[ ]ip # Microsoft
|
56
|
-
|
|
57
|
-
|
|
89
|
+
|part[ ]of[ ]their[ ]network[ ]is[ ]on[ ]our[ ]block[ ]list
|
90
|
+
|Please[ ](?:
|
91
|
+
get[ ]a[ ]custom[ ]reverse[ ]DNS[ ]name[ ]from[ ]your[ ]ISP[ ]for[ ]your[ ]host
|
92
|
+
|inspect[ ]your[ ]SPF[ ]settings
|
93
|
+
|use[ ]the[ ]smtp[ ]server[ ]of[ ]your[ ]ISP
|
94
|
+
)
|
95
|
+
|PTR[ ]record[ ]setup
|
58
96
|
|Rejecting[ ]open[ ]proxy # Sendmail(srvrsmtp.c)
|
97
|
+
|Reverse[ ]DNS[ ](?:
|
98
|
+
failed
|
99
|
+
|required
|
100
|
+
|lookup[ ]for[ ]host[ ].+[ ]failed[ ]permanently
|
101
|
+
)
|
102
|
+
|Sender[ ]IP[ ](?:
|
103
|
+
address[ ]rejected
|
104
|
+
|reverse[ ]lookup[ ]rejected
|
105
|
+
)
|
106
|
+
|Server[ ]access[ ](?:
|
107
|
+
.+[ ]forbidden[ ]by[ ]invalid[ ]RDNS[ ]record[ ]of[ ]your[ ]mail[ ]server
|
108
|
+
|forbidden[ ]by[ ]your[ ]IP[ ]
|
109
|
+
)
|
110
|
+
|Server[ ]IP[ ].+[ ]listed[ ]as[ ]abusive
|
111
|
+
|service[ ]permits[ ]\d+[ ]unverifyable[ ]sending[ ]IPs
|
112
|
+
|SMTP[ ]error[ ]from[ ]remote[ ]mail[ ]server[ ]after[ ]initial[ ]connection: # Exim
|
59
113
|
|sorry,[ ](?:
|
60
114
|
that[ ]domain[ ]isn'?t[ ]in[ ]my[ ]list[ ]of[ ]allowed[ ]rcpthosts
|
61
115
|
|your[ ]remotehost[ ]looks[ ]suspiciously[ ]like[ ]spammer
|
62
116
|
)
|
63
|
-
|SPF[ ]
|
117
|
+
|SPF[ ](?:
|
118
|
+
.+[ ]domain[ ]authentication[ ]fail
|
119
|
+
|record
|
120
|
+
|check:[ ]fail
|
121
|
+
)
|
122
|
+
|SPF:[ ].+[ ]is[ ]not[ ]allowed[ ]to[ ]send[ ]mail.+[A-Z]{3}.+401
|
64
123
|
|the[ ](?:email|domain|ip).+[ ]is[ ]blacklisted
|
124
|
+
|This[ ]system[ ]will[ ]not[ ]accept[ ]messages[ ]from[ ]servers[/]devices[ ]with[ ]no[ ]reverse[ ]DNS
|
125
|
+
|Too[ ]many[ ]spams[ ]from[ ]your[ ]IP # free.fr
|
65
126
|
|unresolvable[ ]relay[ ]host[ ]name
|
127
|
+
|Veuillez[ ]essayer[ ]plus[ ]tard.+[A-Z]{3}.+(?:103|510)
|
66
128
|
|your[ ](?:
|
67
129
|
network[ ]is[ ]temporary[ ]blacklisted
|
130
|
+
|sender's[ ]IP[ ]address[ ]is[ ]listed[ ]at[ ].+[.]abuseat[.]org
|
68
131
|
|server[ ]requires[ ]confirmation
|
69
132
|
)
|
70
133
|
|was[ ]blocked[ ]by[ ].+
|
71
134
|
|we[ ]do[ ]not[ ]accept[ ]mail[ ]from[ ](?: # @mail.ru
|
72
|
-
|
73
|
-
|dynamic[ ]
|
135
|
+
dynamic[ ]ips
|
136
|
+
|hosts[ ]with[ ]dynamic[ ]IP[ ]or[ ]generic[ ]dns[ ]PTR-records
|
137
|
+
)
|
138
|
+
|You[ ]are[ ](?:
|
139
|
+
not[ ]allowed[ ]to[ ]connect
|
140
|
+
|sending[ ]spam
|
141
|
+
)
|
142
|
+
|Your[ ](?:
|
143
|
+
access[ ]to[ ]submit[ ]messages[ ]to[ ]this[ ]e-mail[ ]system[ ]has[ ]been[ ]rejected
|
144
|
+
|message[ ]was[ ]rejected[ ]for[ ]possible[ ]spam/virus[ ]content
|
74
145
|
)
|
75
|
-
|http://www[.]spamcop[.]net/bl[.]
|
76
146
|
)
|
77
147
|
}xi
|
78
148
|
|