email_address 0.2.3 → 0.2.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +3 -1
- data/email_address.gemspec +1 -1
- data/lib/email_address/config.rb +2 -1
- data/lib/email_address/host.rb +14 -7
- data/lib/email_address/version.rb +1 -1
- data/test/email_address/test_host.rb +4 -0
- metadata +17 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dc99a156cbc12320e084571723e8633c5c1f8a3e92a9e47258d9521c0f27fcc6
|
4
|
+
data.tar.gz: '05302795638cad6027f50b778253484f390ef2cd697c665150d1e5a2d214172d'
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 58c0ec4c8260854d9f7bacaf6c7891e661c9953f57c678d9bd03ab7e14e69b5a48902ca651ec29105a1fd13b08942187473340dace11cf81533af5ef1093dadc
|
7
|
+
data.tar.gz: 4d6ff21b55ed86a0d04ca8011d85a4f0c0f69637c80e9d2b6dc393717051fb15e703630bd531531c5453b3e8c0e301e34917fa48b3be1123f1c6ff3cd105e957
|
data/README.md
CHANGED
@@ -552,7 +552,9 @@ For the mailbox (AKA account, role), without the tag
|
|
552
552
|
:mx Ensure host is configured with DNS MX records
|
553
553
|
:a Ensure host is known to DNS (A Record)
|
554
554
|
:syntax Validate by syntax only, no Network verification
|
555
|
-
:connect Attempt host connection (Dangerous: Do not use)
|
555
|
+
:connect Attempt host connection (Experimental and Dangerous: Do not use)
|
556
|
+
The :host_timeout setting is the maximum number
|
557
|
+
of seconds to wait during the :connect validation
|
556
558
|
|
557
559
|
* host_size: 1..253,
|
558
560
|
A range specifying the size limit of the host part,
|
data/email_address.gemspec
CHANGED
@@ -29,7 +29,7 @@ Gem::Specification.new do |spec|
|
|
29
29
|
spec.add_development_dependency "sqlite3"
|
30
30
|
spec.add_development_dependency "standard", "~> 1.5.0"
|
31
31
|
end
|
32
|
-
|
32
|
+
spec.add_development_dependency "net-smtp"
|
33
33
|
spec.add_development_dependency "simplecov"
|
34
34
|
spec.add_development_dependency "pry"
|
35
35
|
|
data/lib/email_address/config.rb
CHANGED
@@ -137,6 +137,7 @@ module EmailAddress
|
|
137
137
|
host_local: false,
|
138
138
|
host_fqdn: true,
|
139
139
|
host_auto_append: true,
|
140
|
+
host_timeout: 3,
|
140
141
|
|
141
142
|
address_validation: :parts, # :parts, :smtp, Proc
|
142
143
|
address_size: 3..254,
|
@@ -151,7 +152,7 @@ module EmailAddress
|
|
151
152
|
google: {
|
152
153
|
host_match: %w[gmail.com googlemail.com],
|
153
154
|
exchanger_match: %w[google.com googlemail.com],
|
154
|
-
local_size:
|
155
|
+
local_size: 3..64,
|
155
156
|
local_private_size: 1..64, # When hostname not in host_match (private label)
|
156
157
|
mailbox_canonical: ->(m) { m.delete(".") }
|
157
158
|
},
|
data/lib/email_address/host.rb
CHANGED
@@ -383,6 +383,9 @@ module EmailAddress
|
|
383
383
|
host_validation = rules[:host_validation] || @config[:host_validation] || :mx
|
384
384
|
dns_lookup = rules[:dns_lookup] || host_validation
|
385
385
|
self.error_message = nil
|
386
|
+
if host_name && !host_name.empty? && !@config[:host_size].include?(host_name.size)
|
387
|
+
return set_error(:invalid_host)
|
388
|
+
end
|
386
389
|
if ip_address
|
387
390
|
valid_ip?
|
388
391
|
elsif !valid_format?
|
@@ -462,11 +465,15 @@ module EmailAddress
|
|
462
465
|
# as an email address check, but is provided to assist in problem resolution.
|
463
466
|
# If you abuse this, you *could* be blocked by the ESP.
|
464
467
|
#
|
465
|
-
#
|
466
|
-
#
|
467
|
-
#
|
468
|
-
|
468
|
+
# timeout is the number of seconds to wait before timing out the request and
|
469
|
+
# returns false as the connection was unsuccessful.
|
470
|
+
#
|
471
|
+
# > NOTE: As of Ruby 3.1, Net::SMTP was moved from the standard library to the
|
472
|
+
# > 'net-smtp' gem. In order to avoid adding that dependency for this *experimental*
|
473
|
+
# > feature, please add the gem to your Gemfile and require it to use this feature.
|
474
|
+
def connect(timeout = nil)
|
469
475
|
smtp = Net::SMTP.new(host_name || ip_address)
|
476
|
+
smtp.open_timeout = timeout || @config[:host_timeout]
|
470
477
|
smtp.start(@config[:helo_name] || "localhost")
|
471
478
|
smtp.finish
|
472
479
|
true
|
@@ -474,10 +481,10 @@ module EmailAddress
|
|
474
481
|
set_error(:server_not_available, e.to_s)
|
475
482
|
rescue SocketError => e
|
476
483
|
set_error(:server_not_available, e.to_s)
|
484
|
+
rescue Net::OpenTimeout => e
|
485
|
+
set_error(:server_not_available, e.to_s)
|
477
486
|
ensure
|
478
|
-
if smtp&.started?
|
479
|
-
smtp.finish
|
480
|
-
end
|
487
|
+
smtp.finish if smtp&.started?
|
481
488
|
end
|
482
489
|
|
483
490
|
def set_error(err, reason = nil)
|
@@ -150,4 +150,8 @@ class TestHost < MiniTest::Test
|
|
150
150
|
assert_equal EmailAddress::Host.new("[127.0.0.666]", host_allow_ip: true).error, "This is not a valid IPv4 address"
|
151
151
|
assert_equal EmailAddress::Host.new("[IPv6::12t]", host_allow_ip: true).error, "This is not a valid IPv6 address"
|
152
152
|
end
|
153
|
+
|
154
|
+
def test_host_size
|
155
|
+
assert !EmailAddress::Host.new("stackoverflow.com", {host_size: 1..3}).valid?
|
156
|
+
end
|
153
157
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: email_address
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Allen Fair
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-06-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -94,6 +94,20 @@ dependencies:
|
|
94
94
|
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: 1.5.0
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: net-smtp
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
97
111
|
- !ruby/object:Gem::Dependency
|
98
112
|
name: simplecov
|
99
113
|
requirement: !ruby/object:Gem::Requirement
|
@@ -195,7 +209,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
195
209
|
- !ruby/object:Gem::Version
|
196
210
|
version: '0'
|
197
211
|
requirements: []
|
198
|
-
rubygems_version: 3.3.
|
212
|
+
rubygems_version: 3.3.7
|
199
213
|
signing_key:
|
200
214
|
specification_version: 4
|
201
215
|
summary: This gem provides a ruby language library for working with and validating
|