{"id":49127370,"url":"https://github.com/pescheckit/python-disposable","last_synced_at":"2026-06-02T11:00:31.793Z","repository":{"id":343968443,"uuid":"1179880440","full_name":"pescheckit/python-disposable","owner":"pescheckit","description":"Detect disposable/temporary email addresses with a curated 72k+ domain list plus nightly MX/IP cluster OSINT. Auto-updated. No network calls at runtime.","archived":false,"fork":false,"pushed_at":"2026-05-31T05:40:38.000Z","size":27509,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-31T07:18:42.595Z","etag":null,"topics":["certificate-transparency","disposable-email","dns","email","email-security","email-validation","mx-records","osint","python","spam-prevention","temp-mail"],"latest_commit_sha":null,"homepage":"https://pypi.org/project/python-disposable/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pescheckit.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-12T13:29:32.000Z","updated_at":"2026-05-31T05:40:42.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/pescheckit/python-disposable","commit_stats":null,"previous_names":["pescheckit/python-disposable"],"tags_count":54,"template":false,"template_full_name":null,"purl":"pkg:github/pescheckit/python-disposable","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pescheckit%2Fpython-disposable","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pescheckit%2Fpython-disposable/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pescheckit%2Fpython-disposable/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pescheckit%2Fpython-disposable/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pescheckit","download_url":"https://codeload.github.com/pescheckit/python-disposable/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pescheckit%2Fpython-disposable/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33818568,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-02T02:00:07.132Z","response_time":109,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["certificate-transparency","disposable-email","dns","email","email-security","email-validation","mx-records","osint","python","spam-prevention","temp-mail"],"created_at":"2026-04-21T16:06:44.265Z","updated_at":"2026-06-02T11:00:31.677Z","avatar_url":"https://github.com/pescheckit.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# python-disposable\n\nA lightweight Python package to detect disposable/temporary email addresses. Bundles **72,000+ domains** from [disposable/disposable-email-domains](https://github.com/disposable/disposable-email-domains), updated daily — no network calls at runtime.\n\n## Installation\n\n```bash\npip install python-disposable\n```\n\n## Usage\n\n### Basic check\n\n```python\nfrom disposable_email import is_disposable, is_valid\n\nis_disposable(\"user@mailinator.com\")  # True\nis_disposable(\"user@gmail.com\")       # False\n\n# Works with bare domains too\nis_disposable(\"guerrillamail.com\")    # True\n\n# Inverse\nis_valid(\"user@gmail.com\")            # True\n```\n\n### Strict mode\n\nStrict mode also flags greylisted domains — services that allow anonymous signups but aren't purely disposable (e.g. some free email providers).\n\n```python\nis_disposable(\"example.com\", strict=True)\nis_valid(\"example.com\", strict=True)\n```\n\n### Subdomain handling\n\nSubdomains are automatically resolved to their parent domain.\n\n```python\nis_disposable(\"mail.mailinator.com\")     # True\nis_disposable(\"a.b.guerrillamail.com\")   # True\n```\n\n### Get the full domain set\n\n```python\nfrom disposable_email import get_domains\n\ndomains = get_domains()              # frozenset of 72k+ domains\ndomains_strict = get_domains(strict=True)  # frozenset of strict list\n```\n\n### Domain count\n\n```python\nfrom disposable_email import domain_count\n\ndomain_count()              # 72170\ndomain_count(strict=True)   # 26468\n```\n\n## Django example\n\n```python\nfrom django import forms\nfrom disposable_email import is_disposable\n\nclass RegisterForm(forms.Form):\n    email = forms.EmailField()\n\n    def clean_email(self):\n        email = self.cleaned_data[\"email\"]\n        if is_disposable(email):\n            raise forms.ValidationError(\"Disposable email addresses are not allowed.\")\n        return email\n```\n\n## API reference\n\n| Function | Description |\n|----------|-------------|\n| `is_disposable(email_or_domain, strict=False)` | Returns `True` if the email/domain is disposable |\n| `is_valid(email_or_domain, strict=False)` | Returns `True` if the email/domain is **not** disposable |\n| `get_domains(strict=False)` | Returns the full `frozenset` of known disposable domains |\n| `domain_count(strict=False)` | Returns the number of bundled domains |\n\n## Data source\n\nDomain lists are sourced from [disposable/disposable-email-domains](https://github.com/disposable/disposable-email-domains) and bundled at release time. The upstream list is updated daily via automated scraping of 40+ sources.\n\nThis package checks for upstream updates every 4 hours and automatically publishes a new version to PyPI when changes are detected.\n\n## License\n\nMIT — see [LICENSE](LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpescheckit%2Fpython-disposable","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpescheckit%2Fpython-disposable","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpescheckit%2Fpython-disposable/lists"}