大耳早/daves-email-validation-tool

一个易于使用、准确性尚可且可扩展的PHP 7+版本邮箱验证库


README

PHP Email Validation Tool

codecov Build Status Code Climate

PHP 7+的可扩展邮箱验证库

该库的目标是提供比仅检查邮箱格式更详细的邮箱验证报告,并且可以轻松添加自定义验证。

目前该工具检查以下内容

^ 用于这些检查的数据可以在此处找到这里

安装

composer require daveearley/daves-email-validation-tool

用法

快速入门

// Include the composer autoloader
require __DIR__ . '/vendor/autoload.php';

$validator = EmailValidation\EmailValidatorFactory::create('dave@gmoil.con');

$jsonResult = $validator->getValidationResults()->asJson();
$arrayResult = $validator->getValidationResults()->asArray();

echo $jsonResult;

预期输出

{
"valid_format": true,
"valid_mx_records": false,
"possible_email_correction": "dave@gmail.com",
"free_email_provider": false,
"disposable_email_provider": false,
"role_or_business_email": false,
"valid_host": false
}

添加自定义验证

要添加自定义验证,只需扩展EmailValidation\Validations\Validator类并实现getResultResponse()getValidatorName()方法。然后使用EmailValidation\EmailValidator->registerValidator()方法注册验证。

示例代码

// Validations/GmailValidator.php

<?php

namespace EmailValidation\Validations;

class GmailValidator extends Validator
{
    public function getValidatorName(): string
    {
        return 'is_gmail';
    }

    public function getResultResponse(): bool
    {
        $hostName = $this->getEmailAddress()->getHostPart();
        return strpos($hostName, 'gmail.com') !== false;
    }
}

// file-where-you-are-doing-your-validation.php

<?php

use EmailValidation\Validations\GmailValidator;

require __DIR__ . '/vendor/autoload.php';

$validator = EmailValidation\EmailValidatorFactory::create('dave@gmail.com');

$validator->registerValidator(new GmailValidator());

echo $validator->getValidationResults()->asJson();

预期输出将是

{
"is_gmail": true,
"valid_format": true,
"valid_mx_records": false,
"possible_email_correction": "",
"free_email_provider": true,
"disposable_email_provider": false,
"role_or_business_email": false,
"valid_host": false
}

在Docker中运行

docker-compose up -d 

然后您可以通过访问http://localhost:8880?email=email.to.validate@example.com来验证邮箱。结果将如上所述的JSON字符串。

添加自定义数据源

您可以通过创建一个实现EmailValidation\EmailDataProviderInterface的数据提供者类来创建自己的数据提供者。

示例代码

<?php

declare(strict_types=1);

namespace EmailValidation;

class CustomEmailDataProvider implements EmailDataProviderInterface
{
    public function getEmailProviders(): array
    {
        return ['custom.com'];
    }

    public function getTopLevelDomains(): array
    {
        return ['custom'];
    }

    public function getDisposableEmailProviders(): array
    {
        return ['custom.com', 'another.com'];
    }

    public function getRoleEmailPrefixes(): array
    {
        return ['custom'];
    }
}

常见问题解答

这个验证准确吗?

不,这些测试都不是100%准确的。与任何邮箱验证一样,总会有假阳性或假阴性。唯一保证邮箱有效的方法是发送邮件并请求回复。然而,这个库仍然可以用来检测一次性邮箱等,并可以作为良好的第一道防线。

我可以手动更新一次性邮箱提供者数据吗?

是的,该项目依赖于这个优秀的仓库来获取一次性邮箱提供者的列表。要从该仓库获取最新列表,您可以运行以下命令

./scripts/update-dispsable-email-providers.php

from the command line. 这将获取数据并将其保存到./src/data/disposable-email-providers.php