citco/email-validator

一个易于使用、相对准确且可扩展的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 

您可以通过导航到https://: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

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