email-authentication 0.1.2 → 0.1.5

Sign up to get free protection for your applications and to get access to all the features.
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