raul3k/disposable-email-blocker-laravel
GitHub: raul3k/disposable-email-blocker-laravel
为 Laravel 应用提供一次性/临时邮箱检测能力的集成包,支持验证规则、多来源域名同步和灵活的缓存与数据库配置。
Stars: 1 | Forks: 0
# Laravel 一次性邮箱拦截器
用于检测一次性/临时邮箱的 Laravel 集成方案。基于 [`raul3k/disposable-email-blocker-core`](https://github.com/raul3k/disposable-email-blocker-core) 构建。
## 功能
- **验证规则** - 轻松在表单中验证邮箱
- **Facade** - 简单的 API,可在任何地方检查邮箱
- **数据库检查器** - 在你的数据库中存储和管理一次性域名
- **Artisan 命令** - 从多个来源更新域名
- **Laravel Cache 集成** - 支持 Redis、文件、数据库或任何 Laravel 缓存驱动
- **自动发现** - 开箱即用,兼容 Laravel 12
## 安装
```
composer require raul3k/disposable-email-blocker-laravel
```
该包使用 Laravel 的自动发现功能,因此无需手动注册 service provider。
### 发布配置(可选)
```
php artisan vendor:publish --tag=disposable-blocker-config
```
### 发布迁移文件(用于数据库检查器)
```
php artisan vendor:publish --tag=disposable-blocker-migrations
php artisan migrate
```
## 用法
### 验证规则
```
use Raul3k\DisposableBlocker\Laravel\Rules\NotDisposableEmail;
// In a Form Request
public function rules(): array
{
return [
'email' => ['required', 'email', new NotDisposableEmail()],
];
}
// With custom message
'email' => [new NotDisposableEmail('Temporary emails are not allowed')],
// In a Controller
$request->validate([
'email' => ['required', 'email', new NotDisposableEmail()],
]);
```
### Facade
```
use Raul3k\DisposableBlocker\Laravel\Facades\DisposableEmail;
// Simple check
if (DisposableEmail::isDisposable($email)) {
return back()->withErrors(['email' => 'Disposable emails not allowed']);
}
// Get detailed result
$result = DisposableEmail::check($email);
$result->isDisposable(); // bool
$result->isSafe(); // bool
$result->getDomain(); // string
$result->getConfidence(); // float
// Check domain directly
DisposableEmail::isDomainDisposable('mailinator.com'); // true
// Batch checking
$results = DisposableEmail::checkBatch([
'user1@gmail.com',
'user2@mailinator.com',
]);
// Domain information
$info = DisposableEmail::info('user@mail.example.co.uk');
$info->domain(); // 'example.co.uk'
$info->subdomain(); // 'mail'
$info->publicSuffix(); // 'co.uk'
$info->isPrivate(); // false
```
### Artisan 命令
```
# 列出可用来源
php artisan disposable:list-sources
# 从所有来源更新 domain
php artisan disposable:update
# 从特定来源更新
php artisan disposable:update --source=mailchecker
# 从特定来源导入
php artisan disposable:import mailchecker
# 使用选项导入
php artisan disposable:import mailchecker --clear --chunk=500
```
## 配置
```
// config/disposable-blocker.php
return [
// Checker type: 'file', 'database', 'pattern', 'chain'
'checker' => env('DISPOSABLE_CHECKER', 'file'),
// Use bundled list from core package
'use_bundled_list' => true,
// Enable pattern-based detection
'pattern_detection' => false,
// Domains to whitelist (never block)
'whitelist' => [
// 'mycompany.com',
],
// Cache settings
'cache' => [
'enabled' => true,
'store' => env('DISPOSABLE_CACHE_STORE', 'default'),
'ttl' => 3600,
'prefix' => 'disposable_email:',
],
// Database settings (when checker = 'database')
'database' => [
'table' => 'disposable_domains',
'connection' => null,
],
];
```
## 检查器类型
### 文件检查器(默认)
使用核心包中内置的列表。速度快且无需设置。
```
'checker' => 'file',
'use_bundled_list' => true,
```
### 数据库检查器
将域名存储在你的数据库中以便进行自定义管理。
```
php artisan vendor:publish --tag=disposable-blocker-migrations
php artisan migrate
php artisan disposable:update
```
```
'checker' => 'database',
```
### 链式检查器
组合多个检查器(数据库 + 内置列表)。
```
'checker' => 'chain',
'use_bundled_list' => true,
```
### 模式检测
启用基于一次性域名常见模式的启发式检测。
```
'pattern_detection' => true,
```
## 可用来源
该包可以从多个来源获取域名:
| 来源 | 描述 |
|--------|-------------|
| `disposable-email-domains` | 庞大且全面的列表(约 17 万个域名) |
| `burner-email-providers` | 精选列表(约 4 千个域名) |
| `mailchecker` | FGRibreau 的 mailchecker 列表 |
| `ivolo-disposable` | Ivolo 的一次性域名列表 |
| `fakefilter` | 7c/fakefilter 列表 |
## 测试
```
composer test
```
## 静态分析
```
composer analyse
```
## 许可证
MIT 许可证。详情请参阅 [LICENSE](LICENSE)。
标签:ffuf, Laravel, OpenVAS, PHP, Syscall, Web开发, 搜索引擎查询, 数据校验, 邮箱验证, 防滥用