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