mailshield 1.2 → 1.3
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/lib/mailshield/disposable_domains.rb +2 -2
- data/lib/mailshield/version.rb +2 -2
- data/lib/mailshield.rb +18 -19
- metadata +18 -4
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 362dd7a7c8a948582fdffea7fdc081da39461f3711e247a2cd79afa88d6635c8
|
|
4
|
+
data.tar.gz: 151d0b56d0f2bcbfacab22f427b2bc9712b543b4c6f49c72c9f634b0100f693b
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
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
|
|
91
|
-
|
|
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
|
data/lib/mailshield/version.rb
CHANGED
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,
|
|
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
|
-
|
|
81
|
-
Resolv::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
|
-
|
|
101
|
-
Resolv::DNS
|
|
102
|
-
|
|
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 =
|
|
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.
|
|
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
|
-
|
|
14
|
-
|
|
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: []
|