deliverable 0.2.0 → 0.2.1
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/CHANGELOG.md +9 -0
- data/lib/deliverable/verifier.rb +14 -14
- data/lib/deliverable/version.rb +1 -1
- metadata +3 -6
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: e68d3c1f29cb9fac64f7185d0b4026f6d8f9bcf5a6e55d9e7d89b3b3ab126ae4
|
|
4
|
+
data.tar.gz: e6ca8b392fef7e5289586a2c774684e31b4330b23b2c20dea30571ed256331b5
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 72cc381a74af672304ae18c4d5523dd85ed5174e33638a4958f709da2cbe9f5fd3dc34defa2ce02842a59c11e3c3862e8ddaeb15dba4f587d5bd0911a2337b3c
|
|
7
|
+
data.tar.gz: d710009b9129b3dfc8014bebc374edf586ea3c3ce0aa0ae1390fa14f8fb274022bbeac79f6e14cd4d660dd139649918ee1eab93c7749add82c204361182a1eab
|
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.2.1
|
|
4
|
+
|
|
5
|
+
- Fix: the catch-all probe was overwriting `smtp_response` and
|
|
6
|
+
`retryable` on the Result. A verification that returned a clean 250
|
|
7
|
+
for the real address could surface a 550 from the fake address used
|
|
8
|
+
to detect accept-all servers, making it look like the verifier had
|
|
9
|
+
ignored a hard bounce. The catch-all probe now runs silently and
|
|
10
|
+
only the real address's SMTP response is reported.
|
|
11
|
+
|
|
3
12
|
## 0.2.0
|
|
4
13
|
|
|
5
14
|
- Add `smtp_response` to the result: the SMTP code and message returned by
|
data/lib/deliverable/verifier.rb
CHANGED
|
@@ -222,7 +222,7 @@ module Deliverable
|
|
|
222
222
|
problematic_server?(mail_server) ? :assumed : (last || :assumed)
|
|
223
223
|
end
|
|
224
224
|
|
|
225
|
-
def attempt_rcpt(mail_server, port, recipient)
|
|
225
|
+
def attempt_rcpt(mail_server, port, recipient, record: true)
|
|
226
226
|
Timeout.timeout(@timeout) do
|
|
227
227
|
smtp = Net::SMTP.new(mail_server, port)
|
|
228
228
|
smtp.enable_starttls_auto if port == 587 || port == 465
|
|
@@ -231,47 +231,47 @@ module Deliverable
|
|
|
231
231
|
conn.mailfrom(@sender_email)
|
|
232
232
|
begin
|
|
233
233
|
response = conn.rcptto(recipient)
|
|
234
|
-
record_response(response.status, response.message) if response.respond_to?(:status)
|
|
234
|
+
record_response(response.status, response.message) if record && response.respond_to?(:status)
|
|
235
235
|
return :verified
|
|
236
236
|
rescue Net::SMTPFatalError => e
|
|
237
|
-
record_error(e)
|
|
238
|
-
classify_fatal(e.message)
|
|
237
|
+
record_error(e) if record
|
|
238
|
+
classify_fatal(e.message, record: record)
|
|
239
239
|
rescue Net::SMTPServerBusy => e
|
|
240
|
-
record_error(e, retryable: true)
|
|
240
|
+
record_error(e, retryable: true) if record
|
|
241
241
|
return :assumed
|
|
242
242
|
rescue Net::SMTPSyntaxError, Net::SMTPAuthenticationError => e
|
|
243
|
-
record_error(e)
|
|
243
|
+
record_error(e) if record
|
|
244
244
|
return :assumed
|
|
245
245
|
end
|
|
246
246
|
end
|
|
247
247
|
end
|
|
248
248
|
rescue Timeout::Error => e
|
|
249
|
-
record_transient(e.message)
|
|
249
|
+
record_transient(e.message) if record
|
|
250
250
|
:connection_failed
|
|
251
251
|
rescue Errno::ECONNREFUSED, Errno::EHOSTUNREACH, Errno::ENETUNREACH => e
|
|
252
|
-
record_transient(e.message)
|
|
252
|
+
record_transient(e.message) if record
|
|
253
253
|
:connection_failed
|
|
254
254
|
rescue Net::SMTPAuthenticationError => e
|
|
255
|
-
record_error(e)
|
|
255
|
+
record_error(e) if record
|
|
256
256
|
:assumed
|
|
257
257
|
rescue Net::SMTPServerBusy => e
|
|
258
|
-
record_error(e, retryable: true)
|
|
258
|
+
record_error(e, retryable: true) if record
|
|
259
259
|
:assumed
|
|
260
260
|
rescue StandardError => e
|
|
261
261
|
log "SMTP probe failed for #{recipient} on #{mail_server}:#{port}: #{e.message}"
|
|
262
262
|
:connection_failed
|
|
263
263
|
end
|
|
264
264
|
|
|
265
|
-
def classify_fatal(message)
|
|
265
|
+
def classify_fatal(message, record: true)
|
|
266
266
|
code = extract_code(message)
|
|
267
267
|
case code&.[](0)
|
|
268
268
|
when "5"
|
|
269
269
|
:invalid
|
|
270
270
|
when "4"
|
|
271
|
-
@smtp_retryable = true
|
|
271
|
+
@smtp_retryable = true if record
|
|
272
272
|
:assumed
|
|
273
273
|
else
|
|
274
|
-
if message.to_s.downcase.include?("temporary")
|
|
274
|
+
if record && message.to_s.downcase.include?("temporary")
|
|
275
275
|
@smtp_retryable = true
|
|
276
276
|
end
|
|
277
277
|
:assumed
|
|
@@ -303,7 +303,7 @@ module Deliverable
|
|
|
303
303
|
|
|
304
304
|
fake = "definitely-does-not-exist-#{rand(10**10)}@#{domain}"
|
|
305
305
|
result = SMTP_PORTS.each do |port|
|
|
306
|
-
outcome = attempt_rcpt(mail_server, port, fake)
|
|
306
|
+
outcome = attempt_rcpt(mail_server, port, fake, record: false)
|
|
307
307
|
break :accepted if outcome == :verified
|
|
308
308
|
break :rejected if outcome == :invalid
|
|
309
309
|
end
|
data/lib/deliverable/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: deliverable
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.2.
|
|
4
|
+
version: 0.2.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Erik Strömberg
|
|
8
|
-
autorequire:
|
|
9
8
|
bindir: exe
|
|
10
9
|
cert_chain: []
|
|
11
|
-
date:
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
12
11
|
dependencies:
|
|
13
12
|
- !ruby/object:Gem::Dependency
|
|
14
13
|
name: valid_email2
|
|
@@ -84,7 +83,6 @@ metadata:
|
|
|
84
83
|
homepage_uri: https://github.com/peopledb/deliverable
|
|
85
84
|
source_code_uri: https://github.com/peopledb/deliverable
|
|
86
85
|
changelog_uri: https://github.com/peopledb/deliverable/blob/main/CHANGELOG.md
|
|
87
|
-
post_install_message:
|
|
88
86
|
rdoc_options: []
|
|
89
87
|
require_paths:
|
|
90
88
|
- lib
|
|
@@ -99,8 +97,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
99
97
|
- !ruby/object:Gem::Version
|
|
100
98
|
version: '0'
|
|
101
99
|
requirements: []
|
|
102
|
-
rubygems_version: 3.
|
|
103
|
-
signing_key:
|
|
100
|
+
rubygems_version: 3.7.2
|
|
104
101
|
specification_version: 4
|
|
105
102
|
summary: 'Honest email verification: syntax, MX, SMTP RCPT, and catch-all detection.'
|
|
106
103
|
test_files: []
|