email_address 0.2.3 → 0.2.4
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/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
|