176 lines
3.9 KiB
Python
176 lines
3.9 KiB
Python
from logger import logger
|
|
|
|
|
|
_BUILTIN_DOMAINS: set[str] = {
|
|
"mailinator.com",
|
|
"guerrillamail.com",
|
|
"guerrillamail.de",
|
|
"guerrillamail.net",
|
|
"guerrillamail.org",
|
|
"guerrillamailblock.com",
|
|
"grr.la",
|
|
"sharklasers.com",
|
|
"guerrillamail.info",
|
|
"tempmail.com",
|
|
"temp-mail.org",
|
|
"temp-mail.io",
|
|
"throwaway.email",
|
|
"fakeinbox.com",
|
|
"tempail.com",
|
|
"tempr.email",
|
|
"dispostable.com",
|
|
"yopmail.com",
|
|
"yopmail.fr",
|
|
"yopmail.net",
|
|
"cool.fr.nf",
|
|
"jetable.fr.nf",
|
|
"nospam.ze.tc",
|
|
"nomail.xl.cx",
|
|
"mega.zik.dj",
|
|
"speed.1s.fr",
|
|
"courriel.fr.nf",
|
|
"moncourrier.fr.nf",
|
|
"monemail.fr.nf",
|
|
"monmail.fr.nf",
|
|
"hide.biz.st",
|
|
"mytrashmail.com",
|
|
"mailnesia.com",
|
|
"maildrop.cc",
|
|
"discard.email",
|
|
"discardmail.com",
|
|
"discardmail.de",
|
|
"trashmail.com",
|
|
"trashmail.me",
|
|
"trashmail.net",
|
|
"trashmail.org",
|
|
"trashmail.at",
|
|
"trashmail.io",
|
|
"trashmail.ws",
|
|
"trash-mail.com",
|
|
"trash-mail.at",
|
|
"trashemail.de",
|
|
"mailcatch.com",
|
|
"mailscrap.com",
|
|
"mailforspam.com",
|
|
"spamgourmet.com",
|
|
"spamgourmet.net",
|
|
"spamgourmet.org",
|
|
"mailexpire.com",
|
|
"tempinbox.com",
|
|
"tempomail.fr",
|
|
"10minutemail.com",
|
|
"10minutemail.co.za",
|
|
"10minutemail.net",
|
|
"minutemail.io",
|
|
"emailondeck.com",
|
|
"getnada.com",
|
|
"mohmal.com",
|
|
"burnermail.io",
|
|
"inboxbear.com",
|
|
"mailsac.com",
|
|
"harakirimail.com",
|
|
"33mail.com",
|
|
"maildax.com",
|
|
"crazymailing.com",
|
|
"mailtemp.info",
|
|
"emkei.cz",
|
|
"example.com",
|
|
"test.com",
|
|
"mailinator.net",
|
|
"binkmail.com",
|
|
"bobmail.info",
|
|
"chammy.info",
|
|
"devnullmail.com",
|
|
"letthemeatspam.com",
|
|
"mailnull.com",
|
|
"nomail.pw",
|
|
"nowmymail.com",
|
|
"rmqkr.net",
|
|
"spamfree24.org",
|
|
"spamhereplease.com",
|
|
"tempmailaddress.com",
|
|
"wegwerfmail.de",
|
|
"wegwerfmail.net",
|
|
"wh4f.org",
|
|
"mailzilla.com",
|
|
"anonbox.net",
|
|
"bspamfree.org",
|
|
"kurzepost.de",
|
|
"objectmail.com",
|
|
"proxymail.eu",
|
|
"rcpt.at",
|
|
"reallymymail.com",
|
|
"recode.me",
|
|
"regbypass.com",
|
|
"s0ny.net",
|
|
"safetymail.info",
|
|
"safetypost.de",
|
|
"shieldedmail.com",
|
|
"sogetthis.com",
|
|
"soodonims.com",
|
|
"spambox.us",
|
|
"spamcero.com",
|
|
"spamday.com",
|
|
"spamex.com",
|
|
"spamfighter.cf",
|
|
"spamfighter.ga",
|
|
"spamfighter.gq",
|
|
"spamfighter.ml",
|
|
"spamfighter.tk",
|
|
"spamhole.com",
|
|
"spaml.com",
|
|
"spaml.de",
|
|
"uggsrock.com",
|
|
"uroid.com",
|
|
"veryreallymymail.com",
|
|
"viditag.com",
|
|
"vomoto.com",
|
|
"vpn.st",
|
|
"vsimcard.com",
|
|
"vubby.com",
|
|
"vztc.com",
|
|
"wasteland.rfc822.org",
|
|
"webemail.me",
|
|
"zetmail.com",
|
|
"zippymail.info",
|
|
"mailnator.com",
|
|
"mailtothis.com",
|
|
"mx0.wwwnew.eu",
|
|
"mypartyclip.de",
|
|
"myzx.com",
|
|
"nb.gy",
|
|
"nobulk.com",
|
|
"noclickemail.com",
|
|
"nogmailspam.info",
|
|
"nomorespamemails.com",
|
|
"nothingtoseehere.ca",
|
|
}
|
|
|
|
_loaded_extra = False
|
|
_extra_domains: set[str] = set()
|
|
|
|
|
|
def _load_extra() -> None:
|
|
global _loaded_extra, _extra_domains
|
|
if _loaded_extra:
|
|
return
|
|
_loaded_extra = True
|
|
try:
|
|
from config import DISPOSABLE_EMAIL_BLOCKLIST_EXTRA
|
|
|
|
if isinstance(DISPOSABLE_EMAIL_BLOCKLIST_EXTRA, list | set | tuple):
|
|
_extra_domains = {d.strip().lower() for d in DISPOSABLE_EMAIL_BLOCKLIST_EXTRA if isinstance(d, str)}
|
|
if _extra_domains:
|
|
logger.info("[DisposableEmail] загружено {} дополнительных доменов", len(_extra_domains))
|
|
except (ImportError, AttributeError):
|
|
pass
|
|
|
|
|
|
def is_disposable_email(email: str) -> bool:
|
|
"""Проверяет, является ли email одноразовым."""
|
|
_load_extra()
|
|
domain = email.strip().lower().rsplit("@", 1)[-1] if "@" in email else ""
|
|
if not domain:
|
|
return False
|
|
return domain in _BUILTIN_DOMAINS or domain in _extra_domains
|