Este repositório contém uma lista de domínios de endereços de e-mail descartáveis e temporários frequentemente usados para registrar usuários fictícios a fim de enviar spam ou abusar de alguns serviços.
Não podemos garantir que todos eles ainda possam ser considerados descartáveis, mas fazemos verificações básicas, portanto é provável que tenham sido descartáveis em algum momento.
O arquivoallowlist.conf reúne domínios de e-mail que são frequentemente identificados como descartáveis, mas na verdade não são.
Sinta-se à vontade para criar PR com acréscimos ou solicitar a remoção de algum domínio (com motivos).
Especificamente, cite em seu PR onde é possível gerar um endereço de e-mail descartável que use esse domínio, para que os mantenedores possam verificá-lo.
Adicione novos domínios descartáveis diretamente em descartável_email_blocklist.conf no mesmo formato (somente domínios de segundo nível na nova linha sem @) e execute keep.sh. O script shell irá ajudá-lo a converter letras maiúsculas em minúsculas, classificar, remover duplicatas e remover domínios permitidos.
Você pode copiar, modificar, distribuir e utilizar a obra, mesmo para fins comerciais, tudo sem pedir permissão.
11/02/21 Criamos uma conta org github e transferimos o repositório para ela.
18/04/19 @di ingressou como principal mantenedor deste projeto. Obrigado!
31/07/17 @deguif ingressou como principal mantenedor deste projeto. Obrigado!
06/12/16 - Disponível como módulo PyPI graças a @di
27/07/16 - Converteu todos os domínios para o segundo nível. Isso significa que a partir deste commit os implementadores devem cuidar de combinar os nomes de domínio de segundo nível corretamente, ou seja, @xxx.yyy.zzz
deve corresponder yyy.zzz
na lista de bloqueio onde zzz
é um sufixo público. Mais informações em #46
02/09/14 - Primeiro commit 393c21f5
TOC: Python, PHP, Go, Ruby on Rails, NodeJS, C#, bash, Java, Swift
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
Disponível como módulo PyPI graças a @di
>> > from disposable_email_domains import blocklist
>> > 'bearsarefuzzy.com' in blocklist
True
contribuição de @txt3rob, @deguif, @pjebs e @Wruczek
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 );
}
Como alternativa, verifique o pacote Composer https://github.com/elliotjreed/disposable-emails-filter-php.
contribuição de @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
}
Como alternativa, verifique o pacote Go https://github.com/rocketlaunchr/anti-disposable-email.
contribuição de @MitsunChieh
No modelo de recursos, geralmente é 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
contribuição de @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 ( 'rn' ) . slice ( 0 , - 1 )
}
return blocklist . includes ( email . split ( '@' ) [ 1 ] )
}
Como alternativa, verifique o pacote NPM https://github.com/mziyut/disposable-email-domains-js.
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. " ) ;
#!/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"
O código pressupõe que você adicionou disposable_email_blocklist.conf
próximo à sua classe como recurso de caminho de classe.
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 );
}
contribuição de @1998code
func checkBlockList ( email : String , completion : @escaping ( Bool ) -> Void ) {
let url = URL ( string : " https://raw.githubusercontent.com/disposable-email-domains/disposable-email-domains/master/disposable_email_blocklist.conf " ) !
let task = URLSession . shared . dataTask ( with : url ) { data , response , error in
if let data = data {
if let string = String ( data : data , encoding : . utf8 ) {
let lines = string . components ( separatedBy : " n " )
for line in lines {
if email . contains ( line ) {
completion ( true )
return
}
}
}
}
completion ( false )
}
task . resume ( )
}