mailshield 1.2 → 1.3

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
  SHA256:
3
- metadata.gz: 47694cab766631dd24097db7e130aeac98bbc12f2ad4aef7a5f065811796ea71
4
- data.tar.gz: 52d6019eb905e12d7d4e5d6eee0cae2c36fba7e301a5e897c3350fa26aeb632f
3
+ metadata.gz: 362dd7a7c8a948582fdffea7fdc081da39461f3711e247a2cd79afa88d6635c8
4
+ data.tar.gz: 151d0b56d0f2bcbfacab22f427b2bc9712b543b4c6f49c72c9f634b0100f693b
5
5
  SHA512:
6
- metadata.gz: 41ec5aa1ae5db31d9e0e437eac3dc85da10561cecc9c1b57fe793fccda7990f7a707695c4f794c0518ed2fb23c99767daa18a7cca8488e7792b939e5a71d432e
7
- data.tar.gz: 887fe66ea4b30711689cea1346c9466d326cb13c927b6e957c6d6d035ef908f0a5739751f27e6af17c4dbdb3d6df9d5bca4bf89087064fbc3d2427f8ce4a717b
6
+ metadata.gz: 9b29470d6e8d15577c201fa8b2a02220f71c6d96c69e6de7700f72c3fc3f8831a592d2422ee3b7c6bb696b882d465f4cafcf679bbac0f001a6d881fb97b03b06
7
+ data.tar.gz: 5a341e947ab69d9b202f426a8ed2ee1646350ee945f597a87d72be72e76cd2e5ec42c1db0a7d2248fe88b3ed890796aa046aecfdc2d43bc77ed0ba5ccb928501
@@ -87,8 +87,8 @@ module MailShield
87
87
 
88
88
 
89
89
  class << self
90
- def disposable_domain?(domain)
91
- KNOWN_DISPOSABLE_DOMAINS.include?(domain)
90
+ def validate_known_disposal_domain?(domain)
91
+ raise TemporaryDomainError, 'Temporary / Disposal Email.' if KNOWN_DISPOSABLE_DOMAINS.include?(domain)
92
92
  end
93
93
  end
94
94
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Mailshield
4
- VERSION = '1.2'
5
- end
4
+ VERSION = '1.3'
5
+ end
data/lib/mailshield.rb CHANGED
@@ -15,7 +15,7 @@ module MailShield
15
15
  class SPFError < ValidationError; end
16
16
  class DMARCError < ValidationError; end
17
17
  class SMTPError < ValidationError; end
18
-
18
+ class TemporaryDomainError < ValidationError; end
19
19
  class << self
20
20
  attr_accessor :dns_cache, :smtp_cache
21
21
 
@@ -25,13 +25,15 @@ module MailShield
25
25
  domain = extract_domain(email)
26
26
 
27
27
  begin
28
+ validate_known_disposal_domain?(domain)
28
29
  validate_format!(email)
29
30
  validate_domain!(domain)
30
31
  validate_spf!(domain)
31
32
  validate_dmarc!(domain)
32
33
  validate_smtp!(email) if verify_by_send
34
+
33
35
  rescue ValidationError => e
34
- return { valid: false, issues: [e.message] }
36
+ return { valid: false, reason: e.message }
35
37
  end
36
38
 
37
39
  { valid: true }
@@ -57,15 +59,15 @@ module MailShield
57
59
  end
58
60
 
59
61
  def validate_spf!(domain)
60
- raise SPFError, 'Temporary / Disposable Email' unless spf_record?(domain)
62
+ raise SPFError, 'Temporary / Disposable Email.' unless spf_record?(domain)
61
63
  end
62
64
 
63
65
  def validate_dmarc!(domain)
64
- raise DMARCError, 'Temporary / Disposable Email' unless dmarc_record?(domain)
66
+ raise DMARCError, 'Temporary / Disposable Email.' unless dmarc_record?(domain)
65
67
  end
66
68
 
67
69
  def validate_smtp!(email)
68
- raise SMTPError, 'Email Address Not Found' unless smtp_verify_email(email)
70
+ raise SMTPError, 'Email Address Not Found.' unless smtp_verify_email(email)
69
71
  end
70
72
 
71
73
  def extract_domain(email)
@@ -77,13 +79,11 @@ module MailShield
77
79
  end
78
80
 
79
81
  def fetch_mx_records(domain)
80
- dns_cache[domain] ||= begin
81
- Resolv::DNS.open do |dns|
82
- dns.getresources(domain, Resolv::DNS::Resource::IN::MX).map(&:exchange).map(&:to_s)
83
- end
84
- rescue Resolv::ResolvError
85
- []
82
+ Resolv::DNS.open do |dns|
83
+ dns.getresources(domain, Resolv::DNS::Resource::IN::MX).map(&:exchange).map(&:to_s)
86
84
  end
85
+ rescue Resolv::ResolvError
86
+ []
87
87
  end
88
88
 
89
89
  def spf_record?(domain)
@@ -97,18 +97,17 @@ module MailShield
97
97
  end
98
98
 
99
99
  def fetch_txt_records(domain)
100
- dns_cache[domain] ||= begin
101
- Resolv::DNS.open do |dns|
102
- dns.getresources(domain, Resolv::DNS::Resource::IN::TXT).map(&:data)
103
- end
104
- rescue Resolv::ResolvError
105
- []
100
+ Resolv::DNS.open do |dns|
101
+ records = dns.getresources(domain, Resolv::DNS::Resource::IN::TXT)
102
+ records.map(&:data)
106
103
  end
104
+ rescue Resolv::ResolvError
105
+ []
107
106
  end
108
107
 
109
108
  def smtp_verify_email(email)
110
109
  domain = extract_domain(email)
111
- smtp_server = smtp_cache[domain] ||= get_smtp_server(domain)
110
+ smtp_server = get_smtp_server(domain)
112
111
 
113
112
  return false unless smtp_server
114
113
 
@@ -117,7 +116,7 @@ module MailShield
117
116
  smtp.helo('localhost')
118
117
  smtp.mailfrom('test@example.com')
119
118
  response = smtp.rcptto(email)
120
- response == '250 OK'
119
+ response.status == '250' || response.status == '250 OK'
121
120
  end
122
121
  rescue Net::SMTPFatalError, Net::SMTPServerBusy, Net::SMTPSyntaxError, Errno::ECONNREFUSED
123
122
  false
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mailshield
3
3
  version: !ruby/object:Gem::Version
4
- version: '1.2'
4
+ version: '1.3'
5
5
  platform: ruby
6
6
  authors:
7
7
  - jana
@@ -9,9 +9,23 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
  date: 2024-09-03 00:00:00.000000000 Z
12
- dependencies: []
13
- description: MailShield helps secure your application by identifying temporary or
14
- disposable email domains.
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: net-smtp
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 0.2.1
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 0.2.1
27
+ description: MailShield enhances your app’s security by blocking temporary, spam and
28
+ disposable email addresses, keeping your user data clean and reducing spam.
15
29
  email:
16
30
  - shanmugamjanarthan24@gmail.com
17
31
  executables: []