mailshield 0.1.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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: b14ffd727fa0a54fbce427772f17317f28743bdcd87ec2f204bf89fc25530f3e
4
+ data.tar.gz: 6e593d1bac55e212d43d875692a2ae9d6ae10a451409e779f188531849bdac78
5
+ SHA512:
6
+ metadata.gz: 7bff616725f5ee9c1ea1d8cf49777ad6a0e83915bf1e48639e771785b84df7e0cd3db9f55aa7093477cee93fdaf93c241c3b475d3c159f1dd31cfb95afbf7ce4
7
+ data.tar.gz: acd38d78a78e94edf2df0e8f17b5debe32aca7ce17d2657df69323ff9909fa4c72f2f9d3023c3a937f535a12242525fc9ebf54209159fcacf5790b9ccb5e3fc7
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Mailshield
4
+ VERSION = "0.1.0"
5
+ end
data/lib/mailshield.rb ADDED
@@ -0,0 +1,64 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "mailshield/version"
4
+ require 'resolv'
5
+
6
+ module MailShield
7
+ class DomainChecker
8
+ TEMP_DOMAINS = %w[mailinator.com tempmail.com guerrillamail.com].freeze # If any one want to contribute, please add the known more domains here.
9
+
10
+ def self.temporary_email?(email)
11
+ domain = extract_domain(email)
12
+ return true if known_temp_domain?(domain)
13
+
14
+ mx_records = fetch_mx_records(domain)
15
+ return true if suspicious_mx_records?(mx_records)
16
+
17
+ return true unless spf_record?(domain)
18
+ return true unless dmarc_record?(domain)
19
+
20
+ false
21
+ end
22
+
23
+ def self.extract_domain(email)
24
+ email.split('@').last.downcase
25
+ end
26
+
27
+ def self.known_temp_domain?(domain)
28
+ TEMP_DOMAINS.include?(domain)
29
+ end
30
+
31
+ def self.fetch_mx_records(domain)
32
+ Resolv::DNS.open do |dns|
33
+ mx_records = dns.getresources(domain, Resolv::DNS::Resource::IN::MX)
34
+ mx_records.map(&:exchange).map(&:to_s)
35
+ end
36
+ rescue Resolv::ResolvError
37
+ []
38
+ end
39
+
40
+ def self.suspicious_mx_records?(mx_records)
41
+ suspicious_patterns = [/mailinator/, /tempmail/, /guerrillamail/]
42
+ mx_records.any? { |mx| suspicious_patterns.any? { |pattern| mx.match?(pattern) } }
43
+ end
44
+
45
+ def self.spf_record?(domain)
46
+ spf_records = fetch_txt_records(domain)
47
+ spf_records.any? { |record| record.include?('v=spf1') }
48
+ end
49
+
50
+ def self.dmarc_record?(domain)
51
+ dmarc_records = fetch_txt_records("_dmarc.#{domain}")
52
+ dmarc_records.any? { |record| record.include?('v=DMARC1') }
53
+ end
54
+
55
+ def self.fetch_txt_records(domain)
56
+ Resolv::DNS.open do |dns|
57
+ records = dns.getresources(domain, Resolv::DNS::Resource::IN::TXT)
58
+ records.map(&:data)
59
+ end
60
+ rescue Resolv::ResolvError
61
+ []
62
+ end
63
+ end
64
+ end
metadata ADDED
@@ -0,0 +1,50 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: mailshield
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - jana
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2024-08-25 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: MailShield helps secure your application by identifying temporary or
14
+ disposable email domains.
15
+ email:
16
+ - shanmugamjanarthan24@gmail.com
17
+ executables: []
18
+ extensions: []
19
+ extra_rdoc_files: []
20
+ files:
21
+ - lib/mailshield.rb
22
+ - lib/mailshield/version.rb
23
+ homepage: https://github.com/janarthanan-shanmugam/mailshield
24
+ licenses:
25
+ - MIT
26
+ metadata:
27
+ allowed_push_host: https://rubygems.org
28
+ homepage_uri: https://github.com/janarthanan-shanmugam/mailshield
29
+ source_code_uri: https://github.com/janarthanan-shanmugam/mailshield
30
+ changelog_uri: https://github.com/janarthanan-shanmugam/mailshield
31
+ post_install_message:
32
+ rdoc_options: []
33
+ require_paths:
34
+ - lib
35
+ required_ruby_version: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '2.5'
40
+ required_rubygems_version: !ruby/object:Gem::Requirement
41
+ requirements:
42
+ - - ">="
43
+ - !ruby/object:Gem::Version
44
+ version: '0'
45
+ requirements: []
46
+ rubygems_version: 3.5.11
47
+ signing_key:
48
+ specification_version: 4
49
+ summary: A gem to detect temporary or disposable email domains.
50
+ test_files: []