Этот репозиторий содержит список одноразовых и временных доменов адресов электронной почты, которые часто используются для регистрации фиктивных пользователей с целью рассылки спама или злоупотребления некоторыми услугами.
Мы не можем гарантировать, что все это по-прежнему можно считать одноразовыми, но мы проводим базовую проверку, поэтому есть вероятность, что в какой-то момент они были одноразовыми.
Файлallowlist.conf собирает домены электронной почты, которые часто идентифицируются как одноразовые, но на самом деле таковыми не являются.
Не стесняйтесь создавать пиар с дополнениями или требовать удаления какого-то домена (с указанием причин).
В частности, укажите в своем PR, где можно создать одноразовый адрес электронной почты, использующий этот домен, чтобы сопровождающие могли его проверить.
Пожалуйста, добавьте новые одноразовые домены непосредственно в disposable_email_blocklist.conf в том же формате (только домены второго уровня в новой строке без @), затем запустите файл Maintenance.sh. Сценарий оболочки поможет вам преобразовать верхний регистр в нижний, сортировать, удалять дубликаты и удалять домены из белого списка.
Вы можете копировать, изменять, распространять и использовать произведение даже в коммерческих целях, не спрашивая разрешения.
11.02.21 Мы создали учетную запись github org и перенесли в нее репозиторий.
18.04.19 @di присоединился к нам в качестве основного сопровождающего этого проекта. Спасибо!
31.07.17 @deguif присоединился к нам в качестве основного сопровождающего этого проекта. Спасибо!
06.12.16 – Доступен как модуль PyPI благодаря @di.
27.07.16 - Перевел все домены на второй уровень. Это означает, что, начиная с этого коммита, разработчики должны позаботиться о правильном сопоставлении доменных имен второго уровня, т.е. @xxx.yyy.zzz
должен соответствовать yyy.zzz
в черном списке, где zzz
— общедоступный суффикс. Подробности в №46.
02.09.14 — Первый коммит 393c21f5
Содержание: 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
Доступен как модуль PyPI благодаря @di.
>> > from disposable_email_domains import blocklist
>> > 'bearsarefuzzy.com' in blocklist
True
предоставлено @txt3rob, @deguif, @pjebs и @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 );
}
Альтернативно проверьте пакет Composer https://github.com/elliotjreed/disposable-emails-filter-php.
предоставлено @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
}
Альтернативно проверьте пакет Go https://github.com/rocketlaunchr/anti-disposable-email.
предоставлено @MitsunChieh
В модели ресурсов обычно это 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
предоставлено @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 ] )
}
Альтернативно проверьте пакет 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"
Код предполагает, что вы добавили disposable_email_blocklist.conf
рядом с вашим классом в качестве ресурса пути к классам.
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 );
}
предоставлено @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 ( )
}