truemail 2.2.1 → 2.3.2
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/.codeclimate.yml +1 -1
- data/.reek.yml +8 -0
- data/.rubocop.yml +48 -0
- data/CHANGELOG.md +67 -0
- data/Gemfile.lock +56 -43
- data/LICENSE.txt +1 -1
- data/README.md +49 -20
- data/bin/console +3 -10
- data/lib/truemail.rb +1 -1
- data/lib/truemail/audit/base.rb +0 -1
- data/lib/truemail/audit/dns.rb +1 -1
- data/lib/truemail/audit/ip.rb +1 -1
- data/lib/truemail/audit/ptr.rb +4 -3
- data/lib/truemail/auditor.rb +1 -1
- data/lib/truemail/configuration.rb +38 -30
- data/lib/truemail/core.rb +11 -15
- data/lib/truemail/dns/punycode_representer.rb +16 -0
- data/lib/truemail/dns/resolver.rb +17 -0
- data/lib/truemail/dns/worker.rb +52 -0
- data/lib/truemail/log/serializer/auditor_json.rb +1 -1
- data/lib/truemail/log/serializer/base.rb +2 -1
- data/lib/truemail/log/serializer/validator_base.rb +1 -1
- data/lib/truemail/log/serializer/validator_text.rb +2 -2
- data/lib/truemail/logger.rb +1 -1
- data/lib/truemail/validate/mx.rb +7 -9
- data/lib/truemail/validate/smtp/request.rb +11 -7
- data/lib/truemail/validate/smtp/response.rb +1 -1
- data/lib/truemail/validator.rb +2 -2
- data/lib/truemail/version.rb +1 -1
- data/lib/truemail/wrapper.rb +3 -3
- data/truemail.gemspec +11 -9
- metadata +59 -40
@@ -13,20 +13,24 @@ module Truemail
|
|
13
13
|
|
14
14
|
attr_reader :configuration, :host, :email, :response
|
15
15
|
|
16
|
-
def initialize(configuration:, host:, email:, attempts: nil)
|
16
|
+
def initialize(configuration:, host:, email:, attempts: nil, port_open_status: proc { true })
|
17
17
|
@configuration = Truemail::Validate::Smtp::Request::Configuration.new(configuration)
|
18
18
|
@response = Truemail::Validate::Smtp::Response.new
|
19
19
|
@host = host
|
20
20
|
@email = email
|
21
21
|
@attempts = attempts
|
22
|
+
@port_open_status = port_open_status
|
22
23
|
end
|
23
24
|
|
24
25
|
def check_port
|
25
|
-
|
26
|
-
|
27
|
-
|
26
|
+
response.port_opened = ::Socket.tcp(
|
27
|
+
host,
|
28
|
+
Truemail::Validate::Smtp::Request::SMTP_PORT,
|
29
|
+
connect_timeout: configuration.connection_timeout,
|
30
|
+
&port_open_status
|
31
|
+
)
|
28
32
|
rescue => error
|
29
|
-
retry if attempts_exist? && error.is_a?(
|
33
|
+
retry if attempts_exist? && error.is_a?(::Errno::ETIMEDOUT)
|
30
34
|
response.port_opened = false
|
31
35
|
end
|
32
36
|
|
@@ -53,7 +57,7 @@ module Truemail
|
|
53
57
|
end
|
54
58
|
end
|
55
59
|
|
56
|
-
attr_reader :attempts
|
60
|
+
attr_reader :attempts, :port_open_status
|
57
61
|
|
58
62
|
def attempts_exist?
|
59
63
|
return false unless attempts
|
@@ -61,7 +65,7 @@ module Truemail
|
|
61
65
|
end
|
62
66
|
|
63
67
|
def session
|
64
|
-
Net::SMTP.new(host, Truemail::Validate::Smtp::Request::SMTP_PORT).tap do |settings|
|
68
|
+
::Net::SMTP.new(host, Truemail::Validate::Smtp::Request::SMTP_PORT).tap do |settings|
|
65
69
|
settings.open_timeout = configuration.connection_timeout
|
66
70
|
settings.read_timeout = configuration.response_timeout
|
67
71
|
end
|
@@ -5,7 +5,7 @@ module Truemail
|
|
5
5
|
class Smtp
|
6
6
|
RESPONSE_ATTRS = %i[port_opened connection helo mailfrom rcptto errors].freeze
|
7
7
|
|
8
|
-
Response = Struct.new(*RESPONSE_ATTRS, keyword_init: true) do
|
8
|
+
Response = ::Struct.new(*RESPONSE_ATTRS, keyword_init: true) do
|
9
9
|
def initialize(errors: {}, **args)
|
10
10
|
super
|
11
11
|
end
|
data/lib/truemail/validator.rb
CHANGED
@@ -5,13 +5,13 @@ module Truemail
|
|
5
5
|
RESULT_ATTRS = %i[success email domain mail_servers errors smtp_debug configuration].freeze
|
6
6
|
VALIDATION_TYPES = %i[regex mx smtp].freeze
|
7
7
|
|
8
|
-
Result = Struct.new(*RESULT_ATTRS, keyword_init: true) do
|
8
|
+
Result = ::Struct.new(*RESULT_ATTRS, keyword_init: true) do
|
9
9
|
def initialize(mail_servers: [], errors: {}, **args)
|
10
10
|
super
|
11
11
|
end
|
12
12
|
|
13
13
|
def punycode_email
|
14
|
-
@punycode_email ||= Truemail::PunycodeRepresenter.call(email)
|
14
|
+
@punycode_email ||= Truemail::Dns::PunycodeRepresenter.call(email)
|
15
15
|
end
|
16
16
|
alias_method :valid?, :success
|
17
17
|
end
|
data/lib/truemail/version.rb
CHANGED
data/lib/truemail/wrapper.rb
CHANGED
@@ -15,10 +15,10 @@ module Truemail
|
|
15
15
|
end
|
16
16
|
|
17
17
|
def call(&block)
|
18
|
-
Timeout.timeout(timeout, &block)
|
19
|
-
rescue Resolv::ResolvError, IPAddr::InvalidAddressError
|
18
|
+
::Timeout.timeout(timeout, &block)
|
19
|
+
rescue ::Resolv::ResolvError, ::IPAddr::InvalidAddressError
|
20
20
|
false
|
21
|
-
rescue Timeout::Error
|
21
|
+
rescue ::Timeout::Error
|
22
22
|
retry unless (self.attempts -= 1).zero?
|
23
23
|
false
|
24
24
|
end
|
data/truemail.gemspec
CHANGED
@@ -31,21 +31,23 @@ Gem::Specification.new do |spec|
|
|
31
31
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
32
32
|
spec.require_paths = ['lib']
|
33
33
|
|
34
|
-
spec.add_runtime_dependency 'simpleidn', '~> 0.
|
34
|
+
spec.add_runtime_dependency 'simpleidn', '~> 0.2.1'
|
35
35
|
|
36
36
|
spec.add_development_dependency 'bundler', '~> 1.16'
|
37
37
|
spec.add_development_dependency 'bundler-audit', '~> 0.7.0.1'
|
38
|
-
spec.add_development_dependency '
|
39
|
-
spec.add_development_dependency '
|
38
|
+
spec.add_development_dependency 'dns_mock', '~> 1.2'
|
39
|
+
spec.add_development_dependency 'faker', '~> 2.16'
|
40
|
+
spec.add_development_dependency 'fasterer', '~> 0.9.0'
|
40
41
|
spec.add_development_dependency 'json_matchers', '~> 0.11.1'
|
41
42
|
spec.add_development_dependency 'overcommit', '~> 0.57.0'
|
42
43
|
spec.add_development_dependency 'pry-byebug', '~> 3.9'
|
43
|
-
spec.add_development_dependency 'rake', '~> 13.0', '>= 13.0.
|
44
|
-
spec.add_development_dependency 'reek', '~> 6.0', '>= 6.0.
|
44
|
+
spec.add_development_dependency 'rake', '~> 13.0', '>= 13.0.3'
|
45
|
+
spec.add_development_dependency 'reek', '~> 6.0', '>= 6.0.3'
|
45
46
|
spec.add_development_dependency 'rspec', '~> 3.10'
|
46
|
-
spec.add_development_dependency 'rubocop', '~> 1.
|
47
|
-
spec.add_development_dependency 'rubocop-performance', '~> 1.
|
48
|
-
spec.add_development_dependency 'rubocop-rspec', '~> 2.
|
47
|
+
spec.add_development_dependency 'rubocop', '~> 1.11'
|
48
|
+
spec.add_development_dependency 'rubocop-performance', '~> 1.10', '>= 1.10.1'
|
49
|
+
spec.add_development_dependency 'rubocop-rspec', '~> 2.2'
|
49
50
|
spec.add_development_dependency 'simplecov', '~> 0.17.1'
|
50
|
-
spec.add_development_dependency 'truemail-rspec', '~> 0.
|
51
|
+
spec.add_development_dependency 'truemail-rspec', '~> 0.4'
|
52
|
+
spec.add_development_dependency 'webmock', '~> 3.12', '>= 3.12.1'
|
51
53
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: truemail
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.2
|
4
|
+
version: 2.3.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Vladislav Trotsenko
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-03-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: simpleidn
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 0.
|
19
|
+
version: 0.2.1
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 0.
|
26
|
+
version: 0.2.1
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: bundler
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -53,39 +53,47 @@ dependencies:
|
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: 0.7.0.1
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
56
|
+
name: dns_mock
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '2
|
62
|
-
- - ">="
|
63
|
-
- !ruby/object:Gem::Version
|
64
|
-
version: 2.15.1
|
61
|
+
version: '1.2'
|
65
62
|
type: :development
|
66
63
|
prerelease: false
|
67
64
|
version_requirements: !ruby/object:Gem::Requirement
|
68
65
|
requirements:
|
69
66
|
- - "~>"
|
70
67
|
- !ruby/object:Gem::Version
|
71
|
-
version: '2
|
72
|
-
|
68
|
+
version: '1.2'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: faker
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
73
74
|
- !ruby/object:Gem::Version
|
74
|
-
version: 2.
|
75
|
+
version: '2.16'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '2.16'
|
75
83
|
- !ruby/object:Gem::Dependency
|
76
84
|
name: fasterer
|
77
85
|
requirement: !ruby/object:Gem::Requirement
|
78
86
|
requirements:
|
79
87
|
- - "~>"
|
80
88
|
- !ruby/object:Gem::Version
|
81
|
-
version: 0.
|
89
|
+
version: 0.9.0
|
82
90
|
type: :development
|
83
91
|
prerelease: false
|
84
92
|
version_requirements: !ruby/object:Gem::Requirement
|
85
93
|
requirements:
|
86
94
|
- - "~>"
|
87
95
|
- !ruby/object:Gem::Version
|
88
|
-
version: 0.
|
96
|
+
version: 0.9.0
|
89
97
|
- !ruby/object:Gem::Dependency
|
90
98
|
name: json_matchers
|
91
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -137,7 +145,7 @@ dependencies:
|
|
137
145
|
version: '13.0'
|
138
146
|
- - ">="
|
139
147
|
- !ruby/object:Gem::Version
|
140
|
-
version: 13.0.
|
148
|
+
version: 13.0.3
|
141
149
|
type: :development
|
142
150
|
prerelease: false
|
143
151
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -147,7 +155,7 @@ dependencies:
|
|
147
155
|
version: '13.0'
|
148
156
|
- - ">="
|
149
157
|
- !ruby/object:Gem::Version
|
150
|
-
version: 13.0.
|
158
|
+
version: 13.0.3
|
151
159
|
- !ruby/object:Gem::Dependency
|
152
160
|
name: reek
|
153
161
|
requirement: !ruby/object:Gem::Requirement
|
@@ -157,7 +165,7 @@ dependencies:
|
|
157
165
|
version: '6.0'
|
158
166
|
- - ">="
|
159
167
|
- !ruby/object:Gem::Version
|
160
|
-
version: 6.0.
|
168
|
+
version: 6.0.3
|
161
169
|
type: :development
|
162
170
|
prerelease: false
|
163
171
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -167,7 +175,7 @@ dependencies:
|
|
167
175
|
version: '6.0'
|
168
176
|
- - ">="
|
169
177
|
- !ruby/object:Gem::Version
|
170
|
-
version: 6.0.
|
178
|
+
version: 6.0.3
|
171
179
|
- !ruby/object:Gem::Dependency
|
172
180
|
name: rspec
|
173
181
|
requirement: !ruby/object:Gem::Requirement
|
@@ -188,60 +196,48 @@ dependencies:
|
|
188
196
|
requirements:
|
189
197
|
- - "~>"
|
190
198
|
- !ruby/object:Gem::Version
|
191
|
-
version: '1.
|
192
|
-
- - ">="
|
193
|
-
- !ruby/object:Gem::Version
|
194
|
-
version: 1.5.2
|
199
|
+
version: '1.11'
|
195
200
|
type: :development
|
196
201
|
prerelease: false
|
197
202
|
version_requirements: !ruby/object:Gem::Requirement
|
198
203
|
requirements:
|
199
204
|
- - "~>"
|
200
205
|
- !ruby/object:Gem::Version
|
201
|
-
version: '1.
|
202
|
-
- - ">="
|
203
|
-
- !ruby/object:Gem::Version
|
204
|
-
version: 1.5.2
|
206
|
+
version: '1.11'
|
205
207
|
- !ruby/object:Gem::Dependency
|
206
208
|
name: rubocop-performance
|
207
209
|
requirement: !ruby/object:Gem::Requirement
|
208
210
|
requirements:
|
209
211
|
- - "~>"
|
210
212
|
- !ruby/object:Gem::Version
|
211
|
-
version: '1.
|
213
|
+
version: '1.10'
|
212
214
|
- - ">="
|
213
215
|
- !ruby/object:Gem::Version
|
214
|
-
version: 1.
|
216
|
+
version: 1.10.1
|
215
217
|
type: :development
|
216
218
|
prerelease: false
|
217
219
|
version_requirements: !ruby/object:Gem::Requirement
|
218
220
|
requirements:
|
219
221
|
- - "~>"
|
220
222
|
- !ruby/object:Gem::Version
|
221
|
-
version: '1.
|
223
|
+
version: '1.10'
|
222
224
|
- - ">="
|
223
225
|
- !ruby/object:Gem::Version
|
224
|
-
version: 1.
|
226
|
+
version: 1.10.1
|
225
227
|
- !ruby/object:Gem::Dependency
|
226
228
|
name: rubocop-rspec
|
227
229
|
requirement: !ruby/object:Gem::Requirement
|
228
230
|
requirements:
|
229
231
|
- - "~>"
|
230
232
|
- !ruby/object:Gem::Version
|
231
|
-
version: '2.
|
232
|
-
- - ">="
|
233
|
-
- !ruby/object:Gem::Version
|
234
|
-
version: 2.0.1
|
233
|
+
version: '2.2'
|
235
234
|
type: :development
|
236
235
|
prerelease: false
|
237
236
|
version_requirements: !ruby/object:Gem::Requirement
|
238
237
|
requirements:
|
239
238
|
- - "~>"
|
240
239
|
- !ruby/object:Gem::Version
|
241
|
-
version: '2.
|
242
|
-
- - ">="
|
243
|
-
- !ruby/object:Gem::Version
|
244
|
-
version: 2.0.1
|
240
|
+
version: '2.2'
|
245
241
|
- !ruby/object:Gem::Dependency
|
246
242
|
name: simplecov
|
247
243
|
requirement: !ruby/object:Gem::Requirement
|
@@ -262,14 +258,34 @@ dependencies:
|
|
262
258
|
requirements:
|
263
259
|
- - "~>"
|
264
260
|
- !ruby/object:Gem::Version
|
265
|
-
version: 0.
|
261
|
+
version: '0.4'
|
266
262
|
type: :development
|
267
263
|
prerelease: false
|
268
264
|
version_requirements: !ruby/object:Gem::Requirement
|
269
265
|
requirements:
|
270
266
|
- - "~>"
|
271
267
|
- !ruby/object:Gem::Version
|
272
|
-
version: 0.
|
268
|
+
version: '0.4'
|
269
|
+
- !ruby/object:Gem::Dependency
|
270
|
+
name: webmock
|
271
|
+
requirement: !ruby/object:Gem::Requirement
|
272
|
+
requirements:
|
273
|
+
- - "~>"
|
274
|
+
- !ruby/object:Gem::Version
|
275
|
+
version: '3.12'
|
276
|
+
- - ">="
|
277
|
+
- !ruby/object:Gem::Version
|
278
|
+
version: 3.12.1
|
279
|
+
type: :development
|
280
|
+
prerelease: false
|
281
|
+
version_requirements: !ruby/object:Gem::Requirement
|
282
|
+
requirements:
|
283
|
+
- - "~>"
|
284
|
+
- !ruby/object:Gem::Version
|
285
|
+
version: '3.12'
|
286
|
+
- - ">="
|
287
|
+
- !ruby/object:Gem::Version
|
288
|
+
version: 3.12.1
|
273
289
|
description: Configurable framework agnostic plain Ruby email validator. Verify email
|
274
290
|
via Regex, DNS and SMTP.
|
275
291
|
email:
|
@@ -311,6 +327,9 @@ files:
|
|
311
327
|
- lib/truemail/auditor.rb
|
312
328
|
- lib/truemail/configuration.rb
|
313
329
|
- lib/truemail/core.rb
|
330
|
+
- lib/truemail/dns/punycode_representer.rb
|
331
|
+
- lib/truemail/dns/resolver.rb
|
332
|
+
- lib/truemail/dns/worker.rb
|
314
333
|
- lib/truemail/executor.rb
|
315
334
|
- lib/truemail/log/event.rb
|
316
335
|
- lib/truemail/log/serializer/auditor_json.rb
|