sisimai 5.1.0 → 5.2.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/.github/workflows/rake-test.yml +1 -1
- data/ChangeLog.md +102 -0
- data/Makefile +4 -2
- data/README-JA.md +23 -16
- data/README.md +22 -15
- data/lib/sisimai/arf.rb +121 -210
- data/lib/sisimai/fact.rb +208 -158
- data/lib/sisimai/lda.rb +98 -0
- data/lib/sisimai/lhost/activehunter.rb +1 -1
- data/lib/sisimai/lhost/amazonses.rb +185 -301
- data/lib/sisimai/lhost/apachejames.rb +48 -51
- data/lib/sisimai/lhost/biglobe.rb +1 -2
- data/lib/sisimai/lhost/courier.rb +10 -8
- data/lib/sisimai/lhost/domino.rb +25 -25
- data/lib/sisimai/lhost/dragonfly.rb +3 -4
- data/lib/sisimai/lhost/einsundeins.rb +3 -4
- data/lib/sisimai/lhost/exchange2003.rb +6 -8
- data/lib/sisimai/lhost/exchange2007.rb +111 -101
- data/lib/sisimai/lhost/exim.rb +232 -242
- data/lib/sisimai/lhost/ezweb.rb +43 -51
- data/lib/sisimai/lhost/fml.rb +2 -3
- data/lib/sisimai/lhost/gmail.rb +32 -28
- data/lib/sisimai/lhost/gmx.rb +4 -16
- data/lib/sisimai/lhost/googlegroups.rb +9 -8
- data/lib/sisimai/lhost/googleworkspace.rb +94 -0
- data/lib/sisimai/lhost/imailserver.rb +7 -16
- data/lib/sisimai/lhost/interscanmss.rb +1 -1
- data/lib/sisimai/lhost/kddi.rb +3 -4
- data/lib/sisimai/lhost/mailfoundry.rb +2 -5
- data/lib/sisimai/lhost/mailmarshalsmtp.rb +1 -2
- data/lib/sisimai/lhost/messagingserver.rb +14 -13
- data/lib/sisimai/lhost/mfilter.rb +4 -3
- data/lib/sisimai/lhost/notes.rb +2 -4
- data/lib/sisimai/lhost/opensmtpd.rb +2 -2
- data/lib/sisimai/lhost/postfix.rb +25 -27
- data/lib/sisimai/lhost/qmail.rb +130 -106
- data/lib/sisimai/lhost/sendmail.rb +19 -18
- data/lib/sisimai/lhost/v5sendmail.rb +88 -60
- data/lib/sisimai/lhost/verizon.rb +2 -2
- data/lib/sisimai/lhost/x1.rb +1 -1
- data/lib/sisimai/lhost/x2.rb +1 -2
- data/lib/sisimai/lhost/x3.rb +2 -2
- data/lib/sisimai/lhost/x6.rb +1 -1
- data/lib/sisimai/lhost/zoho.rb +2 -2
- data/lib/sisimai/lhost.rb +18 -21
- data/lib/sisimai/message.rb +93 -146
- data/lib/sisimai/order.rb +21 -77
- data/lib/sisimai/reason/authfailure.rb +1 -4
- data/lib/sisimai/reason/badreputation.rb +2 -2
- data/lib/sisimai/reason/blocked.rb +7 -10
- data/lib/sisimai/reason/contenterror.rb +7 -1
- data/lib/sisimai/reason/exceedlimit.rb +1 -4
- data/lib/sisimai/reason/failedstarttls.rb +42 -0
- data/lib/sisimai/reason/filtered.rb +5 -4
- data/lib/sisimai/reason/hasmoved.rb +1 -2
- data/lib/sisimai/reason/hostunknown.rb +3 -3
- data/lib/sisimai/reason/mailboxfull.rb +2 -4
- data/lib/sisimai/reason/mailererror.rb +1 -2
- data/lib/sisimai/reason/mesgtoobig.rb +2 -4
- data/lib/sisimai/reason/norelaying.rb +2 -3
- data/lib/sisimai/reason/notaccept.rb +2 -3
- data/lib/sisimai/reason/notcompliantrfc.rb +10 -4
- data/lib/sisimai/reason/rejected.rb +1 -1
- data/lib/sisimai/reason/requireptr.rb +2 -2
- data/lib/sisimai/reason/securityerror.rb +1 -3
- data/lib/sisimai/reason/spamdetected.rb +6 -8
- data/lib/sisimai/reason/speeding.rb +1 -2
- data/lib/sisimai/reason/suppressed.rb +36 -0
- data/lib/sisimai/reason/suspend.rb +1 -3
- data/lib/sisimai/reason/systemerror.rb +5 -0
- data/lib/sisimai/reason/toomanyconn.rb +1 -2
- data/lib/sisimai/reason/userunknown.rb +1 -1
- data/lib/sisimai/reason/virusdetected.rb +5 -6
- data/lib/sisimai/reason.rb +77 -73
- data/lib/sisimai/rfc1123.rb +152 -0
- data/lib/sisimai/rfc1894.rb +102 -62
- data/lib/sisimai/rfc2045.rb +2 -1
- data/lib/sisimai/rfc3464/thirdparty.rb +102 -0
- data/lib/sisimai/rfc3464.rb +222 -343
- data/lib/sisimai/rfc3834.rb +1 -1
- data/lib/sisimai/rfc5322.rb +7 -17
- data/lib/sisimai/rfc791.rb +69 -0
- data/lib/sisimai/rhost/aol.rb +36 -0
- data/lib/sisimai/rhost/apple.rb +5 -2
- data/lib/sisimai/rhost/cox.rb +3 -2
- data/lib/sisimai/rhost/facebook.rb +100 -0
- data/lib/sisimai/rhost/franceptt.rb +3 -2
- data/lib/sisimai/rhost/godaddy.rb +3 -2
- data/lib/sisimai/rhost/google.rb +19 -17
- data/lib/sisimai/rhost/gsuite.rb +42 -0
- data/lib/sisimai/rhost/iua.rb +3 -3
- data/lib/sisimai/rhost/kddi.rb +3 -2
- data/lib/sisimai/rhost/messagelabs.rb +37 -0
- data/lib/sisimai/rhost/microsoft.rb +56 -49
- data/lib/sisimai/rhost/mimecast.rb +29 -27
- data/lib/sisimai/rhost/nttdocomo.rb +4 -3
- data/lib/sisimai/rhost/outlook.rb +36 -0
- data/lib/sisimai/rhost/spectrum.rb +3 -2
- data/lib/sisimai/rhost/tencent.rb +3 -2
- data/lib/sisimai/rhost/yahooinc.rb +4 -3
- data/lib/sisimai/rhost.rb +69 -39
- data/lib/sisimai/smtp/command.rb +31 -21
- data/lib/sisimai/smtp/failure.rb +103 -0
- data/lib/sisimai/smtp/reply.rb +29 -25
- data/lib/sisimai/smtp/status.rb +36 -19
- data/lib/sisimai/smtp/transcript.rb +15 -15
- data/lib/sisimai/string.rb +0 -46
- data/lib/sisimai/version.rb +1 -1
- data/set-of-emails/maildir/bsd/lhost-postfix-30.eml +81 -81
- data/set-of-emails/maildir/bsd/{lhost-aol-03.eml → rhost-aol-03.eml} +1264 -1264
- data/set-of-emails/maildir/bsd/{lhost-aol-04.eml → rhost-aol-04.eml} +1260 -1260
- data/set-of-emails/maildir/bsd/{lhost-aol-05.eml → rhost-aol-05.eml} +105 -105
- data/set-of-emails/maildir/bsd/{lhost-aol-06.eml → rhost-aol-06.eml} +105 -105
- data/set-of-emails/maildir/bsd/rhost-gsuite-01.eml +189 -0
- data/set-of-emails/maildir/bsd/rhost-gsuite-02.eml +180 -0
- data/set-of-emails/maildir/bsd/rhost-gsuite-03.eml +251 -0
- data/set-of-emails/maildir/bsd/rhost-gsuite-04.eml +211 -0
- data/set-of-emails/maildir/bsd/rhost-gsuite-05.eml +226 -0
- data/set-of-emails/maildir/bsd/rhost-gsuite-06.eml +257 -0
- data/set-of-emails/maildir/bsd/rhost-gsuite-07.eml +289 -0
- data/set-of-emails/maildir/bsd/rhost-gsuite-08.eml +231 -0
- data/set-of-emails/maildir/bsd/rhost-gsuite-09.eml +231 -0
- data/set-of-emails/maildir/bsd/rhost-gsuite-10.eml +254 -0
- data/set-of-emails/maildir/bsd/rhost-gsuite-11.eml +228 -0
- data/set-of-emails/maildir/bsd/rhost-gsuite-12.eml +271 -0
- data/set-of-emails/maildir/bsd/rhost-gsuite-13.eml +261 -0
- data/set-of-emails/maildir/bsd/rhost-gsuite-14.eml +273 -0
- data/set-of-emails/maildir/bsd/rhost-gsuite-15.eml +229 -0
- data/set-of-emails/maildir/bsd/{lhost-messagelabs-01.eml → rhost-messagelabs-01.eml} +93 -93
- data/set-of-emails/maildir/bsd/rhost-outlook-01.eml +72 -0
- data/set-of-emails/maildir/bsd/rhost-outlook-02.eml +72 -0
- data/set-of-emails/maildir/bsd/rhost-outlook-03.eml +72 -0
- data/set-of-emails/maildir/bsd/rhost-outlook-04.eml +79 -0
- data/set-of-emails/maildir/bsd/rhost-outlook-06.eml +75 -0
- data/set-of-emails/maildir/bsd/rhost-outlook-07.eml +70 -0
- data/set-of-emails/maildir/bsd/rhost-outlook-08.eml +70 -0
- data/set-of-emails/maildir/bsd/rhost-outlook-09.eml +56 -0
- data/set-of-emails/maildir/tmp/arf-22.eml +49 -0
- data/set-of-emails/maildir/tmp/arf-23.eml +49 -0
- data/set-of-emails/maildir/tmp/arf-24.eml +50 -0
- data/set-of-emails/maildir/tmp/lhost-exim-07.eml +28 -0
- metadata +73 -56
- data/lib/sisimai/lhost/amavis.rb +0 -163
- data/lib/sisimai/lhost/amazonworkmail.rb +0 -127
- data/lib/sisimai/lhost/aol.rb +0 -125
- data/lib/sisimai/lhost/barracuda.rb +0 -92
- data/lib/sisimai/lhost/bigfoot.rb +0 -125
- data/lib/sisimai/lhost/facebook.rb +0 -188
- data/lib/sisimai/lhost/gsuite.rb +0 -194
- data/lib/sisimai/lhost/mailru.rb +0 -214
- data/lib/sisimai/lhost/mcafee.rb +0 -109
- data/lib/sisimai/lhost/messagelabs.rb +0 -120
- data/lib/sisimai/lhost/mxlogic.rb +0 -198
- data/lib/sisimai/lhost/office365.rb +0 -252
- data/lib/sisimai/lhost/outlook.rb +0 -129
- data/lib/sisimai/lhost/powermta.rb +0 -118
- data/lib/sisimai/lhost/receivingses.rb +0 -126
- data/lib/sisimai/lhost/sendgrid.rb +0 -150
- data/lib/sisimai/lhost/surfcontrol.rb +0 -105
- data/lib/sisimai/lhost/x4.rb +0 -269
- data/lib/sisimai/lhost/x5.rb +0 -112
- data/lib/sisimai/lhost/yahoo.rb +0 -102
- data/lib/sisimai/lhost/yandex.rb +0 -118
- data/lib/sisimai/mda.rb +0 -121
- data/lib/sisimai/smtp/error.rb +0 -119
- /data/set-of-emails/maildir/bsd/{lhost-googlegroups-15.eml → lhost-googleworkspace-01.eml} +0 -0
- /data/set-of-emails/maildir/bsd/{lhost-x4-08.eml → lhost-x2-06.eml} +0 -0
- /data/set-of-emails/maildir/bsd/{lhost-gsuite-01.eml → rfc3464-51.eml} +0 -0
- /data/set-of-emails/maildir/bsd/{lhost-gsuite-03.eml → rfc3464-52.eml} +0 -0
- /data/set-of-emails/maildir/bsd/{lhost-gsuite-04.eml → rfc3464-53.eml} +0 -0
- /data/set-of-emails/maildir/bsd/{lhost-gsuite-05.eml → rfc3464-54.eml} +0 -0
- /data/set-of-emails/maildir/bsd/{lhost-gsuite-06.eml → rfc3464-55.eml} +0 -0
- /data/set-of-emails/maildir/bsd/{lhost-gsuite-07.eml → rfc3464-56.eml} +0 -0
- /data/set-of-emails/maildir/bsd/{lhost-gsuite-08.eml → rfc3464-57.eml} +0 -0
- /data/set-of-emails/maildir/bsd/{lhost-gsuite-09.eml → rfc3464-58.eml} +0 -0
- /data/set-of-emails/maildir/bsd/{lhost-gsuite-10.eml → rfc3464-59.eml} +0 -0
- /data/set-of-emails/maildir/bsd/{lhost-gsuite-11.eml → rfc3464-60.eml} +0 -0
- /data/set-of-emails/maildir/bsd/{lhost-gsuite-12.eml → rfc3464-61.eml} +0 -0
- /data/set-of-emails/maildir/bsd/{lhost-gsuite-13.eml → rfc3464-62.eml} +0 -0
- /data/set-of-emails/maildir/bsd/{lhost-gsuite-14.eml → rfc3464-63.eml} +0 -0
- /data/set-of-emails/maildir/bsd/{lhost-gsuite-15.eml → rfc3464-64.eml} +0 -0
- /data/set-of-emails/maildir/bsd/{lhost-gsuite-02.eml → rfc3464-65.eml} +0 -0
- /data/set-of-emails/maildir/bsd/{lhost-aol-01.eml → rhost-aol-01.eml} +0 -0
- /data/set-of-emails/maildir/bsd/{lhost-aol-02.eml → rhost-aol-02.eml} +0 -0
- /data/set-of-emails/maildir/bsd/{lhost-facebook-03.eml → rhost-facebook-03.eml} +0 -0
- /data/set-of-emails/maildir/bsd/{lhost-facebook-04.eml → rhost-facebook-04.eml} +0 -0
- /data/set-of-emails/maildir/bsd/{lhost-messagelabs-02.eml → rhost-messagelabs-02.eml} +0 -0
- /data/set-of-emails/maildir/bsd/{lhost-messagelabs-03.eml → rhost-messagelabs-03.eml} +0 -0
- /data/set-of-emails/maildir/{bsd → tmp}/rfc3464-37.eml +0 -0
- /data/set-of-emails/maildir/{bsd → tmp}/rfc3464-38.eml +0 -0
- /data/set-of-emails/maildir/{bsd → tmp}/rfc3464-39.eml +0 -0
data/lib/sisimai/mda.rb
DELETED
@@ -1,121 +0,0 @@
|
|
1
|
-
module Sisimai
|
2
|
-
# Sisimai::MDA - Error message decoder for MDA
|
3
|
-
module MDA
|
4
|
-
class << self
|
5
|
-
AgentNames = {
|
6
|
-
# dovecot/src/deliver/deliver.c
|
7
|
-
# 11: #define DEFAULT_MAIL_REJECTION_HUMAN_REASON \
|
8
|
-
# 12: "Your message to <%t> was automatically rejected:%n%r"
|
9
|
-
'dovecot' => ['Your message to ', ' was automatically rejected:'],
|
10
|
-
'mail.local' => ['mail.local: '],
|
11
|
-
'procmail' => ['procmail: '],
|
12
|
-
'maildrop' => ['maildrop: '],
|
13
|
-
'vpopmail' => ['vdelivermail: '],
|
14
|
-
'vmailmgr' => ['vdeliver: '],
|
15
|
-
}.freeze
|
16
|
-
|
17
|
-
# dovecot/src/deliver/mail-send.c:94
|
18
|
-
MessagesOf = {
|
19
|
-
'dovecot' => {
|
20
|
-
'userunknown' => ["mailbox doesn't exist: "],
|
21
|
-
'mailboxfull' => [
|
22
|
-
'quota exceeded', # Dovecot 1.2 dovecot/src/plugins/quota/quota.c
|
23
|
-
'quota exceeded (mailbox for user is full)', # dovecot/src/plugins/quota/quota.c
|
24
|
-
'not enough disk space',
|
25
|
-
],
|
26
|
-
},
|
27
|
-
'mail.local' => {
|
28
|
-
'userunknown' => [
|
29
|
-
': unknown user:',
|
30
|
-
': user unknown',
|
31
|
-
': invalid mailbox path',
|
32
|
-
': user missing home directory',
|
33
|
-
],
|
34
|
-
'mailboxfull' => [
|
35
|
-
'disc quota exceeded',
|
36
|
-
'mailbox full or quota exceeded',
|
37
|
-
],
|
38
|
-
'systemerror' => ['temporary file write error'],
|
39
|
-
},
|
40
|
-
'procmail' => {
|
41
|
-
'mailboxfull' => ['quota exceeded while writing'],
|
42
|
-
'systemfull' => ['no space left to finish writing'],
|
43
|
-
},
|
44
|
-
'maildrop' => {
|
45
|
-
'userunknown' => [
|
46
|
-
'invalid user specified.',
|
47
|
-
'Cannot find system user',
|
48
|
-
],
|
49
|
-
'mailboxfull' => ['maildir over quota.'],
|
50
|
-
},
|
51
|
-
'vpopmail' => {
|
52
|
-
'userunknown' => ['sorry, no mailbox here by that name.'],
|
53
|
-
'filtered' => [
|
54
|
-
'account is locked email bounced',
|
55
|
-
'user does not exist, but will deliver to '
|
56
|
-
],
|
57
|
-
'mailboxfull' => ['domain is over quota', 'user is over quota'],
|
58
|
-
},
|
59
|
-
'vmailmgr' => {
|
60
|
-
'userunknown' => [
|
61
|
-
'invalid or unknown base user or domain',
|
62
|
-
'invalid or unknown virtual user',
|
63
|
-
'user name does not refer to a virtual user'
|
64
|
-
],
|
65
|
-
'mailboxfull' => ['delivery failed due to system quota violation'],
|
66
|
-
},
|
67
|
-
}.freeze
|
68
|
-
|
69
|
-
# @abstract Decodes the message body and return the MDA name, the reason, and the error message
|
70
|
-
# @param [Hash] mhead Message headers of a bounce email
|
71
|
-
# @param [String] mbody Message body of a bounce email
|
72
|
-
# @return [Hash] Bounce data list and message/rfc822 part
|
73
|
-
# @return [Nil] it failed to decode or the arguments are missing
|
74
|
-
def inquire(mhead, mbody)
|
75
|
-
return nil unless mhead
|
76
|
-
return nil unless mbody.size > 0
|
77
|
-
return nil unless mhead['from'].downcase.start_with?('mail delivery subsystem','mailer-daemon', 'postmaster')
|
78
|
-
|
79
|
-
deliversby = '' # [String] Mail Delivery Agent name
|
80
|
-
reasonname = '' # [String] Error reason
|
81
|
-
bouncemesg = '' # [String] Error message
|
82
|
-
linebuffer = mbody.split("\n")
|
83
|
-
|
84
|
-
AgentNames.each_key do |e|
|
85
|
-
# Find a mail delivery agent name from the entire message body
|
86
|
-
p = mbody.index(AgentNames[e][0])
|
87
|
-
next unless p
|
88
|
-
|
89
|
-
if AgentNames[e].size > 1
|
90
|
-
# Try to find the 2nd argument
|
91
|
-
q = mbody.index(AgentNames[e][1])
|
92
|
-
next unless q
|
93
|
-
next if p > q
|
94
|
-
end
|
95
|
-
deliversby = e
|
96
|
-
break
|
97
|
-
end
|
98
|
-
return nil if deliversby.empty?
|
99
|
-
|
100
|
-
MessagesOf[deliversby].each_key do |e|
|
101
|
-
# Detect an error reason from message patterns of the MDA.
|
102
|
-
linebuffer.each do |f|
|
103
|
-
# Whether the error message include each message defined in MessagesOf
|
104
|
-
next unless MessagesOf[deliversby][e].any? { |a| f.downcase.include?(a) }
|
105
|
-
reasonname = e
|
106
|
-
bouncemesg = f
|
107
|
-
break
|
108
|
-
end
|
109
|
-
break if bouncemesg.size > 0 && reasonname.size > 0
|
110
|
-
end
|
111
|
-
|
112
|
-
return {
|
113
|
-
'mda' => deliversby,
|
114
|
-
'reason' => reasonname || '',
|
115
|
-
'message' => bouncemesg || '',
|
116
|
-
}
|
117
|
-
end
|
118
|
-
end
|
119
|
-
end
|
120
|
-
end
|
121
|
-
|
data/lib/sisimai/smtp/error.rb
DELETED
@@ -1,119 +0,0 @@
|
|
1
|
-
module Sisimai
|
2
|
-
module SMTP
|
3
|
-
# Sisimai::SMTP::Error is utilities for checking SMTP Errors from error message text.
|
4
|
-
module Error
|
5
|
-
class << self
|
6
|
-
require 'sisimai/smtp/reply'
|
7
|
-
require 'sisimai/smtp/status'
|
8
|
-
|
9
|
-
SoftOrHard = {
|
10
|
-
'soft' => %w[
|
11
|
-
blocked contenterror exceedlimit expired filtered mailboxfull mailererror mesgtoobig
|
12
|
-
networkerror norelaying policyviolation rejected securityerror spamdetected suspend
|
13
|
-
syntaxerror systemerror systemfull toomanyconn virusdetected],
|
14
|
-
'hard' => %w[hasmoved hostunknown userunknown]
|
15
|
-
}.freeze
|
16
|
-
|
17
|
-
# Permanent error or not
|
18
|
-
# @param [String] argv1 String including SMTP Status code
|
19
|
-
# @return [Boolean] true: Permanet error
|
20
|
-
# false: Temporary error
|
21
|
-
# nil: is not an error
|
22
|
-
# @since v4.17.3
|
23
|
-
def is_permanent(argv1 = '')
|
24
|
-
return nil unless argv1
|
25
|
-
permanent1 = nil
|
26
|
-
statuscode = Sisimai::SMTP::Status.find(argv1) || Sisimai::SMTP::Reply.find(argv1) || '0'
|
27
|
-
|
28
|
-
if (classvalue = statuscode[0, 1].to_i) > 0
|
29
|
-
# 2, 4, or 5
|
30
|
-
if classvalue == 5
|
31
|
-
# Permanent error
|
32
|
-
permanent1 = true
|
33
|
-
|
34
|
-
elsif classvalue == 4
|
35
|
-
# Temporary error
|
36
|
-
permanent1 = false
|
37
|
-
|
38
|
-
elsif classvalue == 2
|
39
|
-
# Succeeded
|
40
|
-
permanent1 = nil
|
41
|
-
end
|
42
|
-
else
|
43
|
-
# Check with regular expression
|
44
|
-
v = argv1.downcase
|
45
|
-
permanent1 = if v.include?('temporar') || v.include?('persistent')
|
46
|
-
# Temporary failure
|
47
|
-
false
|
48
|
-
elsif v.include?('permanent')
|
49
|
-
# Permanently failure
|
50
|
-
true
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
return permanent1
|
55
|
-
end
|
56
|
-
|
57
|
-
# Check softbounce or not
|
58
|
-
# @param [String] argv1 Detected bounce reason
|
59
|
-
# @param [String] argv2 String including SMTP Status code
|
60
|
-
# @return [String] 'soft': Soft bounce
|
61
|
-
# 'hard': Hard bounce
|
62
|
-
# '': May not be bounce ?
|
63
|
-
# @since v4.17.3
|
64
|
-
def soft_or_hard(argv1 = '', argv2 = '')
|
65
|
-
return nil unless argv1
|
66
|
-
return nil if argv1.empty?
|
67
|
-
value = nil
|
68
|
-
|
69
|
-
if %w[delivered feedback vacation].include?(argv1)
|
70
|
-
# These are not dealt as a bounce reason
|
71
|
-
value = ''
|
72
|
-
|
73
|
-
elsif argv1 == 'onhold' || argv1 == 'undefined'
|
74
|
-
# It should be "soft" when a reason is "onhold" or "undefined"
|
75
|
-
value = 'soft'
|
76
|
-
|
77
|
-
elsif argv1 == 'notaccept'
|
78
|
-
# NotAccept: 5xx => hard bounce, 4xx => soft bounce
|
79
|
-
if argv2.size > 0
|
80
|
-
# Get D.S.N. or SMTP reply code from The 2nd argument string
|
81
|
-
statuscode = Sisimai::SMTP::Status.find(argv2) || Sisimai::SMTP::Reply.find(argv2) || '0'
|
82
|
-
value = if statuscode.start_with?('4')
|
83
|
-
# Deal as a "soft bounce"
|
84
|
-
'soft'
|
85
|
-
else
|
86
|
-
# 5 or 0, deal as a "hard bounce"
|
87
|
-
'hard'
|
88
|
-
end
|
89
|
-
else
|
90
|
-
# "notaccept" is a hard bounce
|
91
|
-
value = 'hard'
|
92
|
-
end
|
93
|
-
|
94
|
-
else
|
95
|
-
# Check all the reasons defined at the above
|
96
|
-
catch :SOFT_OR_HARD do
|
97
|
-
while true
|
98
|
-
%w[hard soft].each do |e|
|
99
|
-
# Soft or Hard?
|
100
|
-
SoftOrHard[e].each do |f|
|
101
|
-
# Hard bounce?
|
102
|
-
next unless argv1 == f
|
103
|
-
value = e
|
104
|
-
throw :SOFT_OR_HARD
|
105
|
-
end
|
106
|
-
end
|
107
|
-
|
108
|
-
break
|
109
|
-
end
|
110
|
-
end
|
111
|
-
end
|
112
|
-
|
113
|
-
return value
|
114
|
-
end
|
115
|
-
|
116
|
-
end
|
117
|
-
end
|
118
|
-
end
|
119
|
-
end
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|