email_data 1695515208.0.0 → 1696494936.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/sync-disposable-emails +34 -42
- data/data/disposable_domains.txt +74 -9
- data/data/disposable_domains_with_mx.txt +601 -1645
- data/data/disposable_domains_without_mx.txt +110335 -109226
- data/data/manual/private_relays.txt +24 -0
- data/data/private_relays.txt +25 -1
- data/data/slds.txt +3 -11
- data/lib/email_data/version.rb +1 -1
- data/package.json +1 -1
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dc7d733def2f25edc5dcc8d5a5e820c401d70436970a70b9415c250235da3987
|
4
|
+
data.tar.gz: df619aeabcad30a2a2e97d7797384cabd3649d9c63e57309b2222f87e6b6f592
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b504123b4406a743856579e0651b7cb97ef1d01f71f4586999aaefcb324545e1bc0dc5e282043f4a1683d34b40fb8cb84ea6342b767b5e5d115424fbebb091b8
|
7
|
+
data.tar.gz: 7f34fedf68084e9d714579d615ea10f16f7805c9cacdf19bfe783a89a8d71b5a7ae36beb37e9077cfa66471be0755b1784ae2a79e57aebc992a5d76c674fc93b
|
data/bin/sync-disposable-emails
CHANGED
@@ -3,30 +3,6 @@
|
|
3
3
|
|
4
4
|
require_relative "helpers"
|
5
5
|
|
6
|
-
def ten_minute_mail
|
7
|
-
path = "disposable/10minutemail.txt"
|
8
|
-
url = "https://10minutemail.com/session/address"
|
9
|
-
|
10
|
-
20.times do
|
11
|
-
refresh_list(url: url, path: path) do |response|
|
12
|
-
_account, host = response.data.fetch("address").split("@")
|
13
|
-
|
14
|
-
[host]
|
15
|
-
end
|
16
|
-
|
17
|
-
sleep random_timeout
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
def temp_mail
|
22
|
-
path = "disposable/tempmail.txt"
|
23
|
-
url = "https://api4.temp-mail.org/request/domains/format/json"
|
24
|
-
|
25
|
-
refresh_list(url: url, path: path) do |response|
|
26
|
-
response.data.map {|domain| domain.tr("@", "") }
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
6
|
def temp_mail_address
|
31
7
|
path = "disposable/tempmailaddress.txt"
|
32
8
|
url = "https://www.tempmailaddress.com/index/index"
|
@@ -45,7 +21,16 @@ def tempmail_io
|
|
45
21
|
url = "https://api.internal.temp-mail.io/api/v2/domains"
|
46
22
|
|
47
23
|
refresh_list(url: url, path: path) do |response|
|
48
|
-
response.data["domains"]
|
24
|
+
JSON.parse(response.data)["domains"]
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def moakt
|
29
|
+
path = "disposable/moakt.txt"
|
30
|
+
url = "https://www.moakt.com/"
|
31
|
+
|
32
|
+
refresh_list(url: url, path: path) do |response|
|
33
|
+
response.data.dig("data", "hostnames") || []
|
49
34
|
end
|
50
35
|
end
|
51
36
|
|
@@ -58,7 +43,9 @@ def gmailnator
|
|
58
43
|
|
59
44
|
response = Aitch.get(url: url, headers: default_headers)
|
60
45
|
|
61
|
-
|
46
|
+
unless response.ok?
|
47
|
+
throw "Received #{response.status} when getting CSRF token"
|
48
|
+
end
|
62
49
|
|
63
50
|
cookie_header = response.headers["set-cookie"]
|
64
51
|
attr = response.data.css("#csrf_token").first
|
@@ -102,8 +89,10 @@ def domain_scraping(name, url, selector)
|
|
102
89
|
new_domains = new_domains
|
103
90
|
.map(&:squish)
|
104
91
|
.reject(&:empty?)
|
105
|
-
.
|
106
|
-
|
92
|
+
.filter_map do |domain|
|
93
|
+
domain[host_regex,
|
94
|
+
1]&.squish&.tr("@", "")
|
95
|
+
end
|
107
96
|
.reject(&:empty?)
|
108
97
|
.map {|domain| domain.gsub(/\s*\((.*?)\)/, "") }
|
109
98
|
|
@@ -132,7 +121,9 @@ def process_scraping(element, value_selector)
|
|
132
121
|
end
|
133
122
|
end
|
134
123
|
|
135
|
-
|
124
|
+
unless value
|
125
|
+
raise "no value found: #{element} (value_selector: #{value_selector})"
|
126
|
+
end
|
136
127
|
|
137
128
|
value
|
138
129
|
end
|
@@ -147,25 +138,24 @@ threads << thread { load_github_url("https://raw.githubusercontent.com/maxmalysh
|
|
147
138
|
threads << thread { load_github_url("https://raw.githubusercontent.com/jespernissen/disposable-maildomain-list/master/disposable-maildomain-list.txt") }
|
148
139
|
threads << thread { load_github_url("https://raw.githubusercontent.com/wesbos/burner-email-providers/master/emails.txt") }
|
149
140
|
threads << thread { load_github_url("https://gist.github.com/fnando/dafe542cac13f831bbf5521a55248116/raw/disposable.txt") }
|
150
|
-
threads << thread { ten_minute_mail }
|
151
|
-
threads << thread { temp_mail }
|
152
141
|
threads << thread { temp_mail_address }
|
153
142
|
threads << thread { tempmail_io }
|
143
|
+
threads << thread { moakt }
|
154
144
|
threads << thread { load_file("disposable/disposable_manually_added.txt") }
|
145
|
+
|
146
|
+
10.times do
|
147
|
+
threads << thread { domain_scraping("10minutemail", "https://10minutemail.net/?lang=en", "#fe_text::attr(value)") }
|
148
|
+
end
|
149
|
+
|
150
|
+
threads << thread { domain_scraping("forwardemail", "https://forwardemail.net/en/disposable-addresses", "code::text()") }
|
155
151
|
threads << thread { domain_scraping("guerrillamail", "https://www.guerrillamail.com/", "select option::attr(value)") }
|
156
|
-
threads << thread { domain_scraping("moakt", "https://www.moakt.com", "select option::attr(value)") }
|
157
152
|
threads << thread { domain_scraping("tempr", "https://tempr.email/", "select[name=DomainId] option::text()") }
|
158
|
-
threads << thread { domain_scraping("yepmail", "https://yepmail.co/", "select[name=domain] option::text()") }
|
159
153
|
threads << thread { domain_scraping("fake_email_generator", "https://fakemailgenerator.net", "[data-mailhost]::attr(data-mailhost)") }
|
160
|
-
threads << thread { domain_scraping("tempemails", "https://www.tempemails.net/", "select[name=domain] option::attr(value)") }
|
161
|
-
threads << thread { domain_scraping("clipmails", "https://clipmails.com/", ".domain-selector::text()") }
|
162
154
|
threads << thread { domain_scraping("1secmail", "https://www.1secmail.com/", "select[id=domain] option::attr(value)") }
|
163
155
|
threads << thread { domain_scraping("emailfake", "https://generator.email", ".tt-suggestion p::text()") }
|
164
156
|
threads << thread { domain_scraping("emailfake", "https://emailfake.com/", ".tt-suggestion p::text()") }
|
165
157
|
threads << thread { domain_scraping("emailfake", "https://email-fake.com/", ".tt-suggestion p::text()") }
|
166
158
|
threads << thread { domain_scraping("receivemail", "https://www.receivemail.org/", "select[name=domain] option::text()") }
|
167
|
-
threads << thread { domain_scraping("itemp", "https://itemp.email", "select[name=domain] option::text()") }
|
168
|
-
threads << thread { domain_scraping("cs", "https://www.cs.email", "select[id=gm-host-select] option::text()") }
|
169
159
|
threads << thread { domain_scraping("tempmail", "https://tempmail.io/settings/", "select[id=domain] option::text()") }
|
170
160
|
threads << thread { domain_scraping("tempemail", "https://tempemail.co", "select[name=email_domain] option::text()") }
|
171
161
|
|
@@ -194,14 +184,17 @@ Dir["./data/disposable/**/*.txt"].map do |file|
|
|
194
184
|
end
|
195
185
|
|
196
186
|
ignore_domains = normalize_list(File.read("#{__dir__}/../data/free_email_domains.txt").lines)
|
197
|
-
.map
|
187
|
+
.map do |domain|
|
188
|
+
RootDomain.call(domain)
|
189
|
+
end
|
198
190
|
ignore_domains += normalize_list(File.read("#{__dir__}/../data/private_relays.txt").lines)
|
199
|
-
.map
|
191
|
+
.map do |line|
|
192
|
+
RootDomain.call(line)
|
193
|
+
end
|
200
194
|
|
201
195
|
puts "=> Normalize domains (count: #{domains.size})"
|
202
196
|
domains = domains
|
203
|
-
.
|
204
|
-
.compact
|
197
|
+
.filter_map {|domain| RootDomain.call(domain.split("@").last.downcase) }
|
205
198
|
.uniq
|
206
199
|
.select {|domain| EmailData.tlds.include?(domain.split(".").last) }
|
207
200
|
|
@@ -210,6 +203,5 @@ save_file("disposable_domains.txt", domains - ignore_domains)
|
|
210
203
|
|
211
204
|
emails = normalize_list(File.read("#{__dir__}/../data/manual/disposable_emails.txt").lines)
|
212
205
|
emails += normalize_list(File.read("#{__dir__}/../data/disposable_emails.txt").lines)
|
213
|
-
emails += gmailnator
|
214
206
|
puts "=> Saving email proxies (count: #{emails.size})"
|
215
207
|
save_file("disposable_emails.txt", emails)
|