sisimai 4.25.16-java → 5.0.2-java

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.
Files changed (180) hide show
  1. checksums.yaml +5 -5
  2. data/.github/workflows/rake-test.yml +55 -0
  3. data/.travis.yml +3 -3
  4. data/ANALYTICAL-PRECISION +2 -2
  5. data/Benchmarks.mk +3 -3
  6. data/CONTRIBUTING +1 -1
  7. data/ChangeLog.md +451 -393
  8. data/Developers.mk +5 -6
  9. data/Gemfile +1 -1
  10. data/Makefile +15 -15
  11. data/README-JA.md +323 -149
  12. data/README.md +319 -149
  13. data/Rakefile +9 -3
  14. data/Repository.mk +2 -3
  15. data/lib/sisimai/address.rb +118 -74
  16. data/lib/sisimai/arf.rb +84 -82
  17. data/lib/sisimai/datetime.rb +5 -52
  18. data/lib/sisimai/{data → fact}/json.rb +7 -9
  19. data/lib/sisimai/fact/yaml.rb +31 -0
  20. data/lib/sisimai/fact.rb +506 -0
  21. data/lib/sisimai/lhost/activehunter.rb +12 -14
  22. data/lib/sisimai/lhost/amavis.rb +11 -14
  23. data/lib/sisimai/lhost/amazonses.rb +37 -42
  24. data/lib/sisimai/lhost/amazonworkmail.rb +15 -19
  25. data/lib/sisimai/lhost/aol.rb +12 -15
  26. data/lib/sisimai/lhost/apachejames.rb +19 -21
  27. data/lib/sisimai/lhost/barracuda.rb +10 -12
  28. data/lib/sisimai/lhost/bigfoot.rb +21 -22
  29. data/lib/sisimai/lhost/biglobe.rb +15 -16
  30. data/lib/sisimai/lhost/courier.rb +20 -20
  31. data/lib/sisimai/lhost/domino.rb +23 -20
  32. data/lib/sisimai/lhost/einsundeins.rb +23 -18
  33. data/lib/sisimai/lhost/exchange2003.rb +30 -29
  34. data/lib/sisimai/lhost/exchange2007.rb +70 -58
  35. data/lib/sisimai/lhost/exim.rb +179 -174
  36. data/lib/sisimai/lhost/ezweb.rb +31 -56
  37. data/lib/sisimai/lhost/facebook.rb +21 -34
  38. data/lib/sisimai/lhost/fml.rb +43 -48
  39. data/lib/sisimai/lhost/gmail.rb +29 -29
  40. data/lib/sisimai/lhost/gmx.rb +18 -17
  41. data/lib/sisimai/lhost/googlegroups.rb +11 -11
  42. data/lib/sisimai/lhost/gsuite.rb +21 -28
  43. data/lib/sisimai/lhost/imailserver.rb +25 -39
  44. data/lib/sisimai/lhost/interscanmss.rb +28 -31
  45. data/lib/sisimai/lhost/kddi.rb +22 -28
  46. data/lib/sisimai/lhost/mailfoundry.rb +11 -12
  47. data/lib/sisimai/lhost/mailmarshalsmtp.rb +25 -29
  48. data/lib/sisimai/lhost/mailru.rb +37 -40
  49. data/lib/sisimai/lhost/mcafee.rb +21 -31
  50. data/lib/sisimai/lhost/messagelabs.rb +17 -21
  51. data/lib/sisimai/lhost/messagingserver.rb +40 -37
  52. data/lib/sisimai/lhost/mfilter.rb +16 -17
  53. data/lib/sisimai/lhost/mxlogic.rb +24 -33
  54. data/lib/sisimai/lhost/notes.rb +17 -17
  55. data/lib/sisimai/lhost/office365.rb +64 -28
  56. data/lib/sisimai/lhost/opensmtpd.rb +12 -13
  57. data/lib/sisimai/lhost/outlook.rb +12 -16
  58. data/lib/sisimai/lhost/postfix.rb +179 -130
  59. data/lib/sisimai/lhost/powermta.rb +12 -14
  60. data/lib/sisimai/lhost/qmail.rb +44 -47
  61. data/lib/sisimai/lhost/receivingses.rb +15 -21
  62. data/lib/sisimai/lhost/sendgrid.rb +34 -34
  63. data/lib/sisimai/lhost/sendmail.rb +65 -53
  64. data/lib/sisimai/lhost/surfcontrol.rb +19 -19
  65. data/lib/sisimai/lhost/v5sendmail.rb +45 -39
  66. data/lib/sisimai/lhost/verizon.rb +35 -39
  67. data/lib/sisimai/lhost/x1.rb +18 -17
  68. data/lib/sisimai/lhost/x2.rb +17 -14
  69. data/lib/sisimai/lhost/x3.rb +19 -19
  70. data/lib/sisimai/lhost/x4.rb +72 -57
  71. data/lib/sisimai/lhost/x5.rb +17 -19
  72. data/lib/sisimai/lhost/x6.rb +41 -17
  73. data/lib/sisimai/lhost/yahoo.rb +17 -16
  74. data/lib/sisimai/lhost/yandex.rb +16 -21
  75. data/lib/sisimai/lhost/zoho.rb +16 -15
  76. data/lib/sisimai/lhost.rb +8 -10
  77. data/lib/sisimai/mail/maildir.rb +1 -3
  78. data/lib/sisimai/mail/mbox.rb +3 -4
  79. data/lib/sisimai/mail/memory.rb +0 -1
  80. data/lib/sisimai/mail/stdin.rb +1 -3
  81. data/lib/sisimai/mail.rb +3 -7
  82. data/lib/sisimai/mda.rb +28 -42
  83. data/lib/sisimai/message.rb +444 -326
  84. data/lib/sisimai/order.rb +5 -5
  85. data/lib/sisimai/reason/authfailure.rb +65 -0
  86. data/lib/sisimai/reason/badreputation.rb +53 -0
  87. data/lib/sisimai/reason/blocked.rb +96 -160
  88. data/lib/sisimai/reason/contenterror.rb +8 -9
  89. data/lib/sisimai/reason/delivered.rb +4 -6
  90. data/lib/sisimai/reason/exceedlimit.rb +10 -12
  91. data/lib/sisimai/reason/expired.rb +7 -8
  92. data/lib/sisimai/reason/feedback.rb +2 -3
  93. data/lib/sisimai/reason/filtered.rb +17 -19
  94. data/lib/sisimai/reason/hasmoved.rb +9 -10
  95. data/lib/sisimai/reason/hostunknown.rb +15 -15
  96. data/lib/sisimai/reason/mailboxfull.rb +11 -12
  97. data/lib/sisimai/reason/mailererror.rb +18 -20
  98. data/lib/sisimai/reason/mesgtoobig.rb +9 -11
  99. data/lib/sisimai/reason/networkerror.rb +5 -8
  100. data/lib/sisimai/reason/norelaying.rb +8 -11
  101. data/lib/sisimai/reason/notaccept.rb +13 -14
  102. data/lib/sisimai/reason/notcompliantrfc.rb +43 -0
  103. data/lib/sisimai/reason/onhold.rb +6 -9
  104. data/lib/sisimai/reason/policyviolation.rb +14 -12
  105. data/lib/sisimai/reason/rejected.rb +26 -24
  106. data/lib/sisimai/reason/requireptr.rb +69 -0
  107. data/lib/sisimai/reason/securityerror.rb +34 -36
  108. data/lib/sisimai/reason/spamdetected.rb +115 -147
  109. data/lib/sisimai/reason/speeding.rb +49 -0
  110. data/lib/sisimai/reason/suspend.rb +12 -11
  111. data/lib/sisimai/reason/syntaxerror.rb +11 -10
  112. data/lib/sisimai/reason/systemerror.rb +7 -9
  113. data/lib/sisimai/reason/systemfull.rb +7 -8
  114. data/lib/sisimai/reason/toomanyconn.rb +9 -11
  115. data/lib/sisimai/reason/undefined.rb +2 -3
  116. data/lib/sisimai/reason/userunknown.rb +129 -146
  117. data/lib/sisimai/reason/vacation.rb +3 -4
  118. data/lib/sisimai/reason/virusdetected.rb +10 -11
  119. data/lib/sisimai/reason.rb +59 -64
  120. data/lib/sisimai/rfc1894.rb +55 -28
  121. data/lib/sisimai/rfc2045.rb +373 -0
  122. data/lib/sisimai/rfc3464.rb +250 -308
  123. data/lib/sisimai/rfc3834.rb +42 -45
  124. data/lib/sisimai/rfc5322.rb +177 -146
  125. data/lib/sisimai/rfc5965.rb +31 -0
  126. data/lib/sisimai/rhost/cox.rb +5 -6
  127. data/lib/sisimai/rhost/franceptt.rb +6 -8
  128. data/lib/sisimai/rhost/godaddy.rb +12 -12
  129. data/lib/sisimai/rhost/google.rb +530 -0
  130. data/lib/sisimai/rhost/iua.rb +9 -10
  131. data/lib/sisimai/rhost/kddi.rb +6 -8
  132. data/lib/sisimai/rhost/{exchangeonline.rb → microsoft.rb} +115 -114
  133. data/lib/sisimai/rhost/mimecast.rb +51 -42
  134. data/lib/sisimai/rhost/nttdocomo.rb +12 -12
  135. data/lib/sisimai/rhost/spectrum.rb +10 -12
  136. data/lib/sisimai/rhost/{tencentqq.rb → tencent.rb} +7 -8
  137. data/lib/sisimai/rhost.rb +23 -31
  138. data/lib/sisimai/smtp/command.rb +59 -0
  139. data/lib/sisimai/smtp/error.rb +4 -7
  140. data/lib/sisimai/smtp/reply.rb +161 -74
  141. data/lib/sisimai/smtp/status.rb +507 -393
  142. data/lib/sisimai/smtp/transcript.rb +124 -0
  143. data/lib/sisimai/smtp.rb +0 -1
  144. data/lib/sisimai/string.rb +74 -5
  145. data/lib/sisimai/time.rb +1 -2
  146. data/lib/sisimai/version.rb +1 -1
  147. data/lib/sisimai.rb +46 -31
  148. data/set-of-emails/maildir/bsd/lhost-domino-02.eml +6 -3
  149. data/set-of-emails/maildir/bsd/lhost-googlegroups-15.eml +174 -0
  150. data/set-of-emails/maildir/bsd/lhost-gsuite-15.eml +229 -0
  151. data/set-of-emails/maildir/bsd/lhost-postfix-75.eml +51 -0
  152. data/set-of-emails/maildir/bsd/lhost-postfix-76.eml +101 -0
  153. data/set-of-emails/maildir/bsd/lhost-postfix-77.eml +74 -0
  154. data/set-of-emails/maildir/bsd/lhost-postfix-78.eml +91 -0
  155. data/set-of-emails/maildir/bsd/lhost-receivingses-08.eml +88 -0
  156. data/set-of-emails/maildir/bsd/lhost-sendmail-60.eml +85 -0
  157. data/set-of-emails/maildir/bsd/rfc3464-43.eml +88 -0
  158. data/set-of-emails/maildir/bsd/rhost-google-03.eml +101 -0
  159. data/set-of-emails/maildir/bsd/rhost-google-04.eml +102 -0
  160. data/set-of-emails/maildir/bsd/rhost-google-05.eml +82 -0
  161. data/set-of-emails/maildir/bsd/rhost-google-06.eml +102 -0
  162. data/set-of-emails/maildir/bsd/rhost-google-07.eml +69 -0
  163. data/set-of-emails/maildir/bsd/rhost-google-08.eml +99 -0
  164. data/sisimai-java.gemspec +1 -1
  165. data/sisimai.gemspec +1 -1
  166. metadata +48 -26
  167. data/.rspec +0 -2
  168. data/lib/sisimai/data/yaml.rb +0 -33
  169. data/lib/sisimai/data.rb +0 -411
  170. data/lib/sisimai/mime.rb +0 -456
  171. data/lib/sisimai/rhost/googleapps.rb +0 -261
  172. /data/set-of-emails/maildir/bsd/{rfc3464-41.eml → rfc3834-05.eml} +0 -0
  173. /data/set-of-emails/maildir/bsd/{rhost-googleapps-01.eml → rhost-google-01.eml} +0 -0
  174. /data/set-of-emails/maildir/bsd/{rhost-googleapps-02.eml → rhost-google-02.eml} +0 -0
  175. /data/set-of-emails/maildir/bsd/{rhost-exchangeonline-01.eml → rhost-microsoft-01.eml} +0 -0
  176. /data/set-of-emails/maildir/bsd/{rhost-exchangeonline-02.eml → rhost-microsoft-02.eml} +0 -0
  177. /data/set-of-emails/maildir/bsd/{rhost-exchangeonline-03.eml → rhost-microsoft-03.eml} +0 -0
  178. /data/set-of-emails/maildir/bsd/{rhost-tencentqq-01.eml → rhost-tencent-01.eml} +0 -0
  179. /data/set-of-emails/maildir/bsd/{rhost-tencentqq-02.eml → rhost-tencent-02.eml} +0 -0
  180. /data/set-of-emails/maildir/bsd/{rhost-tencentqq-03.eml → rhost-tencent-03.eml} +0 -0
@@ -1,21 +1,21 @@
1
1
  module Sisimai
2
2
  module Reason
3
- # Sisimai::Reason::UserUnknown checks the bounce reason is "userunknown" or
4
- # not. This class is called only Sisimai::Reason class.
3
+ # Sisimai::Reason::UserUnknown checks the bounce reason is "userunknown" or not. This class is
4
+ # called only Sisimai::Reason class.
5
5
  #
6
- # This is the error that a local part (Left hand side of @ sign) of a recipient's
7
- # email address does not exist. In many case, a user has changed internet service
8
- # provider, or has quit company, or the local part is misspelled. Sisimai will
9
- # set "userunknown" to the reason of email bounce if the value of Status: field
10
- # in a bounce email is "5.1.1", or connection was refused at SMTP RCPT command,
11
- # or the contents of Diagnostic-Code: field represents that it is unknown user.
6
+ # This is the error that a local part (Left hand side of @ sign) of a recipient's email address
7
+ # does not exist. In many case, a user has changed internet service provider, or has quit company,
8
+ # or the local part is misspelled. Sisimai will set "userunknown" to the reason of email bounce
9
+ # if the value of Status: field in a bounce email is "5.1.1", or connection was refused at SMTP
10
+ # RCPT command, or the contents of Diagnostic-Code: field represents that it is unknown user.
12
11
  #
13
12
  # <kijitora@example.co.jp>: host mx01.example.co.jp[192.0.2.8] said:
14
13
  # 550 5.1.1 Address rejected kijitora@example.co.jp (in reply to
15
14
  # RCPT TO command)
16
15
  module UserUnknown
17
- # Imported from p5-Sisimail/lib/Sisimai/Reason/UserUnknown.pm
18
16
  class << self
17
+ require 'sisimai/string'
18
+
19
19
  PreMatches = %w[NoRelaying Blocked MailboxFull HasMoved Rejected NotAccept]
20
20
  ModulePath = {
21
21
  'Sisimai::Reason::NoRelaying' => 'sisimai/reason/norelaying',
@@ -25,135 +25,117 @@ module Sisimai
25
25
  'Sisimai::Reason::Rejected' => 'sisimai/reason/rejected',
26
26
  'Sisimai::Reason::NotAccept' => 'sisimai/reason/notaccept',
27
27
  }
28
- Regex = %r{(?>
29
- [#]5[.]1[.]1[ ]bad[ ]address
30
- |[<][^ ]+[>][ ]not[ ]found
31
- |[<][^ ]+[@][^ ]+[>][.][.][.][ ]blocked[ ]by[ ]
32
- |550[ ]address[ ]invalid
33
- |5[.]0[.]0[.][ ]mail[ ]rejected[.]
34
- |5[.]1[.]0[ ]address[ ]rejected[.]
35
- |account[ ][^ ]+[ ]does[ ]not[ ]exist[ ]at[ ]the[ ]organization
36
- |adresse[ ]d[ ]au[ ]moins[ ]un[ ]destinataire[ ]invalide[.][ ]invalid[ ]recipient[.][0-9a-z_]+41[68]
37
- |address[ ](?:does[ ]not[ ]exist|unknown)
38
- |address[ ](?:does[ ]not[ ]exist|not[ ]present[ ]in[ ]directory|unknown)
39
- |archived[ ]recipient
40
- |bad[-_ ]recipient
41
- |can[']t[ ]accept[ ]user
42
- |does[ ]not[ ]exist[.]
43
- |destination[ ](?:
44
- addresses[ ]were[ ]unknown
45
- |server[ ]rejected[ ]recipients
46
- )
47
- |email[ ]address[ ](?:does[ ]not[ ]exist|could[ ]not[ ]be[ ]found)
48
- |invalid[ ](?:
49
- address
50
- |mailbox:?
51
- |mailbox[ ]path
52
- |recipient
53
- )
54
- |is[ ]not[ ](?:
55
- a[ ]known[ ]user
56
- |a[ ]valid[ ]mailbox
57
- |an[ ]active[ ]address[ ]at[ ]this[ ]host
58
- )
59
- |mailbox[ ](?:
60
- [^ ]+[ ]does[ ]not[ ]exist
61
- |[^ ]+[@][^ ]+[ ]unavailable
62
- |does[ ]not[ ]exist
63
- |invalid
64
- |is[ ](?:inactive|unavailable)
65
- |not[ ](?:present|found)
66
- |unavailable
67
- )
68
- |nessun[ ]utente[ ]simile[ ]in[ ]questo[ ]indirizzo
69
- |no[ ](?:
70
- [ ][^ ]+[ ]in[ ]name[ ]directory
71
- |account[ ]by[ ]that[ ]name[ ]here
72
- |existe[ ](?:dicha[ ]persona|ese[ ]usuario[ ])
73
- |mail[ ]box[ ]available[ ]for[ ]this[ ]user
74
- |mailbox[ ](?:
75
- by[ ]that[ ]name[ ]is[ ]currently[ ]available
76
- |found
77
- )
78
- |matches[ ]to[ ]nameserver[ ]query
79
- |such[ ](?:
80
- address[ ]here
81
- |mailbox
82
- |person[ ]at[ ]this[ ]address
83
- |recipient
84
- |user(?:[ ]here)?
85
- )
86
- |thank[ ]you[ ]rejected:[ ]account[ ]unavailable:
87
- |valid[ ]recipients,[ ]bye
88
- )
89
- |non[- ]?existent[ ]user
90
- |not[ ](?:
91
- a[ ]valid[ ](?:recipient|user[ ]here)
92
- |a[ ]local[ ]address
93
- |email[ ]addresses
94
- )
95
- |rcpt[ ][<][^ ]+[>][ ]does[ ]not[ ]exist
96
- |recipient[ ]address[ ]rejected[.][ ][(]in[ ]reply[ ]to[ ]rcpt[ ]to[ ]command[)]
97
- |recipient[ ](?:
98
- [^ ]+[ ]was[ ]not[ ]found[ ]in
99
- |address[ ]rejected:[ ](?:
100
- access[ ]denied
101
- |invalid[ ]user
102
- |invalid-recipient
103
- |user[ ][^ ]+[ ]does[ ]not[ ]exist
104
- |user[ ]unknown[ ]in[ ][^ ]+[ ]table
105
- |unknown[ ]user
106
- )
107
- |does[ ]not[ ]exist(?:[ ]on[ ]this[ ]system)?
108
- |is[ ]not[ ]local
109
- |not[ ](?:exist|found|ok)
110
- |refuses[ ]to[ ]accept[ ]your[ ]mail
111
- |unknown
112
- )
113
- |requested[ ]action[ ]not[ ]taken:[ ]mailbox[ ]unavailable
114
- |resolver[.]adr[.]recipient notfound
115
- |said:[ ]550[-[ ]]5[.]1[.]1[ ][^ ]+[ ]user[ ]unknown[ ]
116
- |sorry,[ ](?:
117
- user[ ]unknown
118
- |badrcptto
119
- |no[ ]mailbox[ ]here[ ]by[ ]that[ ]name
120
- |your[ ]envelope[ ]recipient[ ]has[ ]been[ ]denied
121
- )
122
- |that[ ]domain[ ]or[ ]user[ ]isn't[ ]in[ ]my[ ]list[ ]of[ ]allowed[ ]rcpthosts
123
- |the[ ](?:
124
- email[ ]account[ ]that[ ]you[ ]tried[ ]to[ ]reach[ ]does[ ]not[ ]exist
125
- |following[ ]recipients[ ]was[ ]undeliverable
126
- |user[']s[ ]email[ ]name[ ]is[ ]not[ ]found
127
- )
128
- |there[ ]is[ ]no[ ]one[ ]at[ ]this[ ]address
129
- |this[ ](?:
130
- address[ ]no[ ]longer[ ]accepts[ ]mail
131
- |email[ ]address[ ]is[ ]wrong[ ]or[ ]no[ ]longer[ ]valid
132
- |recipient[ ]is[ ]in[ ]my[ ]badrecipientto[ ]list
133
- |recipient[ ]is[ ]not[ ]in[ ]my[ ]validrcptto[ ]list
134
- |spectator[ ]does[ ]not[ ]exist
135
- |user[ ]doesn[']?t[ ]have[ ]a[ ][^ ]+[ ]account
136
- )
137
- |unknown[ ](?:
138
- e[-]?mail[ ]address
139
- |local[- ]part
140
- |mailbox
141
- |recipient
142
- |user
143
- )
144
- |user[ ](?:
145
- [^ ]+[ ]was[ ]not[ ]found
146
- |[^ ]+[ ]does[ ]not[ ]exist
147
- |does[ ]not[ ]exist
148
- |missing[ ]home[ ]directory
149
- |not[ ](?:active|exist|found|known)
150
- |unknown
151
- )
152
- |utilisateur[ ]inconnu[ ]!
153
- |vdeliver:[ ]invalid[ ]or[ ]unknown[ ]virtual[ ]user
154
- |your[ ]envelope[ ]recipient[ ]is[ ]in[ ]my[ ]badrcptto[ ]list
155
- )
156
- }x
28
+ Index = [
29
+ '#5.1.1 bad address',
30
+ '550 address invalid',
31
+ '5.1.0 address rejected.',
32
+ 'address does not exist',
33
+ 'address not present in directory',
34
+ 'address unknown',
35
+ "can't accept user",
36
+ 'does not exist.',
37
+ 'destination addresses were unknown',
38
+ 'destination server rejected recipients',
39
+ 'email address does not exist',
40
+ 'email address could not be found',
41
+ 'invalid address',
42
+ 'invalid mailbox',
43
+ 'invalid mailbox path',
44
+ 'invalid recipient',
45
+ 'is not a known user',
46
+ 'is not a valid mailbox',
47
+ 'is not an active address at this host',
48
+ 'mailbox does not exist',
49
+ 'mailbox invalid',
50
+ 'mailbox is inactive',
51
+ 'mailbox is unavailable',
52
+ 'mailbox not present',
53
+ 'mailbox not found',
54
+ 'mailbox unavaiable',
55
+ 'nessun utente simile in questo indirizzo',
56
+ 'no account by that name here',
57
+ 'no existe dicha persona',
58
+ 'no existe ese usuario ',
59
+ 'no mail box available for this user',
60
+ 'no mailbox by that name is currently available',
61
+ 'no mailbox found',
62
+ 'no such address here',
63
+ 'no such mailbox',
64
+ 'no such person at this address',
65
+ 'no such recipient',
66
+
67
+ 'no such user',
68
+ 'no thank you rejected: account unavailable',
69
+ 'no valid recipients, bye',
70
+ 'not a valid recipient',
71
+ 'not a valid user here',
72
+ 'not a local address',
73
+ 'not email addresses',
74
+ 'recipient address rejected. (in reply to rcpt to command)',
75
+ 'recipient address rejected: access denied',
76
+ 'recipient address rejected: invalid user',
77
+ 'recipient address rejected: invalid-recipient',
78
+ 'recipient address rejected: unknown user',
79
+ 'recipient does not exist',
80
+ 'recipient is not local',
81
+ 'recipient not exist',
82
+ 'recipient not found',
83
+ 'recipient not ok',
84
+ 'recipient refuses to accept your mail',
85
+ 'recipient unknown',
86
+ 'requested action not taken: mailbox unavailable',
87
+ 'resolver.adr.recipient notfound',
88
+ 'sorry, user unknown',
89
+ 'sorry, badrcptto',
90
+ 'sorry, no mailbox here by that name',
91
+ 'sorry, your envelope recipient has been denied',
92
+ "that domain or user isn't in my list of allowed rcpthosts",
93
+ 'the email account that you tried to reach does not exist',
94
+ 'the following recipients was undeliverable',
95
+ "the user's email name is not found",
96
+ 'there is no one at this address',
97
+ 'this address no longer accepts mail',
98
+ 'this email address is wrong or no longer valid',
99
+ 'this recipient is in my badrecipientto list',
100
+ 'this recipient is not in my validrcptto list',
101
+ 'this spectator does not exist',
102
+ 'unknown mailbox',
103
+ 'unknown recipient',
104
+ 'unknown user',
105
+ 'user does not exist',
106
+ 'user missing home directory',
107
+ 'user not active',
108
+ 'user not exist',
109
+ 'user not found',
110
+ 'user not known',
111
+ 'user unknown',
112
+ 'utilisateur inconnu !',
113
+ 'vdeliver: invalid or unknown virtual user',
114
+ 'your envelope recipient is in my badrcptto list',
115
+ ].freeze
116
+ Pairs = [
117
+ ['<', '> not found'],
118
+ ['<', '>... blocked by '],
119
+ ['account ', ' does not exist at the organization'],
120
+ ['adresse d au moins un destinataire invalide. invalid recipient.', '416'],
121
+ ['adresse d au moins un destinataire invalide. invalid recipient.', '418'],
122
+ ['bad', 'recipient'],
123
+ ['mailbox ', 'does not exist'],
124
+ ['mailbox ', 'unavailable or access denied'],
125
+ ['no ', ' in name directory'],
126
+ ['non', 'existent user'],
127
+ ['rcpt <', ' does not exist'],
128
+ ['recipient ', ' was not found in'],
129
+ ['recipient address rejected: user ', ' does not exist'],
130
+ ['recipient address rejected: user unknown in ', ' table'],
131
+ ['said: 550-5.1.1 ', ' user unknown '],
132
+ ['said: 550 5.1.1 ', ' user unknown '],
133
+ ["this user doesn't have a ", " account"],
134
+ ['unknown e', 'mail address'],
135
+ ['unknown local', 'part'],
136
+ ['user ', ' was not found'],
137
+ ['user ', ' does not exist'],
138
+ ].freeze
157
139
 
158
140
  def text; return 'userunknown'; end
159
141
  def description; return "Email rejected due to a local part of a recipient's email address does not exist"; end
@@ -164,22 +146,23 @@ module Sisimai
164
146
  # true: Matched
165
147
  def match(argv1)
166
148
  return nil unless argv1
167
- return true if argv1 =~ Regex
149
+ return true if Index.any? { |a| argv1.include?(a) }
150
+ return true if Pairs.any? { |a| Sisimai::String.aligned(argv1, a) }
168
151
  return false
169
152
  end
170
153
 
171
154
  # Whether the address is "userunknown" or not
172
- # @param [Sisimai::Data] argvs Object to be detected the reason
155
+ # @param [Sisimai::Fact] argvs Object to be detected the reason
173
156
  # @return [True,False] true: is unknown user
174
157
  # false: is not unknown user.
175
158
  # @see http://www.ietf.org/rfc/rfc2822.txt
176
159
  def true(argvs)
177
- return true if argvs.reason == 'userunknown'
160
+ return true if argvs['reason'] == 'userunknown'
178
161
 
179
- tempreason = Sisimai::SMTP::Status.name(argvs.deliverystatus) || ''
162
+ tempreason = Sisimai::SMTP::Status.name(argvs['deliverystatus']) || ''
180
163
  return false if tempreason == 'suspend'
181
164
 
182
- diagnostic = argvs.diagnosticcode.downcase
165
+ issuedcode = argvs['diagnosticcode'].downcase
183
166
  if tempreason == 'userunknown'
184
167
  # *.1.1 = 'Bad destination mailbox address'
185
168
  # Status: 5.1.1
@@ -198,17 +181,17 @@ module Sisimai
198
181
  next
199
182
  end
200
183
 
201
- next unless r.match(diagnostic)
184
+ next unless r.match(issuedcode)
202
185
  # Match with reason defined in Sisimai::Reason::* except UserUnknown.
203
186
  matchother = true
204
187
  break
205
188
  end
206
189
  return true unless matchother # Did not match with other message patterns
207
190
 
208
- elsif argvs.smtpcommand == 'RCPT'
191
+ elsif argvs['smtpcommand'] == 'RCPT'
209
192
  # When the SMTP command is not "RCPT", the session rejected by other
210
193
  # reason, maybe.
211
- return true if match(diagnostic)
194
+ return true if match(issuedcode)
212
195
  end
213
196
 
214
197
  return false
@@ -1,16 +1,15 @@
1
1
  module Sisimai
2
2
  module Reason
3
- # Sisimai::Reason::Vacation is for only returning text and description.
4
- # This class is called only from Sisimai.reason method.
3
+ # Sisimai::Reason::Vacation is for only returning text and description. This class is called only
4
+ # from Sisimai.reason method.
5
5
  module Vacation
6
- # Imported from p5-Sisimail/lib/Sisimai/Reason/Vacation.pm
7
6
  class << self
8
7
  Index = [
9
8
  'i am away on vacation',
10
9
  'i am away until',
11
10
  'i am out of the office',
12
11
  'i will be traveling for work on',
13
- ]
12
+ ].freeze
14
13
 
15
14
  def text; return 'vacation'; end
16
15
  def description; return 'Email replied automatically due to a recipient is out of office'; end
@@ -1,11 +1,10 @@
1
1
  module Sisimai
2
2
  module Reason
3
- # Sisimai::Reason::VirusDetected checks the bounce reason is "virusdetected"
4
- # or not. This class is called only Sisimai::Reason class.
3
+ # Sisimai::Reason::VirusDetected checks the bounce reason is "virusdetected" or not. This class
4
+ # is called only Sisimai::Reason class.
5
5
  #
6
- # This is an error that any virus or trojan horse detected in the message by
7
- # a virus scanner program at a destination mail server. This reason has been
8
- # divided from "securityerror" at Sisimai 4.22.0.
6
+ # This is an error that any virus or trojan horse detected in the message by a virus scanner program
7
+ # at a destination mail server. This reason has been divided from "securityerror" at Sisimai 4.22.0.
9
8
  #
10
9
  # Your message was infected with a virus. You should download a virus
11
10
  # scanner and check your computer for viruses.
@@ -14,15 +13,15 @@ module Sisimai
14
13
  # Recipient: <kijitora@example.jp>
15
14
  #
16
15
  module VirusDetected
17
- # Imported from p5-Sisimail/lib/Sisimai/Reason/VirusDetected.pm
18
16
  class << self
19
17
  Index = [
20
18
  'it has a potentially executable attachment',
21
19
  'the message was rejected because it contains prohibited virus or spam content',
22
20
  'this form of attachment has been used by recent viruses or other malware',
23
21
  'virus detected',
22
+ 'virus phishing/malicious_url detected',
24
23
  'your message was infected with a virus',
25
- ]
24
+ ].freeze
26
25
 
27
26
  def text; return 'virusdetected'; end
28
27
  def description; return 'Email rejected due to a virus scanner on a destination host'; end
@@ -39,7 +38,7 @@ module Sisimai
39
38
  end
40
39
 
41
40
  # The bounce reason is "virusdetected" or not
42
- # @param [Sisimai::Data] argvs Object to be detected the reason
41
+ # @param [Sisimai::Fact] argvs Object to be detected the reason
43
42
  # @return [True,False] true: virus detected
44
43
  # false: virus was not detected
45
44
  # @since 4.22.0
@@ -48,9 +47,9 @@ module Sisimai
48
47
  # The value of "reason" isn't "visusdetected" when the value of "smtpcommand" is an SMTP
49
48
  # command to be sent before the SMTP DATA command because all the MTAs read the headers
50
49
  # and the entire message body after the DATA command.
51
- return true if argvs.reason == 'virusdetected'
52
- return false if %w[CONN EHLO HELO MAIL RCPT].include?(argvs.smtpcommand)
53
- return true if match(argvs.diagnosticcode.downcase)
50
+ return true if argvs['reason'] == 'virusdetected'
51
+ return false if %w[CONN EHLO HELO MAIL RCPT].include?(argvs['smtpcommand'])
52
+ return true if match(argvs['diagnosticcode'].downcase)
54
53
  return false
55
54
  end
56
55