sisimai 4.25.3-java → 4.25.4-java

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.

Files changed (123) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +1 -0
  3. data/.travis.yml +1 -0
  4. data/ANALYTICAL-PRECISION +2 -4
  5. data/CONTRIBUTING +4 -0
  6. data/ChangeLog.md +39 -0
  7. data/Developers.mk +1 -72
  8. data/Makefile +4 -0
  9. data/README-JA.md +3 -0
  10. data/README.md +5 -2
  11. data/lib/sisimai.rb +4 -3
  12. data/lib/sisimai/arf.rb +6 -6
  13. data/lib/sisimai/bite.rb +8 -3
  14. data/lib/sisimai/bite/email.rb +7 -50
  15. data/lib/sisimai/bite/json.rb +5 -25
  16. data/lib/sisimai/data.rb +1 -1
  17. data/lib/sisimai/lhost.rb +101 -0
  18. data/lib/sisimai/{bite/email → lhost}/activehunter.rb +10 -10
  19. data/lib/sisimai/{bite/email → lhost}/amavis.rb +9 -9
  20. data/lib/sisimai/lhost/amazonses.rb +403 -0
  21. data/lib/sisimai/{bite/email → lhost}/amazonworkmail.rb +9 -9
  22. data/lib/sisimai/{bite/email → lhost}/aol.rb +10 -10
  23. data/lib/sisimai/{bite/email → lhost}/apachejames.rb +10 -10
  24. data/lib/sisimai/{bite/email → lhost}/bigfoot.rb +9 -9
  25. data/lib/sisimai/{bite/email → lhost}/biglobe.rb +10 -10
  26. data/lib/sisimai/{bite/email → lhost}/courier.rb +10 -10
  27. data/lib/sisimai/{bite/email → lhost}/domino.rb +9 -9
  28. data/lib/sisimai/{bite/email → lhost}/einsundeins.rb +10 -10
  29. data/lib/sisimai/{bite/email → lhost}/exchange2003.rb +9 -9
  30. data/lib/sisimai/{bite/email → lhost}/exchange2007.rb +9 -9
  31. data/lib/sisimai/{bite/email → lhost}/exim.rb +10 -10
  32. data/lib/sisimai/{bite/email → lhost}/ezweb.rb +9 -9
  33. data/lib/sisimai/{bite/email → lhost}/facebook.rb +9 -9
  34. data/lib/sisimai/{bite/email → lhost}/fml.rb +10 -10
  35. data/lib/sisimai/{bite/email → lhost}/gmx.rb +10 -10
  36. data/lib/sisimai/{bite/email → lhost}/google.rb +14 -14
  37. data/lib/sisimai/{bite/email → lhost}/gsuite.rb +10 -10
  38. data/lib/sisimai/{bite/email → lhost}/imailserver.rb +10 -10
  39. data/lib/sisimai/{bite/email → lhost}/interscanmss.rb +9 -9
  40. data/lib/sisimai/{bite/email → lhost}/kddi.rb +10 -10
  41. data/lib/sisimai/{bite/email → lhost}/mailfoundry.rb +9 -9
  42. data/lib/sisimai/{bite/email → lhost}/mailmarshalsmtp.rb +9 -9
  43. data/lib/sisimai/{bite/email → lhost}/mailru.rb +11 -11
  44. data/lib/sisimai/{bite/email → lhost}/mcafee.rb +9 -9
  45. data/lib/sisimai/{bite/email → lhost}/messagelabs.rb +9 -9
  46. data/lib/sisimai/{bite/email → lhost}/messagingserver.rb +9 -9
  47. data/lib/sisimai/{bite/email → lhost}/mfilter.rb +9 -9
  48. data/lib/sisimai/{bite/email → lhost}/mxlogic.rb +10 -10
  49. data/lib/sisimai/{bite/email → lhost}/notes.rb +9 -9
  50. data/lib/sisimai/{bite/email → lhost}/office365.rb +10 -10
  51. data/lib/sisimai/{bite/email → lhost}/opensmtpd.rb +9 -9
  52. data/lib/sisimai/{bite/email → lhost}/outlook.rb +9 -9
  53. data/lib/sisimai/{bite/email → lhost}/postfix.rb +9 -9
  54. data/lib/sisimai/{bite/email → lhost}/qmail.rb +9 -9
  55. data/lib/sisimai/{bite/email → lhost}/receivingses.rb +11 -11
  56. data/lib/sisimai/{bite/email → lhost}/sendgrid.rb +120 -11
  57. data/lib/sisimai/{bite/email → lhost}/sendmail.rb +9 -9
  58. data/lib/sisimai/{bite/email → lhost}/surfcontrol.rb +9 -9
  59. data/lib/sisimai/{bite/email → lhost}/userdefined.rb +9 -9
  60. data/lib/sisimai/{bite/email → lhost}/v5sendmail.rb +10 -10
  61. data/lib/sisimai/{bite/email → lhost}/verizon.rb +11 -11
  62. data/lib/sisimai/{bite/email → lhost}/x1.rb +9 -9
  63. data/lib/sisimai/{bite/email → lhost}/x2.rb +9 -9
  64. data/lib/sisimai/{bite/email → lhost}/x3.rb +9 -9
  65. data/lib/sisimai/{bite/email → lhost}/x4.rb +10 -10
  66. data/lib/sisimai/{bite/email → lhost}/x5.rb +9 -9
  67. data/lib/sisimai/{bite/email → lhost}/yahoo.rb +9 -9
  68. data/lib/sisimai/{bite/email → lhost}/yandex.rb +10 -10
  69. data/lib/sisimai/{bite/email → lhost}/zoho.rb +10 -10
  70. data/lib/sisimai/mda.rb +1 -1
  71. data/lib/sisimai/message.rb +535 -28
  72. data/lib/sisimai/message/email.rb +3 -454
  73. data/lib/sisimai/message/json.rb +3 -177
  74. data/lib/sisimai/order.rb +238 -4
  75. data/lib/sisimai/order/email.rb +5 -190
  76. data/lib/sisimai/order/json.rb +3 -39
  77. data/lib/sisimai/reason.rb +1 -1
  78. data/lib/sisimai/reason/norelaying.rb +1 -1
  79. data/lib/sisimai/reason/userunknown.rb +1 -1
  80. data/lib/sisimai/reason/virusdetected.rb +1 -0
  81. data/lib/sisimai/rfc1894.rb +2 -2
  82. data/lib/sisimai/rfc3464.rb +13 -13
  83. data/lib/sisimai/rfc3834.rb +3 -3
  84. data/lib/sisimai/rfc5322.rb +1 -1
  85. data/lib/sisimai/rhost.rb +5 -4
  86. data/lib/sisimai/rhost/exchangeonline.rb +1 -1
  87. data/lib/sisimai/rhost/franceptt.rb +1 -1
  88. data/lib/sisimai/rhost/godaddy.rb +1 -1
  89. data/lib/sisimai/rhost/iua.rb +39 -0
  90. data/lib/sisimai/version.rb +1 -1
  91. data/set-of-emails/README.md +0 -1
  92. data/set-of-emails/maildir/bsd/email-gsuite-13.eml +261 -0
  93. data/set-of-emails/maildir/bsd/email-postfix-62.eml +105 -0
  94. data/set-of-emails/maildir/bsd/email-postfix-63.eml +85 -0
  95. data/set-of-emails/maildir/bsd/rhost-iua-01.eml +70 -0
  96. metadata +75 -94
  97. data/fig/sisimai-architecture.png +0 -0
  98. data/lib/sisimai/bite/email/amazonses.rb +0 -186
  99. data/lib/sisimai/bite/json/amazonses.rb +0 -242
  100. data/lib/sisimai/bite/json/sendgrid.rb +0 -123
  101. data/set-of-emails/jsonobj/json-amazonses-01.json +0 -1
  102. data/set-of-emails/jsonobj/json-amazonses-02.json +0 -11
  103. data/set-of-emails/jsonobj/json-amazonses-03.json +0 -1
  104. data/set-of-emails/jsonobj/json-amazonses-04.json +0 -1
  105. data/set-of-emails/jsonobj/json-amazonses-05.json +0 -1
  106. data/set-of-emails/jsonobj/json-amazonses-06.json +0 -1
  107. data/set-of-emails/jsonobj/json-sendgrid-01.json +0 -1
  108. data/set-of-emails/jsonobj/json-sendgrid-02.json +0 -1
  109. data/set-of-emails/jsonobj/json-sendgrid-03.json +0 -1
  110. data/set-of-emails/jsonobj/json-sendgrid-04.json +0 -1
  111. data/set-of-emails/jsonobj/json-sendgrid-05.json +0 -1
  112. data/set-of-emails/jsonobj/json-sendgrid-06.json +0 -1
  113. data/set-of-emails/jsonobj/json-sendgrid-07.json +0 -1
  114. data/set-of-emails/jsonobj/json-sendgrid-08.json +0 -1
  115. data/set-of-emails/jsonobj/json-sendgrid-09.json +0 -1
  116. data/set-of-emails/jsonobj/json-sendgrid-10.json +0 -1
  117. data/set-of-emails/jsonobj/json-sendgrid-11.json +0 -1
  118. data/set-of-emails/jsonobj/json-sendgrid-12.json +0 -1
  119. data/set-of-emails/jsonobj/json-sendgrid-13.json +0 -1
  120. data/set-of-emails/jsonobj/json-sendgrid-14.json +0 -1
  121. data/set-of-emails/jsonobj/json-sendgrid-15.json +0 -1
  122. data/set-of-emails/jsonobj/json-sendgrid-16.json +0 -1
  123. data/set-of-emails/jsonobj/json-sendgrid-17.json +0 -1
@@ -4,13 +4,7 @@ module Sisimai
4
4
  # retrieved from some Cloud Email Deliveries API to data structure.
5
5
  class JSON
6
6
  # Imported from p5-Sisimail/lib/Sisimai/Message/JSON.pm
7
- require 'sisimai/order/json'
8
-
9
- @@ToBeLoaded = []
10
- @@TryOnFirst = []
11
-
12
- DefaultSet = Sisimai::Order::JSON.default
13
- ObjectKeys = Sisimai::Order::JSON.by('keyname')
7
+ require 'sisimai/message'
14
8
 
15
9
  # Make data structure from decoded JSON object
16
10
  # @param [Hash] argvs Bounce object
@@ -20,176 +14,8 @@ module Sisimai
20
14
  # @options argvs [Code] hook Reference to callback method
21
15
  # @return [Hash] Resolved data structure
22
16
  def self.make(argvs)
23
- hookmethod = argvs['hook'] || nil
24
- processing = {
25
- 'from' => '', # From_ line
26
- 'header' => {}, # Email header
27
- 'rfc822' => '', # Original message part
28
- 'ds' => [], # Parsed data, Delivery Status
29
- 'catch' => nil, # Data parsed by callback method
30
- }
31
- methodargv = {
32
- 'load' => argvs['load'] || [],
33
- 'order' => argvs['order'] || []
34
- }
35
- @@ToBeLoaded = Sisimai::Message::JSON.load(methodargv)
36
- @@TryOnFirst = Sisimai::Message::JSON.makeorder(argvs['data'])
37
-
38
- # Rewrite message body for detecting the bounce reason
39
- methodargv = { 'hook' => hookmethod, 'json' => argvs['data'] }
40
- return nil unless bouncedata = Sisimai::Message::JSON.parse(methodargv)
41
- return nil if bouncedata.empty?
42
-
43
- processing['ds'] = bouncedata['ds']
44
- processing['catch'] = bouncedata['catch']
45
- processing['rfc822'] = bouncedata['rfc822']
46
- return processing
47
- end
48
-
49
- # Load MTA(JSON) modules which specified at 'order' and 'load' in the argument
50
- # @param [Hash] argvs Module information to be loaded
51
- # @options argvs [Array] load User defined MTA(JSON) module list
52
- # @options argvs [Array] order The order of MTA(JSON) modules
53
- # @return [Array] Module list
54
- # @since v4.20.0
55
- def self.load(argvs)
56
- modulelist = []
57
- tobeloaded = []
58
-
59
- %w[load order].each do |e|
60
- # The order of MTA(JSON) modules specified by user
61
- next unless argvs.key?(e)
62
- next unless argvs[e].is_a? Array
63
- next if argvs[e].empty?
64
-
65
- modulelist += argvs['order'] if e == 'order'
66
- next unless e == 'load'
67
-
68
- # Load user defined MTA(JSON) module
69
- argvs['load'].each do |v|
70
- # Load user defined MTA(JSON) module
71
- begin
72
- require v.to_s.gsub('::', '/').downcase
73
- rescue LoadError
74
- warn ' ***warning: Failed to load ' << v
75
- next
76
- end
77
- tobeloaded << v
78
- end
79
- end
80
-
81
- modulelist.each do |e|
82
- # Append the custom order of MTA(JSON) modules
83
- next if tobeloaded.index(e)
84
- tobeloaded << e
85
- end
86
-
87
- return tobeloaded
88
- end
89
-
90
- # Check the decoded JSON strucutre for detecting MTA(JSON) modules and
91
- # returns the order of modules to be called.
92
- # @param [Hash] heads Decoded JSON object
93
- # @return [Array] Order of MTA(JSON) modules
94
- def self.makeorder(argvs)
95
- return [] unless argvs
96
- return [] if argvs.empty?
97
- order = []
98
-
99
- # Seek some key names from given argument
100
- ObjectKeys.each_key do |e|
101
- # Get MTA(JSON) module list matched with a specified key
102
- next unless argvs.key?(e)
103
- order += ObjectKeys[e] # Matched and push it into the order list
104
- break
105
- end
106
- return order
107
- end
108
-
109
- # Parse bounce object with each MTA(JSON) module
110
- # @param [Hash] argvs Processing message entity.
111
- # @param options argvs [Hash] json Decoded bounce object
112
- # @param options argvs [Proc] hook Hook method to be called
113
- # @return [Hash] Parsed and structured bounce mails
114
- def self.parse(argvs)
115
- bouncedata = argvs['json'] || {}
116
- hookmethod = argvs['hook'] || nil
117
- havecaught = nil
118
- haveloaded = {}
119
- hasadapted = nil
120
-
121
- # Call the hook method
122
- if hookmethod.is_a? Proc
123
- # Execute hook method
124
- begin
125
- p = {
126
- 'datasrc' => 'json',
127
- 'headers' => nil,
128
- 'message' => nil,
129
- 'bounces' => argvs['json']
130
- }
131
- havecaught = hookmethod.call(p)
132
- rescue StandardError => ce
133
- warn ' ***warning: Something is wrong in hook method :' << ce.to_s
134
- end
135
- end
136
-
137
- catch :ADAPTOR do
138
- while true
139
- # 1. User-Defined Module
140
- # 2. MTA(JSON) Module Candidates to be tried on first
141
- # 3. Sisimai::Bite::JSON::*
142
- #
143
- @@ToBeLoaded.each do |r|
144
- # Call user defined MTA(JSON) modules
145
- next if haveloaded[r]
146
- begin
147
- require r.gsub('::', '/').downcase
148
- rescue LoadError => ce
149
- warn ' ***warning: Failed to load ' << ce.to_s
150
- next
151
- end
152
- hasadapted = Module.const_get(r).adapt(bouncedata)
153
- haveloaded[r] = true
154
- throw :ADAPTOR if hasadapted
155
- end
156
-
157
- @@TryOnFirst.each do |r|
158
- # Try MTA(JSON) module candidates which are detected from object
159
- # key names
160
- next if haveloaded.key?(r)
161
- begin
162
- require r.gsub('::', '/').downcase
163
- rescue LoadError => ce
164
- warn ' ***warning: ' << ce.to_s
165
- next
166
- end
167
- hasadapted = Module.const_get(r).adapt(bouncedata)
168
- haveloaded[r] = true
169
- throw :ADAPTOR if hasadapted
170
- end
171
-
172
- DefaultSet.each do |r|
173
- # Default order of MTA(JSON) modules
174
- next if haveloaded.key?(r)
175
- begin
176
- require r.gsub('::', '/').downcase
177
- rescue => ce
178
- warn ' ***warning: ' << ce.to_s
179
- next
180
- end
181
-
182
- hasadapted = Module.const_get(r).adapt(bouncedata)
183
- haveloaded[r] = true
184
- throw :ADAPTOR if hasadapted
185
- end
186
-
187
- break # as of now, we have no sample JSON data for coding this block
188
- end
189
- end
190
-
191
- hasadapted['catch'] = havecaught if hasadapted
192
- return hasadapted
17
+ Sisimai::Message.warn(self.name, 'gone')
18
+ return Sisimai::Message.make(argvs)
193
19
  end
194
20
 
195
21
  end
data/lib/sisimai/order.rb CHANGED
@@ -4,10 +4,244 @@ module Sisimai
4
4
  module Order
5
5
  # Imported from p5-Sisimail/lib/Sisimai/Order.pm
6
6
  class << self
7
- def by; return {}; end
8
- def default; return []; end
9
- def another; return []; end
10
- def headers; return {}; end
7
+ require 'sisimai/lhost'
8
+
9
+ OrderE1 = [
10
+ # These modules have many subject patterns or have MIME encoded subjects
11
+ # which is hard to code as regular expression
12
+ 'Sisimai::Lhost::Exim',
13
+ 'Sisimai::Lhost::Exchange2003',
14
+ ].freeze
15
+ OrderE2 = [
16
+ # These modules have no MTA specific header and did not listed in the
17
+ # following subject header based regular expressions.
18
+ 'Sisimai::Lhost::Exchange2007',
19
+ 'Sisimai::Lhost::Facebook',
20
+ 'Sisimai::Lhost::KDDI',
21
+ ].freeze
22
+ OrderE3 = [
23
+ # These modules have no MTA specific header but listed in the following
24
+ # subject header based regular expressions.
25
+ 'Sisimai::Lhost::Sendmail',
26
+ 'Sisimai::Lhost::Postfix',
27
+ 'Sisimai::Lhost::Qmail',
28
+ 'Sisimai::Lhost::SendGrid',
29
+ 'Sisimai::Lhost::Courier',
30
+ 'Sisimai::Lhost::OpenSMTPD',
31
+ 'Sisimai::Lhost::Notes',
32
+ 'Sisimai::Lhost::MessagingServer',
33
+ 'Sisimai::Lhost::Domino',
34
+ 'Sisimai::Lhost::Bigfoot',
35
+ 'Sisimai::Lhost::EinsUndEins',
36
+ 'Sisimai::Lhost::MXLogic',
37
+ 'Sisimai::Lhost::Amavis',
38
+ 'Sisimai::Lhost::IMailServer',
39
+ 'Sisimai::Lhost::X4',
40
+ ].freeze
41
+ OrderE4 = [
42
+ # These modules have no MTA specific headers and there are few samples or
43
+ # too old MTA
44
+ 'Sisimai::Lhost::Verizon',
45
+ 'Sisimai::Lhost::InterScanMSS',
46
+ 'Sisimai::Lhost::MailFoundry',
47
+ 'Sisimai::Lhost::ApacheJames',
48
+ 'Sisimai::Lhost::Biglobe',
49
+ 'Sisimai::Lhost::EZweb',
50
+ 'Sisimai::Lhost::X5',
51
+ 'Sisimai::Lhost::X3',
52
+ 'Sisimai::Lhost::X2',
53
+ 'Sisimai::Lhost::X1',
54
+ 'Sisimai::Lhost::V5sendmail',
55
+ ].freeze
56
+ OrderE5 = [
57
+ # These modules have one or more MTA specific headers but other headers
58
+ # also required for detecting MTA name
59
+ 'Sisimai::Lhost::Outlook',
60
+ 'Sisimai::Lhost::MailRu',
61
+ 'Sisimai::Lhost::MessageLabs',
62
+ 'Sisimai::Lhost::MailMarshalSMTP',
63
+ 'Sisimai::Lhost::MFILTER',
64
+ 'Sisimai::Lhost::Google',
65
+ ].freeze
66
+ OrderE9 = [
67
+ # These modules have one or more MTA specific headers
68
+ 'Sisimai::Lhost::Aol',
69
+ 'Sisimai::Lhost::Yahoo',
70
+ 'Sisimai::Lhost::AmazonSES',
71
+ 'Sisimai::Lhost::GMX',
72
+ 'Sisimai::Lhost::Yandex',
73
+ 'Sisimai::Lhost::Office365',
74
+ 'Sisimai::Lhost::ReceivingSES',
75
+ 'Sisimai::Lhost::AmazonWorkMail',
76
+ 'Sisimai::Lhost::Zoho',
77
+ 'Sisimai::Lhost::McAfee',
78
+ 'Sisimai::Lhost::Activehunter',
79
+ 'Sisimai::Lhost::SurfControl',
80
+ ].freeze
81
+
82
+ OrderJ1 = [
83
+ # These modules support JSON structure
84
+ 'Sisimai::Lhost::AmazonSES',
85
+ 'Sisimai::Lhost::SendGrid',
86
+ ].freeze
87
+
88
+ # This variable don't hold MTA name which have one or more MTA specific
89
+ # header such as X-AWS-Outgoing, X-Yandex-Uniq.
90
+ Pattern = {
91
+ 'subject' => {
92
+ 'delivery' => [
93
+ 'Sisimai::Lhost::Exim',
94
+ 'Sisimai::Lhost::Outlook',
95
+ 'Sisimai::Lhost::Courier',
96
+ 'Sisimai::Lhost::Domino',
97
+ 'Sisimai::Lhost::OpenSMTPD',
98
+ 'Sisimai::Lhost::EinsUndEins',
99
+ 'Sisimai::Lhost::InterScanMSS',
100
+ 'Sisimai::Lhost::MailFoundry',
101
+ 'Sisimai::Lhost::X4',
102
+ 'Sisimai::Lhost::X3',
103
+ 'Sisimai::Lhost::X2',
104
+ 'Sisimai::Lhost::Google',
105
+ ],
106
+ 'noti' => [
107
+ 'Sisimai::Lhost::Sendmail',
108
+ 'Sisimai::Lhost::Qmail',
109
+ 'Sisimai::Lhost::Outlook',
110
+ 'Sisimai::Lhost::Courier',
111
+ 'Sisimai::Lhost::MessagingServer',
112
+ 'Sisimai::Lhost::OpenSMTPD',
113
+ 'Sisimai::Lhost::X4',
114
+ 'Sisimai::Lhost::X3',
115
+ 'Sisimai::Lhost::MFILTER',
116
+ 'Sisimai::Lhost::Google',
117
+ ],
118
+ 'return' => [
119
+ 'Sisimai::Lhost::Postfix',
120
+ 'Sisimai::Lhost::Sendmail',
121
+ 'Sisimai::Lhost::SendGrid',
122
+ 'Sisimai::Lhost::Bigfoot',
123
+ 'Sisimai::Lhost::EinsUndEins',
124
+ 'Sisimai::Lhost::X1',
125
+ 'Sisimai::Lhost::Biglobe',
126
+ 'Sisimai::Lhost::V5sendmail',
127
+ ],
128
+ 'undeliver' => [
129
+ 'Sisimai::Lhost::Postfix',
130
+ 'Sisimai::Lhost::Office365',
131
+ 'Sisimai::Lhost::Exchange2007',
132
+ 'Sisimai::Lhost::Exchange2003',
133
+ 'Sisimai::Lhost::SendGrid',
134
+ 'Sisimai::Lhost::Notes',
135
+ 'Sisimai::Lhost::Verizon',
136
+ 'Sisimai::Lhost::Amavis',
137
+ 'Sisimai::Lhost::IMailServer',
138
+ 'Sisimai::Lhost::MailMarshalSMTP',
139
+ ],
140
+ 'failure' => [
141
+ 'Sisimai::Lhost::Qmail',
142
+ 'Sisimai::Lhost::Outlook',
143
+ 'Sisimai::Lhost::MailRu',
144
+ 'Sisimai::Lhost::Domino',
145
+ 'Sisimai::Lhost::X4',
146
+ 'Sisimai::Lhost::X2',
147
+ 'Sisimai::Lhost::MFILTER',
148
+ 'Sisimai::Lhost::Google',
149
+ ],
150
+ 'warning' => [
151
+ 'Sisimai::Lhost::Postfix',
152
+ 'Sisimai::Lhost::Sendmail',
153
+ 'Sisimai::Lhost::Exim',
154
+ ],
155
+ },
156
+ }.freeze
157
+ Skips = { 'return-path' => 1, 'x-mailer' => 1 }.freeze
158
+
159
+ # @abstract Check headers for detecting MTA module and returns the order
160
+ # of modules
161
+ # @param [Hash] heads Email header data
162
+ # @return [Array] Order of MTA modules
163
+ # @since v4.25.4
164
+ def make(heads = {})
165
+ return [] unless heads['subject']
166
+
167
+ # Try to match the value of "Subject" with patterns generated by
168
+ # Sisimai::Order->by('subject') method
169
+ order = []
170
+ title = heads['subject'].downcase
171
+ Subject.each_key do |e|
172
+ # Get MTA list from the subject header
173
+ next unless title.include?(e)
174
+ order = Subject[e]
175
+ break
176
+ end
177
+
178
+ return order
179
+ end
180
+
181
+ # @abstract Get regular expression patterns for specified field
182
+ # @param [String] group Group name for "ORDER BY"
183
+ # @return [Hash] Pattern table for the group
184
+ def by(group = '')
185
+ return {} if group.empty?
186
+ return Pattern[group] if Pattern.key?(group)
187
+ return {}
188
+ end
189
+ Subject = Sisimai::Order.by('subject').freeze
190
+
191
+ # @abstract Make default order of MTA modules to be loaded
192
+ # @return [Array] Default order list of MTA modules
193
+ def default
194
+ return Sisimai::Lhost.index.map { |e| 'Sisimai::Lhost::' << e }
195
+ end
196
+
197
+ # @abstract Make MTA module list as a spare
198
+ # @return [Array] Ordered module list
199
+ def another
200
+ rv = []
201
+ [OrderE1, OrderE2, OrderE3, OrderE4, OrderE5, OrderE9].each do |e|
202
+ rv += e
203
+ end
204
+ return rv
205
+ end
206
+
207
+ # @abstract Make email header list in each MTA module
208
+ # @return [Hash] Header list to be parsed
209
+ def headers
210
+ order = Sisimai::Lhost.heads.map { |e| 'Sisimai::Lhost::' << e }
211
+ table = {}
212
+
213
+ while e = order.shift do
214
+ # Load email headers from each MTA module
215
+ require e.gsub('::', '/').downcase
216
+
217
+ Module.const_get(e).headerlist.each do |v|
218
+ # Get header name which required each MTA module
219
+ next if Skips.key?(v)
220
+ table[v] ||= []
221
+ table[v] << e
222
+ end
223
+ end
224
+ return table
225
+ end
226
+
227
+ # @abstract Make default order of MTA(JSON) modules to be loaded
228
+ # @return [Array] Default order list of MTA(JSON) modules
229
+ # @until v4.25.5
230
+ def forjson; return OrderJ1; end
231
+
232
+ # @abstract Print warnings about an obsoleted method. This method will be
233
+ # removed at the future release of Sisimai
234
+ # @until v4.25.6
235
+ def warn(whois = '', useit = nil)
236
+ label = ' ***warning:'
237
+ methodname = caller[0][/`.*'/][1..-2]
238
+ messageset = sprintf("%s %s.%s is marked as obsoleted", label, whois, methodname)
239
+
240
+ useit ||= methodname
241
+ messageset << sprintf(" and will be removed at %s.", Sisimai::Lhost.removedat)
242
+ messageset << sprintf(" Use %s.%s instead.\n", self.name, useit) if useit != 'gone'
243
+ Kernel.warn messageset
244
+ end
11
245
 
12
246
  end
13
247
  end
@@ -7,197 +7,12 @@ module Sisimai
7
7
  module Email
8
8
  # Imported from p5-Sisimail/lib/Sisimai/Order/Email.pm
9
9
  class << self
10
- require 'sisimai/bite/email'
11
-
12
- EngineOrder1 = [
13
- # These modules have many subject patterns or have MIME encoded subjects
14
- # which is hard to code as regular expression
15
- 'Sisimai::Bite::Email::Exim',
16
- 'Sisimai::Bite::Email::Exchange2003',
17
- ].freeze
18
- EngineOrder2 = [
19
- # These modules have no MTA specific header and did not listed in the
20
- # following subject header based regular expressions.
21
- 'Sisimai::Bite::Email::Exchange2007',
22
- 'Sisimai::Bite::Email::Facebook',
23
- 'Sisimai::Bite::Email::KDDI',
24
- ].freeze
25
- EngineOrder3 = [
26
- # These modules have no MTA specific header but listed in the following
27
- # subject header based regular expressions.
28
- 'Sisimai::Bite::Email::Sendmail',
29
- 'Sisimai::Bite::Email::Postfix',
30
- 'Sisimai::Bite::Email::Qmail',
31
- 'Sisimai::Bite::Email::SendGrid',
32
- 'Sisimai::Bite::Email::Courier',
33
- 'Sisimai::Bite::Email::OpenSMTPD',
34
- 'Sisimai::Bite::Email::Notes',
35
- 'Sisimai::Bite::Email::MessagingServer',
36
- 'Sisimai::Bite::Email::Domino',
37
- 'Sisimai::Bite::Email::Bigfoot',
38
- 'Sisimai::Bite::Email::EinsUndEins',
39
- 'Sisimai::Bite::Email::MXLogic',
40
- 'Sisimai::Bite::Email::Amavis',
41
- 'Sisimai::Bite::Email::IMailServer',
42
- 'Sisimai::Bite::Email::X4',
43
- ].freeze
44
- EngineOrder4 = [
45
- # These modules have no MTA specific headers and there are few samples or
46
- # too old MTA
47
- 'Sisimai::Bite::Email::Verizon',
48
- 'Sisimai::Bite::Email::InterScanMSS',
49
- 'Sisimai::Bite::Email::MailFoundry',
50
- 'Sisimai::Bite::Email::ApacheJames',
51
- 'Sisimai::Bite::Email::Biglobe',
52
- 'Sisimai::Bite::Email::EZweb',
53
- 'Sisimai::Bite::Email::X5',
54
- 'Sisimai::Bite::Email::X3',
55
- 'Sisimai::Bite::Email::X2',
56
- 'Sisimai::Bite::Email::X1',
57
- 'Sisimai::Bite::Email::V5sendmail',
58
- ].freeze
59
- EngineOrder5 = [
60
- # These modules have one or more MTA specific headers but other headers
61
- # also required for detecting MTA name
62
- 'Sisimai::Bite::Email::Outlook',
63
- 'Sisimai::Bite::Email::MailRu',
64
- 'Sisimai::Bite::Email::MessageLabs',
65
- 'Sisimai::Bite::Email::MailMarshalSMTP',
66
- 'Sisimai::Bite::Email::MFILTER',
67
- 'Sisimai::Bite::Email::Google',
68
- ].freeze
69
- EngineOrder9 = [
70
- # These modules have one or more MTA specific headers
71
- 'Sisimai::Bite::Email::Aol',
72
- 'Sisimai::Bite::Email::Yahoo',
73
- 'Sisimai::Bite::Email::AmazonSES',
74
- 'Sisimai::Bite::Email::GMX',
75
- 'Sisimai::Bite::Email::Yandex',
76
- 'Sisimai::Bite::Email::Office365',
77
- 'Sisimai::Bite::Email::ReceivingSES',
78
- 'Sisimai::Bite::Email::AmazonWorkMail',
79
- 'Sisimai::Bite::Email::Zoho',
80
- 'Sisimai::Bite::Email::McAfee',
81
- 'Sisimai::Bite::Email::Activehunter',
82
- 'Sisimai::Bite::Email::SurfControl',
83
- ].freeze
84
-
85
- # This variable don't hold MTA name which have one or more MTA specific
86
- # header such as X-AWS-Outgoing, X-Yandex-Uniq.
87
- PatternTable = {
88
- 'subject' => {
89
- 'delivery' => [
90
- 'Sisimai::Bite::Email::Exim',
91
- 'Sisimai::Bite::Email::Outlook',
92
- 'Sisimai::Bite::Email::Courier',
93
- 'Sisimai::Bite::Email::Domino',
94
- 'Sisimai::Bite::Email::OpenSMTPD',
95
- 'Sisimai::Bite::Email::EinsUndEins',
96
- 'Sisimai::Bite::Email::InterScanMSS',
97
- 'Sisimai::Bite::Email::MailFoundry',
98
- 'Sisimai::Bite::Email::X4',
99
- 'Sisimai::Bite::Email::X3',
100
- 'Sisimai::Bite::Email::X2',
101
- 'Sisimai::Bite::Email::Google',
102
- ],
103
- 'noti' => [
104
- 'Sisimai::Bite::Email::Sendmail',
105
- 'Sisimai::Bite::Email::Qmail',
106
- 'Sisimai::Bite::Email::Outlook',
107
- 'Sisimai::Bite::Email::Courier',
108
- 'Sisimai::Bite::Email::MessagingServer',
109
- 'Sisimai::Bite::Email::OpenSMTPD',
110
- 'Sisimai::Bite::Email::X4',
111
- 'Sisimai::Bite::Email::X3',
112
- 'Sisimai::Bite::Email::MFILTER',
113
- 'Sisimai::Bite::Email::Google',
114
- ],
115
- 'return' => [
116
- 'Sisimai::Bite::Email::Postfix',
117
- 'Sisimai::Bite::Email::Sendmail',
118
- 'Sisimai::Bite::Email::SendGrid',
119
- 'Sisimai::Bite::Email::Bigfoot',
120
- 'Sisimai::Bite::Email::EinsUndEins',
121
- 'Sisimai::Bite::Email::X1',
122
- 'Sisimai::Bite::Email::Biglobe',
123
- 'Sisimai::Bite::Email::V5sendmail',
124
- ],
125
- 'undeliver' => [
126
- 'Sisimai::Bite::Email::Postfix',
127
- 'Sisimai::Bite::Email::Office365',
128
- 'Sisimai::Bite::Email::Exchange2007',
129
- 'Sisimai::Bite::Email::Exchange2003',
130
- 'Sisimai::Bite::Email::SendGrid',
131
- 'Sisimai::Bite::Email::Notes',
132
- 'Sisimai::Bite::Email::Verizon',
133
- 'Sisimai::Bite::Email::Amavis',
134
- 'Sisimai::Bite::Email::IMailServer',
135
- 'Sisimai::Bite::Email::MailMarshalSMTP',
136
- ],
137
- 'failure' => [
138
- 'Sisimai::Bite::Email::Qmail',
139
- 'Sisimai::Bite::Email::Outlook',
140
- 'Sisimai::Bite::Email::MailRu',
141
- 'Sisimai::Bite::Email::Domino',
142
- 'Sisimai::Bite::Email::X4',
143
- 'Sisimai::Bite::Email::X2',
144
- 'Sisimai::Bite::Email::MFILTER',
145
- 'Sisimai::Bite::Email::Google',
146
- ],
147
- 'warning' => [
148
- 'Sisimai::Bite::Email::Postfix',
149
- 'Sisimai::Bite::Email::Sendmail',
150
- 'Sisimai::Bite::Email::Exim',
151
- ],
152
- },
153
- }.freeze
154
- Skips = { 'return-path' => 1, 'x-mailer' => 1 }.freeze
155
-
156
- # @abstract Make default order of MTA modules to be loaded
157
- # @return [Array] Default order list of MTA modules
158
- def default
159
- return Sisimai::Bite::Email.index.map { |e| 'Sisimai::Bite::Email::' << e }
160
- end
161
-
162
- # @abstract Get regular expression patterns for specified field
163
- # @param [String] group Group name for "ORDER BY"
164
- # @return [Hash] Pattern table for the group
165
- def by(group = '')
166
- return {} if group.empty?
167
- return PatternTable[group] if PatternTable.key?(group)
168
- return {}
169
- end
170
-
171
- # @abstract Make MTA module list as a spare
172
- # @return [Array] Ordered module list
173
- def another
174
- rv = []
175
- [EngineOrder1, EngineOrder2, EngineOrder3, EngineOrder4, EngineOrder5, EngineOrder9].each do |e|
176
- rv += e
177
- end
178
- return rv
179
- end
180
-
181
- # @abstract Make email header list in each MTA module
182
- # @return [Hash] Header list to be parsed
183
- def headers
184
- order = Sisimai::Bite::Email.heads.map { |e| 'Sisimai::Bite::Email::' << e }
185
- table = {}
186
-
187
- while e = order.shift do
188
- # Load email headers from each MTA module
189
- require e.gsub('::', '/').downcase
190
-
191
- Module.const_get(e).headerlist.each do |v|
192
- # Get header name which required each MTA module
193
- next if Skips.key?(v)
194
- table[v] ||= []
195
- table[v] << e
196
- end
197
- end
198
- return table
199
- end
10
+ require 'sisimai/order'
200
11
 
12
+ def by(group); Sisimai::Order.warn; return Sisimai::Order.by(group); end
13
+ def default; Sisimai::Order.warn; return Sisimai::Order.default; end
14
+ def another; Sisimai::Order.warn; return Sisimai::Order.another; end
15
+ def headers; Sisimai::Order.warn; return Sisimai::Order.headers; end
201
16
  end
202
17
  end
203
18
  end