email-verification 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/Gemfile.lock +5 -1
- data/README.md +13 -1
- data/email-verification.gemspec +1 -0
- data/lib/email/verification/base.rb +26 -9
- data/lib/email/verification/gmail.rb +9 -1
- data/lib/email/verification/hotmail.rb +2 -2
- data/lib/email/verification/verifier.rb +8 -8
- data/lib/email/verification/version.rb +1 -1
- data/lib/email/verification.rb +4 -2
- metadata +16 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 280d7dfab6e3eb5b6f4fe8aa6e95423d19f6f7a0fc575c42b8c357d113ea4801
|
4
|
+
data.tar.gz: 53805c28a691d7285c7c12c05be4f14e46328829c46a501e9954a4b14dc6f81b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6813e1ef4ae7155ea78180943982d5f1acf775d3612ed32ebde9c6fa7abc94558ad71d5acc4c1ff9617cff00ba589f8b8d4cfce561b446b4d0e3834a838e07e2
|
7
|
+
data.tar.gz: 1b3d4bd66d845ba96cc4c53c0c3fc0708adb730189acf3197c5415fe513a7c03cb55a53e664203a3bc1f088f7195a5aaa18e94c2731c4eeb238b66db73af3409
|
data/Gemfile.lock
CHANGED
@@ -1,9 +1,10 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
email-verification (0.
|
4
|
+
email-verification (0.2.0)
|
5
5
|
gmail (~> 0.7.1)
|
6
6
|
highline (~> 2.0, >= 2.0.2)
|
7
|
+
net-imap-proxy (~> 0.1.0)
|
7
8
|
|
8
9
|
GEM
|
9
10
|
remote: https://rubygems.org/
|
@@ -20,7 +21,10 @@ GEM
|
|
20
21
|
mini_mime (>= 0.1.1)
|
21
22
|
method_source (0.9.2)
|
22
23
|
mini_mime (1.0.2)
|
24
|
+
net-imap-proxy (0.1.0)
|
25
|
+
proxifier (~> 1.0, >= 1.0.3)
|
23
26
|
oauth (0.5.4)
|
27
|
+
proxifier (1.0.3)
|
24
28
|
pry (0.12.2)
|
25
29
|
coderay (~> 1.1.0)
|
26
30
|
method_source (~> 0.9.0)
|
data/README.md
CHANGED
@@ -27,7 +27,7 @@ Email::Verification expects a settings hash in the following format:
|
|
27
27
|
```ruby
|
28
28
|
settings = {
|
29
29
|
address: "confirmation@foo.com",
|
30
|
-
from: "Confirmation",
|
30
|
+
from: "Confirmation", # Optional
|
31
31
|
subject: /Confirm your email!/i,
|
32
32
|
regex: /<a href=['"](?<match>[^"]*)['"]>\s*Click here\s*<\/a>/i
|
33
33
|
}
|
@@ -41,6 +41,18 @@ Then the client is invoked using:
|
|
41
41
|
Email::Verification.retrieve_verification_code(email: 'email.address@gmail.com', password: 's0mEpasSwOrD', settings: settings)
|
42
42
|
```
|
43
43
|
|
44
|
+
### Proxy support
|
45
|
+
|
46
|
+
Email::Verification can also be used together with proxies to fetch IMAP messages.
|
47
|
+
|
48
|
+
Simply provide a hash { host: "http://someproxyhost.com", port: 8080 } to the retrieve_verification_code method:
|
49
|
+
|
50
|
+
```ruby
|
51
|
+
Email::Verification.retrieve_verification_code(email: 'email.address@gmail.com', password: 's0mEpasSwOrD', settings: settings, proxy: {host: "http://someproxyhost.com", port: 8080})
|
52
|
+
```
|
53
|
+
|
54
|
+
Proxy authentication is also supported using the format {host: "http://user:password@someproxyhost.com", port: 8080}
|
55
|
+
|
44
56
|
## Development
|
45
57
|
|
46
58
|
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
data/email-verification.gemspec
CHANGED
@@ -36,6 +36,7 @@ Gem::Specification.new do |spec|
|
|
36
36
|
|
37
37
|
spec.add_dependency "gmail", "~> 0.7.1"
|
38
38
|
spec.add_dependency "highline", "~> 2.0", ">= 2.0.2"
|
39
|
+
spec.add_dependency "net-imap-proxy", "~> 0.1.0"
|
39
40
|
|
40
41
|
spec.add_development_dependency "bundler", "~> 1.17"
|
41
42
|
spec.add_development_dependency "rake", "~> 10.0"
|
@@ -7,19 +7,36 @@ module Email
|
|
7
7
|
self.configuration = configuration
|
8
8
|
end
|
9
9
|
|
10
|
-
def
|
10
|
+
def set_retriever(email:, password:, host:, port: 993, enable_ssl: true, proxy: nil)
|
11
|
+
retriever = :imap
|
12
|
+
|
13
|
+
options = {
|
14
|
+
address: host,
|
15
|
+
port: port,
|
16
|
+
user_name: email,
|
17
|
+
password: password,
|
18
|
+
enable_ssl: enable_ssl
|
19
|
+
}
|
20
|
+
|
21
|
+
if proxy && !proxy.empty? && !proxy[:host].to_s.empty? && !proxy[:port].to_s.empty?
|
22
|
+
retriever = ::Net::IMAP::Proxy::RetrieverMethod
|
23
|
+
proxy[:host] = "http://#{proxy[:host]}" unless proxy[:host] =~ /^http(s)?:\/\//i
|
24
|
+
options = options.merge(proxy_address: proxy[:host], proxy_port: proxy[:port])
|
25
|
+
log("Using proxy #{proxy[:host]}:#{proxy[:port]} to fetch messages from #{options[:address]}:#{options[:port]}")
|
26
|
+
end
|
27
|
+
|
28
|
+
Mail.defaults do
|
29
|
+
retriever_method retriever, options
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def retrieve_verification_code(email:, password:, host:, port: 993, enable_ssl: true, count: :all, mailboxes: %w(Inbox), settings: {}, proxy: nil)
|
11
34
|
emails = []
|
12
35
|
result = nil
|
13
36
|
|
14
37
|
begin
|
15
|
-
|
16
|
-
|
17
|
-
port: port,
|
18
|
-
user_name: email,
|
19
|
-
password: password,
|
20
|
-
enable_ssl: enable_ssl
|
21
|
-
end
|
22
|
-
|
38
|
+
set_retriever(email: email, password: password, host: host, port: port, enable_ssl: enable_ssl, proxy: proxy)
|
39
|
+
|
23
40
|
mailboxes.each do |mailbox|
|
24
41
|
Mail.find(mailbox: mailbox, order: :desc, count: count)&.each do |email|
|
25
42
|
log("From: #{email.from&.first&.strip}. Subject: #{email.subject}")
|
@@ -2,7 +2,15 @@ module Email
|
|
2
2
|
module Verification
|
3
3
|
class Gmail < Base
|
4
4
|
|
5
|
-
def retrieve_verification_code(email:, password:, mark_as_read: true, count: :all, mailboxes: %w(Inbox), settings: {})
|
5
|
+
def retrieve_verification_code(email:, password:, mark_as_read: true, count: :all, mailboxes: %w(Inbox), settings: {}, proxy: nil)
|
6
|
+
if proxy && !proxy.empty? && !proxy[:host].to_s.empty? && !proxy[:port].to_s.empty?
|
7
|
+
return super(email: email, password: password, host: "imap.gmail.com", port: 993, enable_ssl: true, mailboxes: mailboxes, count: count, settings: settings, proxy: proxy)
|
8
|
+
else
|
9
|
+
return normal_retrieve_verification_code(email: email, password: password, mark_as_read: mark_as_read, count: count, mailboxes: mailboxes, settings: settings)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def normal_retrieve_verification_code(email:, password:, mark_as_read: true, count: :all, mailboxes: %w(Inbox), settings: {})
|
6
14
|
emails = []
|
7
15
|
result = nil
|
8
16
|
|
@@ -2,8 +2,8 @@ module Email
|
|
2
2
|
module Verification
|
3
3
|
class Hotmail < Base
|
4
4
|
|
5
|
-
def retrieve_verification_code(email:, password:, mailboxes: %w(Inbox Junk), count: :all, settings: {})
|
6
|
-
super(email: email, password: password, host: "outlook.office365.com", port: 993, enable_ssl: true, mailboxes: mailboxes, count: count, settings: settings)
|
5
|
+
def retrieve_verification_code(email:, password:, mailboxes: %w(Inbox Junk), count: :all, settings: {}, proxy: nil)
|
6
|
+
super(email: email, password: password, host: "outlook.office365.com", port: 993, enable_ssl: true, mailboxes: mailboxes, count: count, settings: settings, proxy: proxy)
|
7
7
|
end
|
8
8
|
|
9
9
|
end
|
@@ -18,14 +18,14 @@ module Email
|
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
21
|
-
def retrieve_verification_code(email:, password:, mailboxes: %w(Inbox), count: :all, settings: {}, wait: 3, retries: 3)
|
21
|
+
def retrieve_verification_code(email:, password:, mailboxes: %w(Inbox), count: :all, settings: {}, proxy: nil, wait: 3, retries: 3)
|
22
22
|
service = determine_email_service(email)
|
23
23
|
|
24
24
|
result = case service
|
25
25
|
when :gmail
|
26
|
-
perform_retrieval(::Email::Verification::Gmail.new, email: email, password: password, mailboxes: mailboxes, count: count, settings: settings, wait: wait, retries: retries)
|
26
|
+
perform_retrieval(::Email::Verification::Gmail.new, email: email, password: password, mailboxes: mailboxes, count: count, settings: settings, proxy: proxy, wait: wait, retries: retries)
|
27
27
|
when :hotmail
|
28
|
-
perform_retrieval(::Email::Verification::Hotmail.new, email: email, password: password, mailboxes: mailboxes, count: count, settings: settings, wait: wait, retries: retries)
|
28
|
+
perform_retrieval(::Email::Verification::Hotmail.new, email: email, password: password, mailboxes: mailboxes, count: count, settings: settings, proxy: proxy, wait: wait, retries: retries)
|
29
29
|
when :protonmail, :tutanota
|
30
30
|
if self.mode.eql?(:interactive)
|
31
31
|
puts "[Email::Verification::Verifier] - #{Time.now}: You're using an email account that doesn't have support for POP3 or IMAP. You have to manually retrieve the code or URL from the account and post it below."
|
@@ -40,7 +40,7 @@ module Email
|
|
40
40
|
return result
|
41
41
|
end
|
42
42
|
|
43
|
-
def perform_retrieval(verifier, email:, password: nil, mailboxes: %w(Inbox), count: :all, settings: {}, wait: 3, retries: 3)
|
43
|
+
def perform_retrieval(verifier, email:, password: nil, mailboxes: %w(Inbox), count: :all, settings: {}, proxy: nil, wait: 3, retries: 3)
|
44
44
|
result = nil
|
45
45
|
|
46
46
|
if password.to_s.empty? && self.mode.eql?(:interactive)
|
@@ -50,20 +50,20 @@ module Email
|
|
50
50
|
raise ::Email::Verification::Errors::InvalidCredentialsError.new("Password wasn't provided for #{email} and automatic mode is enabled. Please provide a password or switch to interactive mode.")
|
51
51
|
else
|
52
52
|
if settings_provided?(settings) && !wait.nil? && !retries.nil?
|
53
|
-
result = retrieve_with_retries(verifier, email: email, password: password, mailboxes: mailboxes, count: count, settings: settings, wait: wait, retries: retries)
|
53
|
+
result = retrieve_with_retries(verifier, email: email, password: password, mailboxes: mailboxes, count: count, settings: settings, proxy: proxy, wait: wait, retries: retries)
|
54
54
|
else
|
55
|
-
result = verifier.retrieve_verification_code(email: email, password: password, mailboxes: mailboxes, count: count, settings: settings)
|
55
|
+
result = verifier.retrieve_verification_code(email: email, password: password, mailboxes: mailboxes, count: count, settings: settings, proxy: proxy)
|
56
56
|
end
|
57
57
|
end
|
58
58
|
|
59
59
|
return result
|
60
60
|
end
|
61
61
|
|
62
|
-
def retrieve_with_retries(verifier, email:, password: nil, mailboxes: %w(Inbox), count: :all, settings: {}, wait: 3, retries: 3)
|
62
|
+
def retrieve_with_retries(verifier, email:, password: nil, mailboxes: %w(Inbox), count: :all, settings: {}, proxy: nil, wait: 3, retries: 3)
|
63
63
|
result = nil
|
64
64
|
|
65
65
|
begin
|
66
|
-
result = verifier.retrieve_verification_code(email: email, password: password, mailboxes: mailboxes, count: count, settings: settings)
|
66
|
+
result = verifier.retrieve_verification_code(email: email, password: password, mailboxes: mailboxes, count: count, settings: settings, proxy: proxy)
|
67
67
|
|
68
68
|
if result.to_s.empty?
|
69
69
|
sleep wait if wait
|
data/lib/email/verification.rb
CHANGED
@@ -3,6 +3,8 @@ require "mail"
|
|
3
3
|
require "yaml"
|
4
4
|
require "highline"
|
5
5
|
|
6
|
+
require "net/imap/proxy"
|
7
|
+
|
6
8
|
require "email/verification/version"
|
7
9
|
|
8
10
|
require "email/verification/configuration"
|
@@ -35,8 +37,8 @@ module Email
|
|
35
37
|
yield(configuration)
|
36
38
|
end
|
37
39
|
|
38
|
-
def self.retrieve_verification_code(email:, password: nil, mailboxes: %w(Inbox), settings: {}, mode: :interactive)
|
39
|
-
::Email::Verification::Verifier.new(mode: mode).retrieve_verification_code(email: email, password: password, mailboxes: mailboxes, settings: settings)
|
40
|
+
def self.retrieve_verification_code(email:, password: nil, mailboxes: %w(Inbox), settings: {}, mode: :interactive, proxy: nil)
|
41
|
+
::Email::Verification::Verifier.new(mode: mode).retrieve_verification_code(email: email, password: password, mailboxes: mailboxes, settings: settings, proxy: proxy)
|
40
42
|
end
|
41
43
|
|
42
44
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: email-verification
|
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
|
- Sebastian Johnsson
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-10-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: gmail
|
@@ -44,6 +44,20 @@ dependencies:
|
|
44
44
|
- - ">="
|
45
45
|
- !ruby/object:Gem::Version
|
46
46
|
version: 2.0.2
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: net-imap-proxy
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - "~>"
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: 0.1.0
|
54
|
+
type: :runtime
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
requirements:
|
58
|
+
- - "~>"
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: 0.1.0
|
47
61
|
- !ruby/object:Gem::Dependency
|
48
62
|
name: bundler
|
49
63
|
requirement: !ruby/object:Gem::Requirement
|