このリポジトリには、一部のサービスをスパム送信したり悪用したりするためにダミー ユーザーを登録するためによく使用される、使い捨ておよび一時的な電子メール アドレス ドメインのリストが含まれています。
これらすべてが使い捨てであるとみなせるかどうかは保証できませんが、基本的なチェックは行っているため、ある時点で使い捨てであった可能性はあります。
ファイルallowlist.confは、使い捨てとして識別されることが多いが実際にはそうではない電子メールドメインを収集します。
ご自由に追加を含む PR を作成したり、一部のドメインの削除をリクエストしたりしてください (理由を添えて)。
具体的には、メンテナが検証できるように、そのドメインを使用する使い捨て電子メール アドレスを生成できる場所を PR に引用してください。
新しい使い捨てドメインを同じ形式で disposable_email_blocklist.conf に直接追加し (@ のない改行の第 2 レベル ドメインのみ)、maintain.sh を実行してください。シェル スクリプトは、大文字から小文字への変換、並べ替え、重複の削除、ホワイトリストに登録されたドメインの削除に役立ちます。
商業目的であっても、許可を得ることなく、作品をコピー、変更、配布、使用することができます。
2/11/21 github 組織アカウントを作成し、リポジトリを移行しました。
2019/4/18 @di がこのプロジェクトのコアメンテナとして加わりました。ありがとう!
2017/7/31 @deguif がこのプロジェクトのコアメンテナとして加わりました。ありがとう!
12/6/16 - @di のおかげで PyPI モジュールとして利用可能
2016 年 7 月 27 日 - すべてのドメインを第 2 レベルに変換しました。これは、このコミットから実装者が第 2 レベルのドメイン名を適切に照合する必要があることを意味します。つまり、 @xxx.yyy.zzz
ブロックリスト内のyyy.zzz
と一致する必要があります ( 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 ( )
}