emailverifier/emailchecker

一个易于使用、相对准确且可扩展的PHP 7+邮件验证库

dev-main 2021-01-25 08:36 UTC

This package is not auto-updated.

Last update: 2024-10-01 01:36:10 UTC


README

PHP Email Validation Tool

codecov Build Status Code Climate

一个可扩展的PHP 7+邮件验证库

本库的目标是提供比仅检查邮件格式是否有效更详细的邮件验证报告,并且能够轻松地添加自定义验证。

当前此工具检查以下内容

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

安装

composer require emailverifier/emailchecker

使用方法

快速开始

// 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