erag/laravel-disposable-email

A Laravel package to detect and block disposable email addresses.
101,662 225
Install
composer require erag/laravel-disposable-email
Latest Version:v4.0.0
PHP:>=8.1.0
License:MIT
Last Updated:Mar 25, 2026
Links: GitHub  ·  Packagist
Maintainer: eramitgupta

Laravel Disposable Email Detection

Screenshot 2024-10-04 at 10 34 23 PM

Packagist License Latest Stable Version Total Downloads

A Laravel package to detect and block disposable (temporary) email addresses during validation or runtime logic.

Already contains 110,646+ disposable email domains! 🔥


✅ Features

  • 🔥 110,646+ known disposable domains already included
  • 🧠 Smart validation rule for form requests
  • ⚙️ Runtime email checking via helper and facade
  • 🧩 Blade directive support for conditionals
  • 🌐 Auto-sync with remote domain lists
  • 📝 Add your own custom blacklist with ease
  • 🧠 Optional caching for performance
  • ⚡️ Zero-configuration setup with publishable config
  • Compatible with Laravel 10, 11, 12, and 13

🚀 Installation

composer require erag/laravel-disposable-email

Register the Service Provider

For Laravel (Optional) v11.x, v12.x, v13.x

Ensure the service provider is registered in your /bootstrap/providers.php file:

use EragLaravelDisposableEmail\LaravelDisposableEmailServiceProvider;

return [
    // ...
    LaravelDisposableEmailServiceProvider::class,
];

For Laravelv v10.x

Ensure the service provider is registered in your config/app.php file:

'providers' => [
    // ...
    EragLaravelDisposableEmail\LaravelDisposableEmailServiceProvider::class,
],

🛠 Configuration

Publish the config file:

 php artisan erag:install-disposable-email  

This will create config/disposable-email.php.


⚙ Usage

1. Form Request Validation

✅ String-based Rule:

$request->validate([
    'email' => 'required|email|disposable_email',
]);

$request->validate([
    'email' => ['required', 'email', 'disposable_email'],
]);

✅ Custom Rule:

use EragLaravelDisposableEmail\Rules\DisposableEmailRule;

$request->validate([
    'email' => ['required', 'email', new DisposableEmailRule()],
]);

2. Direct Runtime Check

use EragLaravelDisposableEmail\Rules\DisposableEmailRule;

if (DisposableEmailRule::isDisposable('test@tempmail.com')) {
    // Do something if email is disposable
}

Or via facade:

use DisposableEmail;

if (DisposableEmail::isDisposable('agedmail.com')) {
    // Do something
}

3. Blade Directive

@disposableEmail('amit@0-mail.com')
    <p class="text-red-600">Disposable email detected!</p>
@else
    <p class="text-green-600">Valid email.</p>
@enddisposableEmail

🔄 Sync From Remote (Optional)

Update the list manually:

php artisan erag:sync-disposable-email-list

⏰ Keeping the Domain List Up to Date

This package receives a weekly patch release containing updates to the built-in disposable domains list. If you are not able to bump your installed version accordingly, or just want to stay ahead of things, make sure to update the domains list yourself at any interval you like by running or scheduling the erag:sync-disposable-email-list command:

// routes/console.php

use Illuminate\Support\Facades\Schedule;

Schedule::command('erag:sync-disposable-email-list')->daily();

🔗 Config Options (config/disposable-email.php)

return [
    'blacklist_file' => storage_path('app/blacklist_file),

    'remote_url' => [
       'https://raw.githubusercontent.com/eramitgupta/disposable-email/main/disposable_email.txt',
    ],
    
    'cache_enabled' => false,
    'cache_ttl' => 60,
];

Note: The .txt files from remote_url must follow this format:
Each line should contain only a domain name, like:

0-00.usa.cc
0-30-24.com
0-attorney.com
0-mail.com
00-tv.com
00.msk.ru
00.pe
00000000000.pro
000728.xyz
000777.info
00082cc.com
00082dd.com
00082ss.com

If the file contains anything other than plain domains (like comments or extra data), it may cause parsing issues.

🧩 Add Your Own Disposable Domains

Want to block additional disposable domains?
You can easily extend the list manually — no coding, no command required!

Step Action
🔹 1 Go to the following path:
storage/app/blacklist_file/
🔹 2 Create or edit this file:
disposable_domains.txt
🔹 3 Add your custom domains like:
abakiss.com
fakemail.org
trashbox.io
(one per line)

📌 Important Notes:

  • Each line must contain only the domain name – no extra symbols, no comments.
  • The package will automatically detect and use the domains from this file.
  • You do not need to run any Artisan command. 🧙‍♂️

⚙️ Ensure File Path Matches Configuration

Your file path must match the one defined in config/disposable-email.php:

'blacklist_file' => storage_path('app/blacklist_file'),

If the path or filename is different, the package will not load your custom list.


🧠 Caching Support (Optional)

This package supports optional caching to improve performance, especially when dealing with large domain lists.

🔧 How It Works

  • If enabled, the package will cache the compiled list of disposable domains for faster lookup.
  • This is useful in high-traffic applications where the same list is accessed frequently.

🛠 Enable Caching

To enable caching, update the config file config/disposable-email.php:

'cache_enabled' => true,
'cache_ttl' => 60, 

🧹 Clear Cached List

If you manually update the domain list and want to clear the cache, you can use:

php artisan cache:clear