Soenneker.Validators.Email.Disposable.Online
11.0.5642
Prefix Reserved
dotnet add package Soenneker.Validators.Email.Disposable.Online --version 11.0.5642
NuGet\Install-Package Soenneker.Validators.Email.Disposable.Online -Version 11.0.5642
<PackageReference Include="Soenneker.Validators.Email.Disposable.Online" Version="11.0.5642" />
<PackageVersion Include="Soenneker.Validators.Email.Disposable.Online" Version="11.0.5642" />
<PackageReference Include="Soenneker.Validators.Email.Disposable.Online" />
paket add Soenneker.Validators.Email.Disposable.Online --version 11.0.5642
#r "nuget: Soenneker.Validators.Email.Disposable.Online, 11.0.5642"
#:package Soenneker.Validators.Email.Disposable.Online@11.0.5642
#addin nuget:?package=Soenneker.Validators.Email.Disposable.Online&version=11.0.5642
#tool nuget:?package=Soenneker.Validators.Email.Disposable.Online&version=11.0.5642
Soenneker.Validators.Email.Disposable.Online
Downloads a disposable-domain list once and checks email domains against it without sending email addresses to the source.
Install
dotnet add package Soenneker.Validators.Email.Disposable.Online
Registration
using Soenneker.Validators.Email.Disposable.Online.Registrars;
using Microsoft.Extensions.DependencyInjection;
services.AddEmailDisposableOnlineValidatorAsSingleton();
Only singleton registration is provided. The validator owns one lazily initialized domain set and a named client entry in the shared HTTP client cache.
Configure the list source
{
"Validators": {
"Email": {
"Disposable": {
"Uri": "https://example.test/disposable-domains.json"
}
}
}
}
The endpoint must return a JSON array of domain strings. When the setting is absent, the validator uses the disposable/disposable-email-domains domains.json file on GitHub. The URI is application configuration and should not be populated directly from request input.
Warm up and validate
using Soenneker.Validators.Email.Disposable.Online.Abstract;
await validator.WarmUp(cancellationToken);
bool? accepted = await validator.Validate(
"person@example.com",
cancellationToken);
Warm-up is optional; the first validation downloads the same data if needed. The download is cached for the lifetime of the validator and is not periodically refreshed.
Results have three states:
false: the extracted domain is in the downloaded list;true: the domain is not listed, or the input has no extractable domain;null: the endpoint returned an empty domain list.
Domain matching is ordinal and case-insensitive. It is an exact lookup: listed parent domains do not automatically match subdomains. The utility extracts text after the last @; it does not validate email syntax, trim input, normalize internationalized domains, or verify deliverability. Use a syntax validator before this one when malformed input must be rejected.
Network and failure behavior
The list request is retried three times after the initial attempt. HTTP failures, non-success responses after retries, invalid JSON, cancellation, and unexpected response shapes propagate rather than returning null. A true result means only that the domain was absent from this downloaded snapshot.
The configured list service receives only a GET for its domain data; email addresses are not sent to it. The validator no longer includes the checked address in its empty-list warning.
Disposal removes the validator's named client entry from the shared client cache and disposes the lazy domain holder. Let dependency injection dispose the singleton at application shutdown.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net11.0 is compatible. |
-
net11.0
- Soenneker.Extensions.Configuration (>= 11.0.914)
- Soenneker.Extensions.HttpClient (>= 11.0.4165)
- Soenneker.Utils.HttpClientCache (>= 11.0.2139)
- Soenneker.Utils.String (>= 11.0.3294)
- Soenneker.Validators.Validator (>= 11.0.754)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 11.0.5642 | 0 | 10/29/2026 |
| 11.0.5641 | 0 | 10/29/2026 |
| 11.0.5640 | 76 | 10/27/2026 |
| 11.0.5639 | 80 | 10/27/2026 |
| 11.0.5638 | 82 | 10/27/2026 |
| 11.0.5637 | 76 | 10/27/2026 |
| 11.0.5636 | 72 | 10/27/2026 |
| 11.0.5635 | 81 | 10/26/2026 |
| 11.0.5634 | 83 | 10/26/2026 |
| 11.0.5631 | 82 | 10/26/2026 |
| 11.0.5630 | 78 | 10/26/2026 |
| 11.0.5629 | 83 | 10/26/2026 |
| 11.0.5628 | 83 | 10/26/2026 |
| 11.0.5625 | 80 | 10/26/2026 |
| 11.0.5623 | 86 | 10/26/2026 |
| 4.0.5622 | 86 | 10/26/2026 |
| 4.0.5621 | 85 | 10/25/2026 |
| 4.0.5619 | 168 | 10/15/2026 |
| 4.0.5618 | 85 | 10/15/2026 |
| 4.0.5617 | 101 | 10/15/2026 |
Update dependency Soenneker.Extensions.HttpClient to 11.0.4165 (#6158)