이 저장소에는 스팸을 보내거나 일부 서비스를 남용하기 위해 가짜 사용자를 등록하는 데 자주 사용되는 일회용 및 임시 이메일 주소 도메인 목록이 포함되어 있습니다.
이러한 모든 항목이 여전히 일회용으로 간주될 수 있다고 보장할 수는 없지만 기본 확인을 수행하므로 특정 시점에 일회용이었을 가능성이 있습니다.
파일allowlist.conf는 종종 일회용으로 식별되지만 실제로는 일회용이 아닌 이메일 도메인을 수집합니다.
추가 사항이 있는 PR을 작성하거나 일부 도메인의 제거를 요청하십시오(이유 포함).
구체적으로, 관리자가 이를 확인할 수 있도록 해당 도메인을 사용하는 일회용 이메일 주소를 생성할 수 있는 위치를 PR에 언급하세요.
새로운 일회용 도메인을 동일한 형식으로 일회용_email_blocklist.conf에 직접 추가한 다음(@ 없이 새 줄에 두 번째 수준 도메인만) 유지 관리.sh를 실행하세요. 쉘 스크립트는 대문자를 소문자로 변환하고, 정렬하고, 중복 항목을 제거하고, 허용 목록에 있는 도메인을 제거하는 데 도움이 됩니다.
허락 없이 저작물을 복사, 수정, 배포, 사용할 수 있으며 상업적인 목적으로도 사용할 수 있습니다.
2021년 2월 11일 github 조직 계정을 생성하고 해당 계정으로 저장소를 이전했습니다.
19/4/18 @di가 이 프로젝트의 핵심 관리자로 합류했습니다. 감사합니다!
17/7/31 @deguif가 이 프로젝트의 핵심 관리자로 합류했습니다. 감사해요!
16/12/6 - @di 덕분에 PyPI 모듈로 사용 가능
2016년 7월 27일 - 모든 도메인을 2단계로 전환했습니다. 이는 이 커밋부터 시작하여 구현자가 두 번째 수준 도메인 이름을 적절하게 일치시키는 데 주의해야 함을 의미합니다. 즉 @xxx.yyy.zzz
zzz
공개 접미사인 차단 목록의 yyy.zzz
와 일치해야 합니다. 자세한 내용은 #46을 참조하세요.
9/2/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
@di 덕분에 PyPI 모듈로 사용 가능
>> > 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 ( )
}