email-authentication 0.1.2 → 0.1.5

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: df9406d305f16cad0177d13e1a2e59b854b23762
4
- data.tar.gz: 23012f8bf9bfba8c8a0c96ff26bc898850ba2362
3
+ metadata.gz: 111f33f51ed2cb1a269af68df394227ab7312dd9
4
+ data.tar.gz: 393f18a8d3b720f27baf9274451174d20d6ed355
5
5
  SHA512:
6
- metadata.gz: 2be06a5c5c9d7788752a38fd413d635133aae74fb103ebbb76d4eead70809044bc5ebb146ee64793c3e2586a4035593d864ea6e96d525335c358e8df5afc200b
7
- data.tar.gz: 9ee13aa11dea0ae5f1a75da5066977dfd7d52e8024633518b79119614804d1bca96844132b3612b909b7f9d48542d0af726be8f8dbe1a524d43b3817ad47aa8c
6
+ metadata.gz: 4543774e6ba679c5567013f9494c539087168e5322b999c6c40b7214b901e83b0f5bb0e934a09bf74f0a60ef43295328ea4e797de592b9c7541e3d5d25287fb9
7
+ data.tar.gz: a1f1376d98ec4a376c032a7fc3879463f5208eee2d73d1902994ba1abb3d41107c1532c9cacbf55feec016444eccd6d6b76fb41635d86f16e2c541e209ae9efe
data/Gemfile CHANGED
@@ -1,4 +1,5 @@
1
1
  source 'https://rubygems.org'
2
+ ruby "2.0.0"
2
3
  gem "codeclimate-test-reporter"
3
4
  gem "multi_json"
4
5
  gem "minitest"
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- email-authentication (0.1.1)
4
+ email-authentication (0.1.5)
5
5
  dnsruby
6
6
 
7
7
  GEM
@@ -11,7 +11,7 @@ GEM
11
11
  simplecov (>= 0.7.1, < 1.0.0)
12
12
  dnsruby (1.54)
13
13
  minitest (5.0.8)
14
- multi_json (1.8.0)
14
+ multi_json (1.8.2)
15
15
  simplecov (0.7.1)
16
16
  multi_json (~> 1.0)
17
17
  simplecov-html (~> 0.7.1)
data/bin/emailcheck.rb CHANGED
@@ -2,9 +2,11 @@
2
2
  require 'rubygems'
3
3
  require 'email-authentication'
4
4
  # needs upgrade to thor
5
- address=count = ARGV[0]
5
+ address = ARGV[0]
6
+ from=ARGV[1]
6
7
  puts "Address is #{[address]}"
8
+ puts "From address #{from}"
7
9
  @f=EmailAuthentication::Base.new
8
10
  success,msg=@f.check(address)
9
- puts "Success: #{address}" if success
11
+ puts "Success: #{address} messages #{msg}" if success
10
12
  puts "Failure: #{address} messages: #{msg}" if !success
@@ -1,30 +1,34 @@
1
1
  require 'rubygems'
2
2
  require 'dnsruby'
3
3
  include Dnsruby
4
+ require 'net/telnet'
4
5
 
5
6
  # Use the system configured nameservers to run a query
6
7
 
7
8
  module EmailAuthentication
8
9
  class Base
9
- attr_accessor :address, :mx, :message, :domain
10
+ attr_accessor :address, :mx, :message, :domain, :from
10
11
  def debug
11
12
  true
12
13
  end
13
- def self.check(address)
14
+ def self.check(address,from)
14
15
  tmp=self.new
15
- return tmp.check(address)
16
+ return tmp.check(address,from)
16
17
  end
17
- def set_address(address)
18
+ def set_address(address,from="")
18
19
  raise "address nil" if address==nil
19
20
  raise "address blank" if address==""
21
+ raise "from address blank" if from==""
20
22
  self.address=address.to_s
23
+ self.from=from
21
24
  @flag=true
22
25
  end
23
26
  # this needs work. Anyone who can improve the regex i would be happy to put in their changes
27
+ # see alsothe validate_email_format gem for rails
24
28
  def check_format
25
29
  @@email_regex = /^(([A-Za-z0-9]+_+)|([A-Za-z0-9]+\-+)|([A-Za-z0-9]+\.+)|([A-Za-z0-9]+\++))*[A-Z‌​a-z0-9]+@((\w+\-+)|(\w+\.))*\w{1,63}\.[a-zA-Z]{2,6}$/i
26
30
  res=(@address =~ @@email_regex)
27
- puts " res is #{res}"
31
+ #puts " res is #{res}"
28
32
  if res
29
33
  [true,"format ok"]
30
34
  else
@@ -40,13 +44,14 @@ module EmailAuthentication
40
44
  def check_mx
41
45
  domain=self.address.split('@')
42
46
  @domain = domain[1]
43
- puts "domain is #{domain}"
47
+ #puts "domain is #{domain}"
44
48
  flag=false
45
49
  if @domain!=nil
46
50
  begin
47
51
  ret = self.resolver.query(@domain, Types.MX)
48
52
  if ret.answer!=nil and ret.rcode=='NOERROR'
49
53
  @mx=ret.answer.first.exchange.to_s if ret.answer!=nil
54
+ @mx=@mx.downcase
50
55
  msg= "mx record #{self.mx}"
51
56
  puts msg
52
57
  flag=true
@@ -63,12 +68,52 @@ module EmailAuthentication
63
68
  [flag,msg]
64
69
  end
65
70
  # need to think about this and check the domain via telnet
71
+ #S: 220 smtp.example.com ESMTP Postfix
72
+ #C: HELO relay.example.org
73
+ #S: 250 Hello relay.example.org, I am glad to meet you
74
+ #C: MAIL FROM:<bob@example.org>
75
+ #S: 250 Ok
76
+ #C: RCPT TO:<alice@example.com>
77
+ #S: 250 Ok
78
+
66
79
  def check_smtp
67
- [true,"smtp ok"]
80
+ flag=false
81
+ msg='smtp ok'
82
+ domain=self.from.split('@')
83
+ @fromdomain = domain[1]
84
+ if @mx.include?('google') or @mx.include?('live.com')
85
+ flag=true
86
+ msg="smtp not checked since google or live: #{@mx}"
87
+ else
88
+ begin
89
+ smtp = Net::Telnet::new("Host" => @mx, 'Port' => 25, "Telnetmode" => false, "Prompt" => /^\+OK/)
90
+ c=""
91
+ msg=c
92
+ cmd="HELO " + @fromdomain
93
+ smtp.cmd('String' => cmd, 'Match'=> /^250/) { |c| print "CMD: #{cmd} RESP: #{c}"
94
+ msg << c}
95
+ cmd="MAIL FROM:<" +@from+ ">"
96
+ sleep 0.5
97
+ smtp.cmd('String' => cmd, 'Match'=> /^250/ ) { |c| print "CMD: #{cmd} RESP: #{c}"
98
+ msg << c}
99
+ cmd="RCPT TO:<" +@address+ ">"
100
+ sleep 0.5
101
+ smtp.cmd('String' => cmd, 'Match'=> /^250/ ) { |c| print "CMD: #{cmd} RESP: #{c}"
102
+ msg=c
103
+ flag=true if c.include?('250') }
104
+ cmd='quit'
105
+ smtp.cmd('String' => cmd, 'Match'=> /^221/ ) { |c| print "CMD: #{cmd} RESP: #{c}" }
106
+ rescue Exception => e
107
+ @flag=false
108
+ msg= "smtp exception #{e.message}"
109
+ end
110
+ end
111
+
112
+ [flag,msg]
68
113
  end
69
114
  # run all the checks
70
- def check(address)
71
- self.set_address(address)
115
+ def check(address,from)
116
+ self.set_address(address,from)
72
117
  @message=[]
73
118
  puts "checking #{@address}"
74
119
  ['format','mx','smtp'].each { |cmd|
@@ -76,6 +121,7 @@ module EmailAuthentication
76
121
  res,msg= self.send(cmdstring)
77
122
  @flag=@flag && res
78
123
  @message << msg }
124
+ [@flag,@message.join(',').to_s]
79
125
  end
80
126
 
81
127
 
@@ -14,7 +14,7 @@
14
14
  <img src="./assets/0.7.1/loading.gif" alt="loading"/>
15
15
  </div>
16
16
  <div id="wrapper" style="display:none;">
17
- <div class="timestamp">Generated <abbr class="timeago" title="2013-10-20T15:39:14+08:00">2013-10-20T15:39:14+08:00</abbr></div>
17
+ <div class="timestamp">Generated <abbr class="timeago" title="2013-10-26T17:38:07+08:00">2013-10-26T17:38:07+08:00</abbr></div>
18
18
  <ul class="group_tabs"></ul>
19
19
 
20
20
  <div id="content">
data/test/test_address.rb CHANGED
@@ -8,7 +8,7 @@ class EmailAuthenticationTest < Minitest::Test
8
8
  @f=EmailAuthentication::Base.new
9
9
  @success='scott.sproule@ficonab.com'
10
10
  @failruntimeerror=[nil,""]
11
-
11
+ @from='scott.sproule@estormtech.com'
12
12
  end
13
13
 
14
14
  def test_basic
@@ -18,21 +18,28 @@ class EmailAuthenticationTest < Minitest::Test
18
18
  def test_checknil
19
19
 
20
20
  assert_raises(RuntimeError) do
21
- @f.check(nil)
21
+ @f.check(nil," ")
22
22
  end
23
23
 
24
24
  end
25
+ def test_checknil2
26
+
27
+ assert_raises(RuntimeError) do
28
+ @f.check("nil","")
29
+ end
30
+
31
+ end
25
32
  def test_checkfailruntime
26
33
  @failruntimeerror.each { |add|
27
34
  assert_raises(RuntimeError) do
28
- @f.check(add)
35
+ @f.check(add,@from)
29
36
  end
30
37
  }
31
38
 
32
39
  end
33
40
 
34
41
  def test_goodemail
35
- success,msg= @f.check(@success)
42
+ success,msg= @f.check(@success,@from)
36
43
  assert success,"check did not succeed #{msg}"
37
44
  end
38
45
  def test_resolver_onlyonce
@@ -43,19 +50,19 @@ class EmailAuthenticationTest < Minitest::Test
43
50
  end
44
51
  #check a particular format
45
52
  def test_checkformat_good
46
- @f.set_address(@success)
53
+ @f.set_address(@success,@from)
47
54
  success,msg= @f.check_format
48
55
  assert success,"check did not succeed"
49
56
 
50
57
  end
51
58
  def test_class_variable
52
- success,msg= EmailAuthentication::Base.check(@success)
59
+ success,msg= EmailAuthentication::Base.check(@success,@from)
53
60
  assert success,"check did not succeed"
54
61
 
55
62
  end
56
63
  def test_bademails
57
64
  ['test','test#sed', 'test@jack'].each { |e|
58
- @f.set_address(e)
65
+ @f.set_address(e,@from)
59
66
  success,msg= @f.check_format
60
67
  assert !success,"check did succeed but it should not for #{e}"
61
68
  }
@@ -8,11 +8,12 @@ class EmailMXAuthenticationTest < Minitest::Test
8
8
  @f=EmailAuthentication::Base.new
9
9
  @success='scott.sproule@ficonab.com'
10
10
  @failruntimeerror=[nil,""]
11
+ @from='scott.sproule@estormtech.com'
11
12
 
12
13
  end
13
14
 
14
15
  def test_good_domain
15
- @f.set_address(@success)
16
+ @f.set_address(@success,@from)
16
17
  success,msg= @f.check_mx
17
18
  assert success,"check did not succeed"
18
19
  assert @f.mx!=nil, "mx should be set"
@@ -20,21 +21,17 @@ class EmailMXAuthenticationTest < Minitest::Test
20
21
  end
21
22
 
22
23
  def test_bad_domain
23
- @f.set_address('test@baddomainxx23345.com')
24
+ @f.set_address('test@baddomainxx23345.com',@from)
24
25
  success,msg= @f.check_mx
25
26
  assert !success,"check did not succeed"
26
27
 
27
28
  end
28
29
  def test_bad_domain2
29
- @f.set_address('test@baddom ainxx23345.com')
30
+ @f.set_address('test@baddom ainxx23345.com',@from)
30
31
  success,msg= @f.check_mx
31
32
  assert !success,"check did not succeed"
32
33
 
33
34
  end
34
35
 
35
-
36
-
37
-
38
-
39
36
 
40
37
  end
data/test/test_smtp.rb ADDED
@@ -0,0 +1,29 @@
1
+ #uts File.dirname(__FILE__)
2
+ require File.dirname(__FILE__) + '/test_helper.rb'
3
+
4
+
5
+ class EmailSMTPAuthenticationTest < Minitest::Test
6
+
7
+ def setup
8
+ @f=EmailAuthentication::Base.new
9
+ @success='scott.sproule@ficonab.com'
10
+ @failruntimeerror=[nil,""]
11
+ @from='scott.sproule@estormtech.com'
12
+ @success2='info2@paulaner.com.sg'
13
+ end
14
+
15
+ def test_google_mx
16
+ @f.set_address(@success,@from)
17
+ success,msg= @f.check(@success,@from)
18
+ assert success,"check did not succeed"
19
+ puts msg
20
+ end
21
+
22
+ def test_smtp_mx
23
+ success,msg= @f.check(@success2,@from)
24
+ assert success,"check did not succeed"
25
+ puts msg
26
+ end
27
+
28
+
29
+ end
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: email-authentication
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Scott Sproule
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-10-20 00:00:00.000000000 Z
12
- dependencies: []
11
+ date: 2013-10-26 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: dnsruby
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '>='
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '>='
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
13
27
  description: Try and authenticate email address, check format, lookup mx record and
14
28
  check smtp connectivity
15
29
  email: scott.sproule@ficonab.com
@@ -64,6 +78,7 @@ files:
64
78
  - test/test_address.rb
65
79
  - test/test_helper.rb
66
80
  - test/test_mx_records.rb
81
+ - test/test_smtp.rb
67
82
  - bin/emailcheck.rb
68
83
  - Gemfile
69
84
  - Gemfile.lock