email_probe 1.0.0

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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 35004f0e2aabc166ecd626029596a1a0a253bab6
4
+ data.tar.gz: b6159ed69d4d23ef00c66bbc6fc7bc91cf9f6e32
5
+ SHA512:
6
+ metadata.gz: 38588be8aa4d7cb6cee7a96a2dd0767eff38487fa5b5e3fdc79795eee2417a67ac94a704b6ad89f7e386b097a589c8a3af24c8fda3384191ba4f07df48966691
7
+ data.tar.gz: d1804342f371dea41fb62ee386f4288a6f7ccef0c0577fd343b66ece927daefb743caef4ffb5172d546297c41cc9682a31fc8d01b44ba7f9757249f702b2d515
@@ -0,0 +1,8 @@
1
+ module EmailProbe
2
+ end
3
+
4
+ require 'email_probe/exceptions'
5
+ require 'email_probe/checker'
6
+ require 'email_probe/email_account'
7
+ require 'email_probe/smtp_connection'
8
+ require 'email_probe/server_resolver'
@@ -0,0 +1,21 @@
1
+ module EmailProbe
2
+ class Checker
3
+ def initialize(sender_email)
4
+ @sender_account = EmailProbe::EmailAccount.new(sender_email)
5
+ @server_resolver = EmailProbe::ServerResolver.new
6
+ end
7
+
8
+ def check(email)
9
+ account = EmailProbe::EmailAccount.new(email)
10
+
11
+ server_resolver.servers_for_domain(account.domain).any? do |server|
12
+ smtp = EmailProbe::SMTPConnection.new(server, 25)
13
+ smtp.account_exists?(sender_account, account)
14
+ end
15
+ end
16
+
17
+ private
18
+
19
+ attr_reader :sender_account, :server_resolver
20
+ end
21
+ end
@@ -0,0 +1,13 @@
1
+ module EmailProbe
2
+ class EmailAccount
3
+ attr_reader :name, :domain
4
+
5
+ def initialize(address_string)
6
+ @name, @domain = address_string.split('@')
7
+ end
8
+
9
+ def address
10
+ "#{name}@#{domain}"
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,3 @@
1
+ module EmailProbe
2
+ class SMTPRequestException < StandardError; end
3
+ end
@@ -0,0 +1,18 @@
1
+ require 'resolv'
2
+
3
+ module EmailProbe
4
+ class ServerResolver
5
+ def initialize
6
+ @dns_resolver = Resolv::DNS.new
7
+ end
8
+
9
+ def servers_for_domain(domain)
10
+ resources = dns_resolver.getresources(domain, Resolv::DNS::Resource::IN::MX)
11
+ resources.map { |e| e.exchange.to_s }
12
+ end
13
+
14
+ private
15
+
16
+ attr_reader :dns_resolver
17
+ end
18
+ end
@@ -0,0 +1,39 @@
1
+ require 'net/smtp'
2
+
3
+ module EmailProbe
4
+ class SMTPConnection
5
+ module Status
6
+ SUCCESS = 250
7
+ NOT_FOUND = 550
8
+ end
9
+
10
+ def initialize(server, port)
11
+ @server = server
12
+ @port = port
13
+ end
14
+
15
+ def account_exists?(sender_account, account)
16
+ connection = start_connection(account)
17
+ connection.mailfrom(sender_account.address)
18
+
19
+ begin
20
+ account_status = connection.rcptto(account.address).status.to_i
21
+ rescue Net::SMTPFatalError => e
22
+ raise e unless e.message =~ /^550/
23
+ account_status = 550
24
+ end
25
+
26
+ connection.finish
27
+
28
+ account_status == Status::SUCCESS
29
+ end
30
+
31
+ private
32
+
33
+ attr_reader :server, :port
34
+
35
+ def start_connection(account)
36
+ Net::SMTP.start(server, port, account.domain)
37
+ end
38
+ end
39
+ end
metadata ADDED
@@ -0,0 +1,63 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: email_probe
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Rafal Cymerys
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-02-23 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rspec
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '3.4'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '3.4'
27
+ description: Check if email address exists on remote server
28
+ email: rafal@cymerys.com
29
+ executables: []
30
+ extensions: []
31
+ extra_rdoc_files: []
32
+ files:
33
+ - lib/email_probe.rb
34
+ - lib/email_probe/checker.rb
35
+ - lib/email_probe/email_account.rb
36
+ - lib/email_probe/exceptions.rb
37
+ - lib/email_probe/server_resolver.rb
38
+ - lib/email_probe/smtp_connection.rb
39
+ homepage: http://rubygems.org/gems/email_probe
40
+ licenses:
41
+ - MIT
42
+ metadata: {}
43
+ post_install_message:
44
+ rdoc_options: []
45
+ require_paths:
46
+ - lib
47
+ required_ruby_version: !ruby/object:Gem::Requirement
48
+ requirements:
49
+ - - ">="
50
+ - !ruby/object:Gem::Version
51
+ version: '0'
52
+ required_rubygems_version: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ version: '0'
57
+ requirements: []
58
+ rubyforge_project:
59
+ rubygems_version: 2.5.1
60
+ signing_key:
61
+ specification_version: 4
62
+ summary: Check if email address exists on remote server
63
+ test_files: []