Detect Disposable Email Addresses

A common problem with signing up users for a newsletter or a trial is to try and prevent a user registering with a disposable email address. The best list that I can find of disposable email addresses is here :

I have created a script that uses the HttpClient to download a list of disposable addresses from GitHub. The list can then be stored in a database table and used to validate a users email domain when registering for a newsletter or account.

Disposable Email Service

There are two classes defined :

  • DisposableEmailResponse - This contains the service response (success, error message, list of domains)
  • DisposableEmailService - This gets the list of Disposable Email Domains
using System.Net.Http
using System.Net.Mail
using System.Threading.Tasks
using Newtonsoft.Json

public class DisposableEmailResponse
    public bool IsSuccess { get; set; }
    public string ErrorMessage { get; set; }
    public IEnumerable<string> DisposableEmailDomains { get; set; } = new List<string>();

public class DisposableEmailService
    public async Task<DisposableEmailResponse> Get(CancellationToken cancellationToken)
        const string GithubBlacklist
        = "";

        var result = new DisposableEmailResponse();

        using (var client = new HttpClient())
                var response = await client.GetAsync(GithubBlacklist, cancellationToken);


                var contents = await response.Content.ReadAsStringAsync();
                result.IsSuccess = true;
                result.DisposableEmailDomains = JsonConvert.DeserializeObject<List<string>>(contents);

            catch (TaskCanceledException)
                result.ErrorMessage = $"{nameof(Get)} task has been cancelled";

            catch (Exception ex)
                result.ErrorMessage = $"{nameof(Get)} has errored : {ex.Message}";

        return result;



I use LINQPad as my default scratchpad for creating scripts and services. The script above references the following nuget packages

  • Newtonsoft.Json

The code below shows how to use the DisposableEmailService

async Task Main()
    var disposableEmails = await GetDisposableEmailAddresses();

    var testEmail = "";
    var mailAddress = new MailAddress(testEmail);
    var domainPart = mailAddress.Host.ToLower();

    if (disposableEmails.Contains(domainPart))
        Console.Write($"The email is invalid {testEmail}, Disposable email addresses are disallowed from registering");


public async Task<List<string>> GetDisposableEmailAddresses()
    var token = new CancellationToken();
    var disposableEmailService = new DisposableEmailService();
    var disposableEmails = await disposableEmailService.Get(token);
    return disposableEmails.DisposableEmailDomains.ToList();