Giter Club home page Giter Club logo

disposable-email-domains's Introduction

List of disposable email domains

Licensed under CC0

This repo contains a list of disposable and temporary email address domains often used to register dummy users in order to spam or abuse some services.

We cannot guarantee all of these can still be considered disposable but we do basic checking so chances are they were disposable at one point in time.

Allowlist

The file allowlist.conf gathers email domains that are often identified as disposable but in fact are not.

Contributing

Feel free to create PR with additions or request removal of some domain (with reasons).

Specifically, please cite in your PR where one can generate a disposable email address which uses that domain, so the maintainers can verify it.

Please add new disposable domains directly into disposable_email_blocklist.conf in the same format (only second level domains on new line without @), then run maintain.sh. The shell script will help you convert uppercase to lowercase, sort, remove duplicates and remove allowlisted domains.

Changelog

  • 2/11/21 We created a github org account and transferred the repository to it.

  • 4/18/19 @di joined as a core maintainer of this project. Thank you!

  • 7/31/17 @deguif joined as a core maintainer of this project. Thanks!

  • 12/6/16 - Available as PyPI module thanks to @di

  • 7/27/16 - Converted all domains to the second level. This means that starting from this commit the implementers should take care of matching the second level domain names properly i.e. @xxx.yyy.zzz should match yyy.zzz in blocklist more info in #46

Example Usage

TOC: Python, PHP, Go, Ruby on Rails, NodeJS, C#, bash, Java

Python

with open('disposable_email_blocklist.conf') as blocklist:
    blocklist_content = {line.rstrip() for line in blocklist.readlines()}
if email.partition('@')[2] in blocklist_content:
    message = "Please enter your permanent email address."
    return (False, message)
else:
    return True

Available as PyPI module thanks to @di

>>> from disposable_email_domains import blocklist
>>> 'bearsarefuzzy.com' in blocklist
True

PHP

contributed by @txt3rob, @deguif, @pjebs and @Wruczek

  1. Make sure the passed email is valid. You can check that with filter_var
  2. Make sure you have the mbstring extension installed on your server
function isDisposableEmail($email, $blocklist_path = null) {
    if (!$blocklist_path) $blocklist_path = __DIR__ . '/disposable_email_blocklist.conf';
    $disposable_domains = file($blocklist_path, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
    $domain = mb_strtolower(explode('@', trim($email))[1]);
    return in_array($domain, $disposable_domains);
}

Alternatively check out Composer package https://github.com/elliotjreed/disposable-emails-filter-php.

Go

contributed by @pjebs

import ("bufio"; "os"; "strings";)
var disposableList = make(map[string]struct{}, 3500)
func init() {
	f, _ := os.Open("disposable_email_blocklist.conf")
	for scanner := bufio.NewScanner(f); scanner.Scan(); {
		disposableList[scanner.Text()] = struct{}{}
	}
	f.Close()
}

func isDisposableEmail(email string) (disposable bool) {
	segs := strings.Split(email, "@")
	_, disposable = disposableList[strings.ToLower(segs[len(segs)-1])]
	return
}

Alternatively check out Go package https://github.com/rocketlaunchr/anti-disposable-email.

Ruby on Rails

contributed by @MitsunChieh

In the resource model, usually it is user.rb:

before_validation :reject_email_blocklist

def reject_email_blocklist
  blocklist = File.read('config/disposable_email_blocklist.conf').split("\n")

  if blocklist.include?(email.split('@')[1])
    errors[:email] << 'invalid email'
    return false
  else
    return true
  end
end

Alternatively you can use the disposable_mail gem: https://github.com/oesgalha/disposable_mail.

Node.js

contributed by @boywithkeyboard

import { readFile } from 'node:fs/promises'

let blocklist

async function isDisposable(email) {
  if (!blocklist) {
    const content = await readFile('disposable_email_blocklist.conf', { encoding: 'utf-8' })

    blocklist = content.split('\r\n').slice(0, -1)
  }

  return blocklist.includes(email.split('@')[1])
}

C#

private static readonly Lazy<HashSet<string>> _emailBlockList = new Lazy<HashSet<string>>(() =>
{
  var lines = File.ReadLines("disposable_email_blocklist.conf")
    .Where(line => !string.IsNullOrWhiteSpace(line) && !line.TrimStart().StartsWith("//"));
  return new HashSet<string>(lines, StringComparer.OrdinalIgnoreCase);
});

private static bool IsBlocklisted(string domain) => _emailBlockList.Value.Contains(domain);

...

var addr = new MailAddress(email);
if (IsBlocklisted(addr.Host)))
  throw new ApplicationException("Email is blocklisted.");

Bash

#!/bin/bash

# This script checks if an email address is temporary.

# Read blocklist file into a bash array
mapfile -t blocklist < disposable_email_blocklist.conf

# Check if email domain is in blocklist
if [[ " ${blocklist[@]} " =~ " ${email#*@} " ]]; then
    message="Please enter your permanent email address."
    return_value=false
else
    return_value=true
fi

# Return result
echo "$return_value"

Java

Code assumes that you have added disposable_email_blocklist.conf next to your class as classpath resource.

private static final Set<String> DISPOSABLE_EMAIL_DOMAINS;

static {
    Set<String> domains = new HashSet<>();
    try (BufferedReader in = new BufferedReader(
            new InputStreamReader(
                EMailChecker.class.getResourceAsStream("disposable_email_blocklist.conf"), StandardCharsets.UTF_8))) {
        String line;
        while ((line = in.readLine()) != null) {
            line = line.trim();
            if (line.isEmpty()) {
                continue;
            }
            
            domains.add(line);
        }
    } catch (IOException ex) {
        LOG.error("Failed to load list of disposable email domains.", ex);
    }
    DISPOSABLE_EMAIL_DOMAINS = domains;
}

public static boolean isDisposable(String email) throws AddressException {
    InternetAddress contact = new InternetAddress(email);
    return isDisposable(contact);
}

public static boolean isDisposable(InternetAddress contact) throws AddressException {
    String address = contact.getAddress();
    int domainSep = address.indexOf('@');
    String domain = (domainSep >= 0) ? address.substring(domainSep + 1) : address;
    return DISPOSABLE_EMAIL_DOMAINS.contains(domain);
}

disposable-email-domains's People

Contributors

alimagedayad avatar andrejfsantos avatar andrewvk avatar ar-anvd avatar boywithkeyboard avatar deguif avatar dewstar avatar di avatar germans avatar ginkoid avatar grj1234 avatar irvin avatar jodanjodan avatar john-scalingo avatar joshtronic avatar korko avatar martenson avatar martin-fogelman avatar mitsunchieh avatar mlavigne79 avatar mpstenson avatar nhosoya avatar philipto avatar russorat avatar subtosilencio avatar szepeviktor avatar tapac avatar xpirec avatar ym avatar zerozshadow avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

disposable-email-domains's Issues

Remove Sudo-related domains

I work for a company which runs MySudo, an app on the iOS App Store that allows users to create private emails and phone numbers. We own the following domains, which are in your disposable-email-domains repo:

sudolife.me
sudolife.net
sudomail.biz
sudomail.com
sudomail.net
sudoverse.com
sudoverse.net
sudoweb.net
sudoworld.com
sudoworld.net

We have made improvements to our app to limit the disposability of our email addresses (only paying users are allowed to use the app, we are working to limit the amount of email resets, etc.). Additionally, we have elaborate fraud monitoring, ensuring that our users are not spamming others. A significant amount of our users are reporting that their emails are getting blocked. We are working to clear our name from multiple blacklist providers, and noticed that several email providers rely on your repo. Can we work with you to remove our domains from your list of disposable email domains?

payperex2.com

Hello. Can't find if emails from this domain are disposable or not. Someone can give it a look?

does someone use this on laravel

Hello i need some help, on ho implement this wonderful repository on laravel.
I tried with php script on the help but it return me errors.
Thank's

Is hushmail really disposable?

First of all: Thanks for maintaining this list. It's very useful!

I've noticed a couple of hits on my side with emails from hushmail.com and hush.ai. As I looked into this, I started wondering if hushmail really is disposable email?

It seems to me you actually need to register an account, and I find no trace of the accounts being temporary or being able to send emails without registering.

The closest I get is this page mentioning the ability to set up multiple aliases on the nym.hush.com domain, but you'd still need an account.

Short googling reveals new domains

disposablemails.com -> https://www.emailondeck.com/
safermail.info -> https://mailto.space/
getnada.com -> https://getnada.com/

contbay.com -> trashmail.com
damnthespam.com -> trashmail.com

https://temp-mail.org/ domains:

12storage.com
gamgling.com
12hosting.net
cheaphub.net
lillemap.net
gafy.net
evyush.com
vps911.net
katztube.com

Also see https://mytemp.email/ domains

A huge list here: https://github.com/andreis/disposable/blob/master/domains.txt
and here https://github.com/wesbos/burner-email-providers/blob/master/emails.txt

MX blacklist

I've mentioned this in #84

while read -r DOMAIN; do
    echo $DOMAIN ... 1>&2

    host -W 2 -t MX $DOMAIN | sed -n -e 's|.* mail is handled by \S\+ \(\S\+\)|\1|p' \
        | while read -r MX; do
            host -W 2 -t A $MX | sed -n -e 's|.* has address \(\S\+\)|\1|p' \
                | while read -r MX_IP; do
                    MX_PTR="$(host -W 2 -t PTR $MX_IP | sed -n -e 's|.* domain name pointer \(\S\+\)|\1|p' | head -n 1)"

                    printf '%s\t%s\t%s\t%s\n' $DOMAIN $MX $MX_IP $MX_PTR | tee -a disposable_email_blacklist.mx
                done
        done
done < disposable_email_blacklist.conf

Results (pcs × MX)

  • 74 176.126.236.241
  • 116 213.32.90.201
  • 230 23.239.11.30
  • 1438 198.133.158.0/23

/24 TOP List

  • 40 206.53.239
  • 43 64.38.116
  • 43 74.125.200
  • 45 103.224.212
  • 45 37.120.169
  • 46 62.210.93
  • 50 162.255.118
  • 50 67.207.77
  • 52 72.167.238
  • 59 108.177.14
  • 61 64.233.190
  • 74 176.126.236
  • 76 209.85.203
  • 104 68.178.213
  • 116 213.32.90
  • 230 23.239.11
  • 413 198.133.158
  • 1025 198.133.159

wrong disposable domains

qq.com - not disposable domain, it's very popular chinese email provider
naver.com - not disposable domain, it's very popular korean email provider

gmx.com, gmx.us

I don't think this is considered a disposable email, but a valid email domain from Germany

Did you know?

Did you know that all gmail addresses disregards periods.

*You can have any combination of dots in between the letters and it will just work.

  • But more relevant to this, you can add "+XXX" to any valid gmail address to make it disposable.

i.e. [email protected]

Remove entries that are suffixes

Upon casual inspection of the list I found various entries that are part of the Public Suffix List - this is probably not an exhaustive list:
id.au - Individuals who are Australian citizens/residents
com.ar - Companies and individuals resident in Argentina
edu.my - Malaysian educational organisations
edu.sg - Singaporean educational organisations
nom.za - Personal names (South Africa)

These and any other items that are recognised suffixes should be removed from the list.

Disposable domains from temp-mail.org

temp-mail.org provides mailboxes in different domains:

  • 1thecity.biz
  • acucre.com
  • hiltonvr.com
  • bnote.com
  • nyrmusic.com
  • oranek.com
  • pachilly.com
  • patonce.com
  • rupayamail.com
  • sandcars.net
  • tryzoe.com
  • zdenka.net

Got these ones by opening https://temp-mail.org/api/ in private tab multiple times, you can see the domain in the header. Probably should register app and try to get more with API, but these ones I got so far.

image

more domains

Disposal domanis

ada-duit.ga
aesopsfables.net
blangbling784yy.tk
cursodemicropigmentacao.us
dgnghjr5ghjr4h.cf
email2an.ga
hjgh545rghf5thfg.gq
khan007.cf
king-yaseen.cf
kjhjgyht6ghghngh.ml
mailserver2.cf
mailserver2.ga
mailserver2.ml
mailserver2.tk
mial.cf
mial.tk
mysafe.ml
mytools-ipkzone.gq
ralree.com
reksareksy78oy.ml
roewe.cf
roewe.ga
roewe.gq
roewe.ml
rpaowpro3l5ha.tk
ryumail.net
s.ea.vu
safer.gq
v-mail.xyz
vw-eos.cf
vw-eos.ga
vw-eos.gq
vw-eos.ml
vw-eos.tk
yhjgh65hghgfj.tk
yughfdjg67ff.ga
cool.fr.nf
courriel.fr.nf
jetable.fr.nf
moncourrier.fr.nf
monemail.fr.nf
monmail.fr.nf
PutThisInYourSpamDatabase.com
SendSpamHere.com
SpamHereLots.com
SpamHerePlease.com
TempEMail.net
www.e4ward.com
www.mailinator.com
emailfake.usa.cc
6.emailfake.ml
fake-email.pp.ua
tempmail.xxi2.com
spam1.0-00.usa.cc
163.com
yopmail.pp.ua
3.emailfreedom.ml
kloap.com
add3000.pp.ua
kmhow.com
one.fackme.gq
2.emailfake.ml
5.emailfake.ml
4.emailfake.ml
3.emailfake.ml
1.emailfake.ml
emailfake.nut.cc
ce.mintemail.com
emailtemporanea.net
1.justemail.ml
2.justemail.ml
3.justemail.ml
4.justemail.ml
5.justemail.ml
6.justemail.ml
10minutemail.davidxia.com
temp-mail.pp.ua
ass.pp.ua
a.gmail.gr.com
1.fackme.gq
2.fackme.gq
3.fackme.gq
4.fackme.gq
5.fackme.gq
6.fackme.gq
7.fackme.gq
8.fackme.gq
9.fackme.gq
7mail7.com
5.emailfreedom.ml
yhg.biz
youpmail.com
4.emailfreedom.ml
zasod.com
euaqa.com
ip6.pp.ua
mox.pp.ua
get.pp.ua
cdnqa.com
iaoss.com
ggg.pp.ua
foxja.com
pooae.com
figjs.com
haqed.com

Invalid Domains :

moditstudio.it
dm.w3internet.co.ukexample.com
h.mintemail.com
eladis.it
solartotal.com
solartotal.be
solartotal.de
solartotal.es
dsiay.com
3.kadokawa.top
af.net
al73.com
yurakucommunity.com
333solar.com
xvx.us
send-email.ml
noicd.com

PHP example for you (not an issue)

function is_temp_mail($mail) {

                $list = file_get_contents ('disposable_email_blacklist.conf');
                $mail_domains_ko = explode("\n", $list);





                foreach($mail_domains_ko as $ko_mail) {
            list(,$mail_domain) = explode('@',$mail);
            if(strcasecmp($mail_domain, $ko_mail) == 0){
                    return true;
            }
    }
    return false;
}

Works wonders for my site now thank you so much for this!

Remove snkmail.com

Please remove snkmail.com. Although it started out as a disposable email service (sneakemail.com), snkmail.com is a paid-subscription service for generating long-lived unique email addresses for identifying spam from website registrations.

Emails to the generated address is forwarded to the subscriber with the email tagged so that he knows which email it was sent to, and with the From address altered so that replies go back via snkmail servers and to the original sender. So this is really a service for identifying spam from websites, and not for generating disposable emails.

False positives

< disposable_email_blacklist.conf xargs -n 1 host -t MX reveals that

  • there are domain with such MX-s as aspmx.l.google.com. (http://www.drevo.si/)
  • or parked domains (NS is ns1.dnparking.com.)
  • or have a new registrant (http://www.emil.com/)
  • or expired
  • or having no Mx at all

Please advise.

fail

So you won't allow signup from a disposable email address service?

oh noes!

What will I do?

Gee, maybe I'll treat a non-listed email service as disposable.

And why would I do that?

BECAUSE

the kind of cretinous fops who blacklist self-protection services are typically the scum bent on spamming me - a behavior I will vociferously resist.

YOU FAIL

Your policy is INANITY

DEAGuard - Uses your APIs

I wanted to thank you for the fantastic job you did.
And I wanted to alert you that I've embedded your APIs in my project.
Here: DEAGuard

decide on what domain levels to cover

In #45 we discussed whether we should only gather domains in xxx.yy form or whether to also accept third (and deeper) levels such as zzz.xxx.yyy

This might need some research as there are cases that are clearly exempt (.co.uk) and some appear unclear. Also if we remove zzz.xxx.yyy should we always keep xxx.yyy as this will vastly broaden the list impact? Is the assumption that when spammer controls xxx.yyy they also control zzz.xxx.yyy reasonable?

Restore this domain

Sir Please
siftportal.ru
i have created a maxbounty account on this domain and my account is blocked i want to check my mail i don't have any other option.
i work hard to earn money and i have more than 100$ in this account
kindly sir restore this domain for one day
Thanks
this is a huge help for me
Thanks

Was lavabit.com really disposable?

lavabit.com is no longer in business, but when they were, did they really offer disposable email addresses?

From what I remember, you needed to sign up for an account.

Questionable entry

Why would FastMail.fm be on this list (introduced with pull req. #13) ? It seems rather odd to me for someone to use a paid email service for a disposable/temporary email.

License?

What license is this released under, if any?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.