├── requirements.txt ├── .gitattributes ├── .idea └── vcs.xml ├── sources.txt ├── LICENSE ├── run.sh ├── README.md ├── test.py ├── .gitignore ├── main.py └── allowlist.txt /requirements.txt: -------------------------------------------------------------------------------- 1 | requests==2.32.4 2 | validators==0.20.0 3 | dnspython==2.6.1 -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /sources.txt: -------------------------------------------------------------------------------- 1 | https://raw.githubusercontent.com/ivolo/disposable-email-domains/master/index.json 2 | https://raw.githubusercontent.com/ivolo/disposable-email-domains/master/wildcard.json 3 | https://raw.githubusercontent.com/martenson/disposable-email-domains/master/disposable_email_blocklist.conf 4 | https://github.com/GeroldSetz/emailondeck.com-domains/raw/master/emailondeck.com_domains_from_bdea.cc.txt 5 | https://www.stopforumspam.com/downloads/toxic_domains_whole.txt 6 | https://github.com/zaosoula/email-spam-domains/raw/master/src/custom.txt 7 | https://raw.githubusercontent.com/FGRibreau/mailchecker/master/list.txt 8 | https://raw.githubusercontent.com/disposable-email-domains/disposable-email-domains/master/disposable_email_blocklist.conf 9 | https://raw.githubusercontent.com/disposable/disposable/master/blacklist.txt -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 yzyjim 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /run.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Setup environment 4 | source /home/emailabuseverify/virtualenv/disposable-email-domain-list/3.8/bin/activate && cd /home/emailabuseverify/disposable-email-domain-list 5 | # pip install -r requirements.txt 6 | 7 | # run python script 8 | python3 main.py 9 | 10 | # # Check if the domains.txt has at least 1000 lines 11 | lines=$(wc -l < domains.txt) 12 | if [ $lines -lt 1000 ]; then 13 | echo "domains.txt does not have at least 1000 rows. Exiting..." 14 | exit 1 15 | fi 16 | 17 | # Git commit and push 18 | timestamp=$(date) 19 | #cd /path/to/your/repository 20 | 21 | # Set GIT credentials (replace with your own) 22 | git config --global user.name "Auto Updater" 23 | git config --global user.email "" 24 | 25 | export GIT_USERNAME="" 26 | export GIT_TOKEN="" # your personal access token 27 | 28 | git fetch https://$GIT_USERNAME:$GIT_TOKEN@github.com/groundcat/disposable-email-domain-list.git 29 | 30 | # Commit changes 31 | git add domains.txt 32 | git add domains.json 33 | git commit -m "[$timestamp] - MX validated and updated domains" 34 | 35 | # Set remote URL with access token 36 | git remote set-url origin https://$GIT_USERNAME:$GIT_TOKEN@github.com/groundcat/disposable-email-domain-list.git 37 | 38 | # Push to GitHub 39 | git push origin master 40 | 41 | echo "Updated domains.txt committed and pushed to repository." 42 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Disposable Email Domain List 2 | 3 | This is a list of domains frequently associated with disposable email services. 4 | 5 | This list undergoes regular updates and validation through an MX scan. 6 | 7 | ## Download 8 | 9 | [TXT format](https://github.com/groundcat/disposable-email-domain-list/raw/master/domains.txt) 10 | 11 | [JSON format](https://github.com/groundcat/disposable-email-domain-list/raw/master/domains.json) 12 | 13 | ## What is a disposable email? 14 | 15 | A [disposable email address](http://en.wikipedia.org/wiki/Disposable_email_address), often referred to as DEA, is a type of service that creates unique or random email addresses for each use or entity. Disposable email addresses are typically used only once and are not intended for receiving future emails. 16 | 17 | While disposable email addresses can be used for spam, they also serve legitimate purposes. Some users employ them to protect their privacy or to manage their online identities. As such, the use of disposable email addresses isn't inherently negative or malicious. 18 | 19 | The repository herein contains a collection of domains associated with active disposable email services, validated at the time of the scan. Administrators might use this list to mitigate potential risks or to ensure that their users are capable of receiving future communications, when it is a crucial aspect of the service provided. 20 | 21 | ## Sources 22 | 23 | The raw data is compiled from these [sources](https://github.com/groundcat/disposable-email-domain-list/blob/master/sources.txt). 24 | 25 | ## Usage 26 | 27 | Install Python packages: 28 | 29 | pip3 install -r requirements.txt 30 | 31 | Run the script: 32 | 33 | python3 main.py 34 | 35 | ## Contribution 36 | 37 | While this repository doesn't accept direct contributions of new domains (as it gathers and cleanses data from the listed sources), you can contribute to the community's efforts by adding new disposable domains to ivolo's [disposable-email-domains](https://github.com/ivolo/disposable-email-domains) repository. Please refer to its [contributing section](https://github.com/ivolo/disposable-email-domains#contributing) for more details. 38 | 39 | ## License 40 | 41 | This project is licensed under the MIT License - read the [LICENSE](LICENSE) file for details. -------------------------------------------------------------------------------- /test.py: -------------------------------------------------------------------------------- 1 | import unittest 2 | from unittest.mock import patch, MagicMock, call 3 | import json 4 | 5 | import dns 6 | 7 | from main import DomainChecker 8 | 9 | 10 | class TestDomainChecker(unittest.TestCase): 11 | def setUp(self): 12 | self.sources = ["https://gist.githubusercontent.com/groundcat/6f58b8d66eff3288fc4b745a55d4b437/raw/5a61ede3461774a6a2c7d74a13696e8cf7b7dfa5/domains.json", 13 | "https://gist.githubusercontent.com/groundcat/6f58b8d66eff3288fc4b745a55d4b437/raw/5a61ede3461774a6a2c7d74a13696e8cf7b7dfa5/domains.txt"] 14 | self.domains = ["temp-mail.org", "10mail.org"] 15 | self.dummy_json_domains = json.dumps(["33mail.com", "567map.xyz"]) 16 | self.checker = DomainChecker(self.sources) 17 | 18 | @patch('requests.get') 19 | def test_fetch_domains(self, mock_get): 20 | # Mock the response from requests.get 21 | mock_response = MagicMock() 22 | mock_response.status_code = 200 23 | mock_response.text = '\n'.join(self.domains) 24 | mock_get.return_value = mock_response 25 | 26 | self.checker.fetch_domains() 27 | 28 | # Verify if domains were added correctly 29 | self.assertEqual(self.checker.domains, set(self.domains)) 30 | 31 | @patch.object(dns.resolver.Resolver, 'resolve') 32 | def test_check_mx_record(self, mock_resolve): 33 | # Mock the behavior of dns.resolver.Resolver.resolve 34 | mock_resolve.return_value = [MagicMock()] 35 | 36 | # Test if the method returns True when there are MX records 37 | self.assertTrue(self.checker.check_mx_record('temp-mail.org', '1.1.1.1')) 38 | 39 | # Test if the method returns False when there are no MX records 40 | mock_resolve.return_value = [] 41 | self.assertFalse(self.checker.check_mx_record('invalid-domain-138729817.com', '8.8.8.8')) 42 | 43 | @patch.object(DomainChecker, 'check_mx_record') 44 | @patch('concurrent.futures.ThreadPoolExecutor.submit') 45 | def test_filter_domains(self, mock_submit, mock_check_mx): 46 | # Mock the behavior of ThreadPoolExecutor.submit and check_mx_record 47 | mock_submit.return_value.result.return_value = True 48 | mock_check_mx.return_value = True 49 | 50 | self.checker.domains = set(self.domains) 51 | self.checker.filter_domains() 52 | 53 | # Verify if all domains have been validated and added to valid_domains 54 | self.assertEqual(self.checker.domains, self.checker.valid_domains) 55 | 56 | @patch('builtins.open') 57 | @patch('logging.info') 58 | def test_write_domains(self, mock_log, mock_open): 59 | # Mock the behavior of open and logging.info 60 | mock_file = MagicMock() 61 | mock_open.return_value.__enter__.return_value = mock_file 62 | 63 | self.checker.valid_domains = set(self.domains) 64 | self.checker.write_domains() 65 | 66 | # Verify if all domains have been written to the file 67 | calls = [call.write(f"{domain}\n") for domain in self.checker.valid_domains] 68 | mock_file.assert_has_calls(calls, any_order=True) 69 | 70 | # Verify if the log written contains "Completed" 71 | mock_log.assert_called_with("Complete. In total 2 valid domains written to domains.txt") 72 | 73 | if __name__ == "__main__": 74 | unittest.main() 75 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | *.xml 3 | .DS_Store 4 | .idea/vcs.xml 5 | cron.sh 6 | 7 | # Byte-compiled / optimized / DLL files 8 | __pycache__/ 9 | *.py[cod] 10 | *$py.class 11 | 12 | # C extensions 13 | *.so 14 | 15 | # Distribution / packaging 16 | .Python 17 | build/ 18 | develop-eggs/ 19 | dist/ 20 | downloads/ 21 | eggs/ 22 | .eggs/ 23 | lib/ 24 | lib64/ 25 | parts/ 26 | sdist/ 27 | var/ 28 | wheels/ 29 | share/python-wheels/ 30 | *.egg-info/ 31 | .installed.cfg 32 | *.egg 33 | MANIFEST 34 | 35 | # PyInstaller 36 | # Usually these files are written by a python script from a template 37 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 38 | *.manifest 39 | *.spec 40 | 41 | # Installer logs 42 | pip-log.txt 43 | pip-delete-this-directory.txt 44 | 45 | # Unit test / coverage reports 46 | htmlcov/ 47 | .tox/ 48 | .nox/ 49 | .coverage 50 | .coverage.* 51 | .cache 52 | nosetests.xml 53 | coverage.xml 54 | *.cover 55 | *.py,cover 56 | .hypothesis/ 57 | .pytest_cache/ 58 | cover/ 59 | 60 | # Translations 61 | *.mo 62 | *.pot 63 | 64 | # Django stuff: 65 | *.log 66 | local_settings.py 67 | db.sqlite3 68 | db.sqlite3-journal 69 | 70 | # Flask stuff: 71 | instance/ 72 | .webassets-cache 73 | 74 | # Scrapy stuff: 75 | .scrapy 76 | 77 | # Sphinx documentation 78 | docs/_build/ 79 | 80 | # PyBuilder 81 | .pybuilder/ 82 | target/ 83 | 84 | # Jupyter Notebook 85 | .ipynb_checkpoints 86 | 87 | # IPython 88 | profile_default/ 89 | ipython_config.py 90 | 91 | # pyenv 92 | # For a library or package, you might want to ignore these files since the code is 93 | # intended to run in multiple environments; otherwise, check them in: 94 | # .python-version 95 | 96 | # pipenv 97 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. 98 | # However, in case of collaboration, if having platform-specific dependencies or dependencies 99 | # having no cross-platform support, pipenv may install dependencies that don't work, or not 100 | # install all needed dependencies. 101 | #Pipfile.lock 102 | 103 | # poetry 104 | # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. 105 | # This is especially recommended for binary packages to ensure reproducibility, and is more 106 | # commonly ignored for libraries. 107 | # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control 108 | #poetry.lock 109 | 110 | # pdm 111 | # Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control. 112 | #pdm.lock 113 | # pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it 114 | # in version control. 115 | # https://pdm.fming.dev/#use-with-ide 116 | .pdm.toml 117 | 118 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm 119 | __pypackages__/ 120 | 121 | # Celery stuff 122 | celerybeat-schedule 123 | celerybeat.pid 124 | 125 | # SageMath parsed files 126 | *.sage.py 127 | 128 | # Environments 129 | .env 130 | .venv 131 | env/ 132 | venv/ 133 | ENV/ 134 | env.bak/ 135 | venv.bak/ 136 | 137 | # Spyder project settings 138 | .spyderproject 139 | .spyproject 140 | 141 | # Rope project settings 142 | .ropeproject 143 | 144 | # mkdocs documentation 145 | /site 146 | 147 | # mypy 148 | .mypy_cache/ 149 | .dmypy.json 150 | dmypy.json 151 | 152 | # Pyre type checker 153 | .pyre/ 154 | 155 | # pytype static type analyzer 156 | .pytype/ 157 | 158 | # Cython debug symbols 159 | cython_debug/ 160 | 161 | # PyCharm 162 | # JetBrains specific template is maintained in a separate JetBrains.gitignore that can 163 | # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore 164 | # and can be added to the global gitignore or merged into this file. For a more nuclear 165 | # option (not recommended) you can uncomment the following to ignore the entire idea folder. 166 | .idea/ 167 | 168 | prod/ -------------------------------------------------------------------------------- /main.py: -------------------------------------------------------------------------------- 1 | import requests 2 | import json 3 | import logging 4 | import dns.resolver 5 | from concurrent.futures import ThreadPoolExecutor 6 | import os 7 | from collections import deque 8 | 9 | logging.basicConfig(format='%(asctime)s %(message)s', filename="validation.log", level=logging.INFO) 10 | 11 | 12 | class DomainChecker: 13 | def __init__(self, sources): 14 | self.sources = sources 15 | self.domains = set() 16 | self.valid_domains = set() 17 | self.dns_servers = ["1.1.1.1", "8.8.8.8", "8.8.4.4", "1.0.0.1", "9.9.9.9"] 18 | self.allowlist = set() 19 | 20 | def fetch_domains(self): 21 | for source in self.sources: 22 | try: 23 | response = requests.get(source) 24 | if response.status_code == 200: 25 | content = response.text.strip() 26 | if source.endswith('.json'): 27 | domains = json.loads(content) 28 | else: 29 | domains = content.splitlines() 30 | self.domains.update(domains) 31 | logging.info(f"Successfully fetched {len(domains)} domains from {source} ") 32 | else: 33 | logging.info(f"{response.status_code} - Could not fetch data from {source}") 34 | except Exception as e: 35 | logging.info(f"Exception occurred while fetching data from {source}: {str(e)}") 36 | 37 | def fetch_allowlist(self): 38 | try: 39 | with open('allowlist.txt', 'r') as f: 40 | self.allowlist = set(f.read().splitlines()) 41 | except Exception as e: 42 | logging.info(f"Exception occurred while reading the allowlist: {str(e)}") 43 | 44 | def check_mx_record(self, domain, server): 45 | resolver = dns.resolver.Resolver() 46 | resolver.nameservers = [server] 47 | try: 48 | mx_records = resolver.resolve(domain, 'MX') 49 | if mx_records: 50 | return True 51 | except: 52 | return False 53 | 54 | def filter_domains(self): 55 | with ThreadPoolExecutor(max_workers=5) as executor: 56 | for i, domain in enumerate(self.domains): 57 | server = self.dns_servers[i % 5] 58 | if executor.submit(self.check_mx_record, domain, server).result(): 59 | self.valid_domains.add(domain) 60 | 61 | def exclude_allowlisted_domains(self): 62 | self.valid_domains -= self.allowlist 63 | 64 | def write_domains(self): 65 | with open('domains.txt', 'w') as f: 66 | for domain in self.valid_domains: 67 | f.write(f"{domain}\n") 68 | logging.info(f"Complete. In total {len(self.valid_domains)} valid domains written to domains.txt") 69 | 70 | def write_domains_json(self): 71 | with open('domains.json', 'w') as f: 72 | json.dump(list(self.valid_domains), f) 73 | logging.info(f"Complete. In total {len(self.valid_domains)} valid domains written to domains.json") 74 | 75 | def prune_log(self): 76 | try: 77 | with open('validation.log', 'r') as f: 78 | lines = deque(f, 50) 79 | with open('validation.log', 'w') as f: 80 | f.writelines(lines) 81 | except FileNotFoundError: 82 | logging.info("validation.log file not found") 83 | 84 | def run(self): 85 | self.fetch_domains() 86 | self.fetch_allowlist() 87 | self.filter_domains() 88 | self.exclude_allowlisted_domains() 89 | self.write_domains() 90 | self.write_domains_json() 91 | self.prune_log() 92 | 93 | 94 | if __name__ == "__main__": 95 | 96 | sources = [] 97 | with open('sources.txt', 'r') as f: 98 | for line in f: 99 | sources.append(line.strip()) 100 | 101 | checker = DomainChecker(sources) 102 | checker.run() 103 | -------------------------------------------------------------------------------- /allowlist.txt: -------------------------------------------------------------------------------- 1 | 123mail.org 2 | 126.com 3 | 139.com 4 | 150mail.com 5 | 150ml.com 6 | 163.com 7 | 16mail.com 8 | 188.com 9 | 2-mail.com 10 | 21cn.com 11 | 420blaze.it 12 | 4email.net 13 | 50mail.com 14 | 8alias.com 15 | 8chan.co 16 | 8shield.net 17 | aaathats3as.com 18 | aim.com 19 | airmail.cc 20 | airpost.net 21 | aleeas.com 22 | allmail.net 23 | amorki.pl 24 | anonaddy.com 25 | anonaddy.me 26 | antichef.com 27 | antichef.net 28 | aol.com 29 | asics.com 30 | benilde.edu.ph 31 | bestmail.us 32 | bk.ru 33 | blu.it 34 | bluewin.ch 35 | brainonfire.net 36 | btinternet.com 37 | c2.hu 38 | caramail.com 39 | cluemail.com 40 | cocaine.ninja 41 | cock.email 42 | cock.li 43 | cock.lu 44 | com.ar 45 | cumallover.me 46 | dfgh.net 47 | dicksinhisan.us 48 | dicksinmyan.us 49 | dr.com 50 | dralias.com 51 | duck.com 52 | elitemail.org 53 | emailcorner.net 54 | emailengine.net 55 | emailengine.org 56 | emailgroups.net 57 | emailplus.org 58 | emailuser.net 59 | eml.cc 60 | example.com 61 | example.net 62 | example.org 63 | exclusivemail.co.za 64 | executive.co.za 65 | f-m.fm 66 | fast-email.com 67 | fast-mail.org 68 | fastem.com 69 | fastemail.us 70 | fastemailer.com 71 | fastest.cc 72 | fastimap.com 73 | fastmail.cn 74 | fastmail.co.uk 75 | fastmail.com 76 | fastmail.com.au 77 | fastmail.es 78 | fastmail.fm 79 | fastmail.im 80 | fastmail.in 81 | fastmail.jp 82 | fastmail.mx 83 | fastmail.net 84 | fastmail.nl 85 | fastmail.se 86 | fastmail.to 87 | fastmail.tw 88 | fastmail.uk 89 | fastmail.us 90 | fastmailbox.net 91 | fastmessaging.com 92 | fea.st 93 | firemail.cc 94 | fmail.co.uk 95 | fmailbox.com 96 | fmgirl.com 97 | fmguy.com 98 | free.fr 99 | freemail.hu 100 | ftml.net 101 | getbackinthe.kitchen 102 | gmail.com 103 | gmx.at 104 | gmx.com 105 | gmx.de 106 | gmx.net 107 | gmx.us 108 | goat.si 109 | googlemail.com 110 | h-mail.us 111 | hailmail.net 112 | hanmail.net 113 | hash.fyi 114 | hey.com 115 | hideaddress.net 116 | hitler.rocks 117 | home.de 118 | homemail.co.za 119 | horsefucker.org 120 | hotmail.be 121 | hotmail.ca 122 | hotmail.cl 123 | hotmail.co.id 124 | hotmail.co.il 125 | hotmail.co.in 126 | hotmail.co.kr 127 | hotmail.co.th 128 | hotmail.co.uk 129 | hotmail.co.za 130 | hotmail.com 131 | hotmail.com.ar 132 | hotmail.com.au 133 | hotmail.com.br 134 | hotmail.com.hk 135 | hotmail.com.tr 136 | hotmail.com.tw 137 | hotmail.com.vn 138 | hotmail.cz 139 | hotmail.de 140 | hotmail.dk 141 | hotmail.es 142 | hotmail.fi 143 | hotmail.fr 144 | hotmail.gr 145 | hotmail.hu 146 | hotmail.ie 147 | hotmail.it 148 | hotmail.lt 149 | hotmail.lv 150 | hotmail.my 151 | hotmail.nl 152 | hotmail.no 153 | hotmail.se 154 | hotmail.sg 155 | hotmail.sk 156 | hush.ai 157 | hush.com 158 | hushmail.com 159 | hushmail.me 160 | i.ua 161 | icam.fr 162 | icloud.com 163 | imap.cc 164 | imapmail.org 165 | inbox.ru 166 | inoutbox.com 167 | internet-e-mail.com 168 | internet-mail.org 169 | internetemails.net 170 | internetmailing.net 171 | iol.it 172 | jetemail.net 173 | justemail.net 174 | lendscape.com 175 | letterboxes.org 176 | libero.it 177 | list.ru 178 | live.at 179 | live.be 180 | live.ca 181 | live.cl 182 | live.cn 183 | live.co.kr 184 | live.co.uk 185 | live.co.za 186 | live.com 187 | live.com.ar 188 | live.com.au 189 | live.com.my 190 | live.com.ph 191 | live.com.pt 192 | live.com.sg 193 | live.de 194 | live.dk 195 | live.fi 196 | live.fr 197 | live.hk 198 | live.ie 199 | live.in 200 | live.it 201 | live.jp 202 | live.lt 203 | live.nl 204 | live.no 205 | live.ru 206 | live.se 207 | livemail.tw 208 | lycos.at 209 | lycos.co.uk 210 | lycos.de 211 | lycos.es 212 | lycos.it 213 | lycos.nl 214 | magicmail.co.za 215 | mail-central.com 216 | mail-page.com 217 | mail.com 218 | mail.htl22.at 219 | mail.ru 220 | mail2world.com 221 | mailandftp.com 222 | mailas.com 223 | mailbolt.com 224 | mailbox.co.za 225 | mailc.net 226 | mailcan.com 227 | mailforce.net 228 | mailftp.com 229 | mailhaven.com 230 | mailingaddress.org 231 | mailite.com 232 | mailmight.com 233 | mailnew.com 234 | mailsent.net 235 | mailservice.ms 236 | mailsire.com 237 | mailup.net 238 | mailworks.org 239 | me.com 240 | memeware.net 241 | mindless.com 242 | ml1.net 243 | mm.st 244 | mozmail.com 245 | msn.co.uk 246 | msn.com 247 | myfastmail.com 248 | mymacmail.com 249 | myyahoo.com 250 | naver.com 251 | netscape.com 252 | netscape.net 253 | neverbox.com 254 | nigge.rs 255 | nospammail.net 256 | nus.edu.sg 257 | nus.edu.sgimap-mail.com 258 | o2.pl 259 | onet.pl 260 | outlook.at 261 | outlook.be 262 | outlook.cl 263 | outlook.co.id 264 | outlook.co.il 265 | outlook.co.nz 266 | outlook.co.th 267 | outlook.com 268 | outlook.com.ar 269 | outlook.com.au 270 | outlook.com.br 271 | outlook.com.gr 272 | outlook.com.mx 273 | outlook.com.pe 274 | outlook.com.tr 275 | outlook.com.vn 276 | outlook.cz 277 | outlook.de 278 | outlook.dk 279 | outlook.es 280 | outlook.fr 281 | outlook.hu 282 | outlook.ie 283 | outlook.in 284 | outlook.it 285 | outlook.jp 286 | outlook.kr 287 | outlook.lv 288 | outlook.my 289 | outlook.ph 290 | outlook.pt 291 | outlook.rs 292 | outlook.sa 293 | outlook.sg 294 | outlook.sk 295 | ownmail.net 296 | passmail.com 297 | petml.com 298 | pm.me 299 | poczta.onet.pl 300 | postinbox.com 301 | postpro.net 302 | proinbox.com 303 | promessage.com 304 | proton.me 305 | protonmail.ch 306 | protonmail.com 307 | qq.com 308 | ravemail.co.za 309 | realemail.net 310 | reallyfast.biz 311 | reallyfast.info 312 | recursor.net 313 | redchan.it 314 | rediffmail.com 315 | relay.firefox.com 316 | riseup.net 317 | ruffrey.com 318 | rushpost.com 319 | safe-mail.net 320 | sent.as 321 | sent.at 322 | sent.com 323 | shitposting.agency 324 | shitware.nl 325 | sibmail.com 326 | silomails.com 327 | simplelogin.com 328 | simplelogin.fr 329 | sina.com 330 | slmail.me 331 | slmails.com 332 | sneakemail.com 333 | snkmail.com 334 | sohu.com 335 | spamcannon.com 336 | spamcannon.net 337 | spamgourmet.com 338 | spamgourmet.net 339 | spamgourmet.org 340 | speedpost.net 341 | speedymail.org 342 | ssl-mail.com 343 | starmail.co.za 344 | swatch.com 345 | swift-mail.com 346 | test.de 347 | tfwno.gf 348 | the-fastest.net 349 | the-quickest.com 350 | thecricket.co.za 351 | thegolf.co.za 352 | theinternetemail.com 353 | thepub.co.za 354 | therugby.co.za 355 | tom.com 356 | tweakly.net 357 | ubicloud.com 358 | ukr.net 359 | veryfast.biz 360 | veryspeedy.net 361 | waifu.club 362 | warpmail.net 363 | web.de 364 | webmail.co.za 365 | websurfer.co.za 366 | windowslive.com 367 | workmail.co.za 368 | writeme.com 369 | xmail.ru 370 | xoxy.net 371 | xsmail.com 372 | xwaretech.com 373 | xwaretech.info 374 | xwaretech.net 375 | xwaretech.tk 376 | yahoo.ca 377 | yahoo.co.in 378 | yahoo.co.jp 379 | yahoo.co.uk 380 | yahoo.com 381 | yahoo.com.ar 382 | yahoo.com.au 383 | yahoo.com.br 384 | yahoo.com.hk 385 | yahoo.com.mx 386 | yahoo.com.ph 387 | yahoo.com.sg 388 | yahoo.com.tw 389 | yahoo.com.vn 390 | yahoo.de 391 | yahoo.dk 392 | yahoo.es 393 | yahoo.fr 394 | yahoo.gr 395 | yahoo.ie 396 | yahoo.it 397 | yahoo.se 398 | yandex.ru 399 | yeah.net 400 | yepmail.net 401 | ymail.com 402 | your-mail.com 403 | zoho.com --------------------------------------------------------------------------------