Este repositorio contiene una lista de dominios de direcciones de correo electrónico temporales y desechables que a menudo se utilizan para registrar usuarios ficticios con el fin de enviar spam o abusar de algunos servicios.
No podemos garantizar que todos estos puedan considerarse desechables, pero hacemos comprobaciones básicas para que sea probable que hayan sido desechables en algún momento.
El archivo enablelist.conf reúne dominios de correo electrónico que a menudo se identifican como desechables pero que en realidad no lo son.
Siéntase libre de crear relaciones públicas con adiciones o solicitar la eliminación de algún dominio (con los motivos).
Específicamente, indique en su PR dónde se puede generar una dirección de correo electrónico desechable que use ese dominio, para que los mantenedores puedan verificarlo.
Agregue nuevos dominios desechables directamente en desechables_email_blocklist.conf en el mismo formato (solo dominios de segundo nivel en una nueva línea sin @), luego ejecute keep.sh. El script de shell le ayudará a convertir mayúsculas a minúsculas, ordenar, eliminar duplicados y eliminar dominios incluidos en la lista de permitidos.
Puede copiar, modificar, distribuir y utilizar la obra, incluso con fines comerciales, todo sin pedir permiso.
11/02/21 Creamos una cuenta de organización de github y le transferimos el repositorio.
18/04/19 @di se unió como mantenedor principal de este proyecto. ¡Gracias!
31/07/17 @deguif se unió como mantenedor principal de este proyecto. ¡Gracias!
6/12/16 - Disponible como módulo PyPI gracias a @di
27/07/16: se convirtieron todos los dominios al segundo nivel. Esto significa que a partir de esta confirmación, los implementadores deben encargarse de hacer coincidir correctamente los nombres de dominio de segundo nivel, es decir, @xxx.yyy.zzz
debe coincidir con yyy.zzz
en la lista de bloqueo donde zzz
es un sufijo público. Más información en el n.° 46
2/09/14 - Primera confirmación 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
Disponible como módulo PyPI gracias a @di
>> > from disposable_email_domains import blocklist
>> > 'bearsarefuzzy.com' in blocklist
True
aportado por @txt3rob, @deguif, @pjebs y @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 );
}
Alternativamente, consulte el paquete Composer https://github.com/elliotjreed/disposable-emails-filter-php.
contribuido por @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
}
Alternativamente, consulte el paquete Go https://github.com/rocketlaunchr/anti-disposable-email.
contribuido por @MitsunChieh
En el modelo de recursos, normalmente es 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
contribuido por @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 ] )
}
Alternativamente, consulte el paquete 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"
El código supone que ha agregado disposable_email_blocklist.conf
junto a su clase como recurso classpath.
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 );
}
aportado por @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 ( )
}