Ce référentiel contient une liste de domaines d'adresses e-mail jetables et temporaires souvent utilisés pour enregistrer des utilisateurs factices afin de spammer ou d'abuser de certains services.
Nous ne pouvons pas garantir que tous ces produits puissent toujours être considérés comme jetables, mais nous effectuons des vérifications de base, il est donc probable qu'ils aient été jetables à un moment donné.
Le fichier Allowlist.conf rassemble des domaines de messagerie souvent identifiés comme jetables mais qui ne le sont pas en réalité.
N'hésitez pas à créer des relations publiques avec des ajouts ou à demander la suppression d'un domaine (avec raisons).
Plus précisément, veuillez citer dans votre PR où l'on peut générer une adresse e-mail jetable qui utilise ce domaine, afin que les responsables puissent la vérifier.
Veuillez ajouter de nouveaux domaines jetables directement dans jetable_email_blocklist.conf dans le même format (uniquement les domaines de deuxième niveau sur une nouvelle ligne sans @), puis exécutez maintenance.sh. Le script shell vous aidera à convertir les majuscules en minuscules, à trier, à supprimer les doublons et à supprimer les domaines autorisés.
Vous pouvez copier, modifier, distribuer et utiliser l'œuvre, même à des fins commerciales, le tout sans demander la permission.
11/02/21 Nous avons créé un compte d'organisation github et y avons transféré le référentiel.
18/04/19 @di a rejoint en tant que responsable principal de ce projet. Merci!
31/07/17 @deguif a rejoint en tant que mainteneur principal de ce projet. Merci!
06/12/16 - Disponible en module PyPI grâce à @di
27/07/16 - Conversion de tous les domaines au deuxième niveau. Cela signifie qu'à partir de cette validation, les implémenteurs doivent veiller à faire correspondre correctement les noms de domaine de deuxième niveau, c'est-à-dire que @xxx.yyy.zzz
doit correspondre yyy.zzz
dans la liste de blocage où zzz
est un suffixe public. Plus d'infos dans #46
02/09/14 - Premier commit 393c21f5
Table des matières : 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 en module PyPI grâce à @di
>> > from disposable_email_domains import blocklist
>> > 'bearsarefuzzy.com' in blocklist
True
contribué par @txt3rob, @deguif, @pjebs et @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 );
}
Vous pouvez également consulter le package Composer https://github.com/elliotjreed/disposable-emails-filter-php.
contribué par @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
}
Vous pouvez également consulter le package Go https://github.com/rocketlaunchr/anti-disposable-email.
contribué par @MitsunChieh
Dans le modèle de ressource, il s'agit généralement 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
contribué par @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 ] )
}
Vous pouvez également consulter le package 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"
Le code suppose que vous avez ajouté disposable_email_blocklist.conf
à côté de votre classe en tant que ressource 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 );
}
contribué par @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 ( )
}