Skip to content
This repository was archived by the owner on Mar 20, 2025. It is now read-only.

Commit 278d496

Browse files
authored
Merge pull request #7 from elbgoods/ft-add-disposable-email-detector
add disposable email detector
2 parents 2b0f999 + c3aac6c commit 278d496

File tree

4 files changed

+60
-0
lines changed

4 files changed

+60
-0
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@
22

33
All notable changes to this package will be documented in this file.
44

5+
## v0.3.0
6+
7+
* add https://disposable-email-detector.com provider `\Elbgoods\TrashmailRule\Providers\DisposableEmailDetectorProvider`
8+
59
## v0.2.0
610

711
* switch to manager driver pattern

config/trashmail.php

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,13 @@
33
use GuzzleHttp\RequestOptions;
44

55
return [
6+
/*
7+
* The list of providers that should run to decide whether an email is disposable or not.
8+
* The order of providers is respected - so you should put the fastest or most important ones at the top.
9+
*/
610
'providers' => [
711
'config',
12+
'disposable_email_detector',
813
'dead_letter',
914
],
1015

@@ -24,6 +29,16 @@
2429
],
2530
],
2631

32+
/*
33+
* This package can do a request to https://www.disposable-email-detector.com
34+
*/
35+
'disposable_email_detector' => [
36+
'enabled' => true,
37+
'guzzle' => [
38+
RequestOptions::TIMEOUT => 5,
39+
],
40+
],
41+
2742
/*
2843
* Here you can define your own blacklisted domains.
2944
*/
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
<?php
2+
3+
namespace Elbgoods\TrashmailRule\Providers;
4+
5+
use Elbgoods\TrashmailRule\Contracts\ProviderContract;
6+
7+
class DisposableEmailDetectorProvider implements ProviderContract
8+
{
9+
protected const BASE_URL = 'https://api.disposable-email-detector.com/api/dea/v1/check/';
10+
11+
protected array $config;
12+
13+
public function __construct(array $config)
14+
{
15+
$this->config = $config;
16+
}
17+
18+
public function isDisposable(string $domain): ?bool
19+
{
20+
if (! $this->config['enabled']) {
21+
return null;
22+
}
23+
24+
$response = guzzle(
25+
self::BASE_URL,
26+
$this->config['guzzle']
27+
)->request('GET', $domain);
28+
29+
$body = $response->getBody()->getContents();
30+
31+
return json_decode($body, true)['result']['isDisposable'] ?? null;
32+
}
33+
}

src/TrashmailManager.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
use Elbgoods\TrashmailRule\Contracts\ProviderContract;
66
use Elbgoods\TrashmailRule\Providers\ConfigProvider;
77
use Elbgoods\TrashmailRule\Providers\DeadLetterProvider;
8+
use Elbgoods\TrashmailRule\Providers\DisposableEmailDetectorProvider;
89
use Illuminate\Support\Manager;
910
use RuntimeException;
1011

@@ -48,4 +49,11 @@ protected function createDeadLetterDriver(): DeadLetterProvider
4849
'config' => $this->config->get('trashmail.dead_letter'),
4950
]);
5051
}
52+
53+
protected function createDisposableEmailDetectorDriver(): DisposableEmailDetectorProvider
54+
{
55+
return $this->container->make(DisposableEmailDetectorProvider::class, [
56+
'config' => $this->config->get('trashmail.disposable_email_detector'),
57+
]);
58+
}
5159
}

0 commit comments

Comments
 (0)