Dieses Repo enthält eine Liste verfügbarer und temporärer E-Mail-Adressdomänen, die häufig zur Registrierung von Scheinbenutzern verwendet werden, um Spam zu versenden oder bestimmte Dienste zu missbrauchen.
Wir können nicht garantieren, dass alle davon immer noch als wegwerfbar betrachtet werden können, aber wir führen grundlegende Überprüfungen durch, sodass die Wahrscheinlichkeit groß ist, dass sie zu einem bestimmten Zeitpunkt wegwerfbar waren.
Die Datei „allowlist.conf“ sammelt E-Mail-Domänen, die oft als verfügbar identifiziert werden, dies aber nicht sind.
Fühlen Sie sich frei, PR mit Ergänzungen zu erstellen oder die Entfernung einer Domain (mit Begründung) zu beantragen.
Bitte geben Sie in Ihrer PR insbesondere an, wo eine Einweg-E-Mail-Adresse generiert werden kann, die diese Domain verwendet, damit die Betreuer sie überprüfen können.
Bitte fügen Sie neue Einwegdomänen im gleichen Format direkt in „disposable_email_blocklist.conf“ hinzu (nur Domänen der zweiten Ebene in der neuen Zeile ohne @) und führen Sie dann „maintain.sh“ aus. Das Shell-Skript hilft Ihnen, Großbuchstaben in Kleinbuchstaben umzuwandeln, zu sortieren, Duplikate zu entfernen und Domänen auf der Zulassungsliste zu entfernen.
Sie dürfen das Werk ohne vorherige Genehmigung kopieren, verändern, verbreiten und nutzen, auch für kommerzielle Zwecke.
11.02.21 Wir haben ein Github-Organisationskonto erstellt und das Repository dorthin übertragen.
18.04.19 @di ist als Hauptbetreuer dieses Projekts beigetreten. Danke schön!
31.07.17 @deguif ist als Hauptbetreuer dieses Projekts beigetreten. Danke!
06.12.16 – Dank @di als PyPI-Modul verfügbar
27.07.16 – Alle Domänen auf die zweite Ebene umgestellt. Dies bedeutet, dass die Implementierer ab diesem Commit darauf achten sollten, dass die Domänennamen der zweiten Ebene ordnungsgemäß übereinstimmen, d. h. @xxx.yyy.zzz
sollte mit yyy.zzz
in der Blockliste übereinstimmen, wobei zzz
ein öffentliches Suffix ist. Weitere Infos in #46
02.09.14 – Erster Commit 393c21f5
Inhaltsverzeichnis: 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
Verfügbar als PyPI-Modul dank @di
>> > from disposable_email_domains import blocklist
>> > 'bearsarefuzzy.com' in blocklist
True
beigetragen von @txt3rob, @deguif, @pjebs und @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 );
}
Alternativ schauen Sie sich das Composer-Paket https://github.com/elliotjreed/disposable-emails-filter-php an.
beigetragen von @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
}
Alternativ können Sie sich das Go-Paket https://github.com/rocketlaunchr/anti-disposable-email ansehen.
beigetragen von @MitsunChieh
Im Ressourcenmodell ist es normalerweise 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
beigetragen von @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 ] )
}
Alternativ schauen Sie sich das NPM-Paket https://github.com/mziyut/disposable-email-domains-js an.
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"
Der Code geht davon aus, dass Sie disposable_email_blocklist.conf
neben Ihrer Klasse als Klassenpfadressource hinzugefügt haben.
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 );
}
beigetragen von @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 ( )
}