stymiee/email-validator

邮件验证器库基于PHP内置的filter_var($emailAddress, FILTER_VALIDATE_EMAIL);,增加了默认的MX记录检查。它还提供了对一次性电子邮件地址、免费电子邮件服务提供商和自定义禁止域名列表的额外验证。

1.1.4 2024-04-08 21:20 UTC

This package is auto-updated.

Last update: 2024-09-09 13:01:23 UTC


README

Latest Stable Version Total Downloads Build Scrutinizer Code Quality Maintainability License

PHP 邮件验证器 (email-validator)

PHP 邮件验证器将验证电子邮件地址是否符合以下所有或某些条件

  • 格式有效
  • 已配置MX记录(可选)
  • 不是一次性电子邮件地址(可选)
  • 不是免费电子邮件账户(可选)
  • 不是禁止的电子邮件域名(可选)
  • 标记使用“加号技巧”的Gmail账户,并返回一个净化后的电子邮件地址

邮件验证器是可配置的,因此您可以完全控制验证的强度。

要求

  • PHP 7.2或更高版本

安装

如果您使用Composer管理项目的依赖项,只需将stymiee/email-validator添加到项目的composer.json文件中即可。

以下是一个仅定义PHP Simple Encryption依赖项的最小composer.json文件示例

{
    "require": {
        "stymiee/email-validator": "^1"
    }
}

功能描述

邮件验证器库基于PHP内置的filter_var($emailAddress, FILTER_VALIDATE_EMAIL);,增加了默认的MX记录检查。它还提供了对一次性电子邮件地址、免费电子邮件服务提供商和自定义禁止域名列表的额外验证。

验证MX

如果配置中的checkMxRecords设置为true(见下文),则将验证域名是否存在并已配置MX记录。如果域名不存在或不存在MX记录,则很可能该电子邮件地址未被使用。

限制一次性电子邮件地址

许多滥用系统或未按预期使用系统的用户可能会使用提供短暂(约10分钟)电子邮件地址的一次性电子邮件服务。如果配置中的checkDisposableEmail设置为true(见下文),则将验证域名以确保它未与一次性电子邮件地址提供商相关联。

如果您发现公共列表提供商中没有您已识别的域名,则可以将其添加到该列表中。示例在examples目录中提供,展示了如何进行此操作。

限制免费电子邮件地址提供商

许多滥用系统或未按预期使用系统的用户可能会使用提供免费电子邮件地址的免费电子邮件服务。如果配置中的checkFreeEmail设置为true(见下文),则将验证域名以确保它未与免费电子邮件地址提供商相关联。

如果您发现公共列表提供商中没有您已识别的域名,则可以将其添加到该列表中。示例在examples目录中提供,展示了如何进行此操作。

限制禁止域名

如果您有来自滥用您的系统的域的用户,或者您有需要阻止某些域(例如Gmail或Yahoo邮件等公共电子邮件提供商)的业务规则,您可以通过在配置中设置checkBannedListedEmailtrue(见下文)并提供一个禁止的域名数组来阻止它们。示例在examples目录中提供,展示了如何进行此操作。

使用“加号技巧”标记Gmail地址

Gmail允许在Google账户中通过在用户名部分之后添加一个+字符和唯一的标识符来创建唯一的电子邮件地址。如果不显式检查,用户可以创建无限数量的唯一电子邮件地址,这些地址都属于同一个账户。

当使用Gmail账户时,可以执行特殊检查,以获取一个经过净化的电子邮件地址(例如,没有使用“加号技巧”的地址),然后在该系统中检查其唯一性。

配置

要配置电子邮件验证器,您可以传递一个包含以下参数/值的数组

checkMxRecords

一个布尔值,用于启用/禁用MX记录验证。默认启用。

checkBannedListedEmail

一个布尔值,用于启用/禁用禁止的域名验证。默认禁用。

checkDisposableEmail

一个布尔值,用于启用/禁用一次性电子邮件地址验证。默认禁用。

checkFreeEmail

一个布尔值,用于启用/禁用免费电子邮件地址提供者验证。默认禁用。

localDisposableOnly

一个布尔值,当设置为true时,将不会检索第三方一次性电子邮件提供者列表。如果您在本地缓存提供者列表,这将很有用,因为性能很重要。默认禁用。

LocalFreeOnly

一个布尔值,当设置为true时,将不会检索第三方免费电子邮件提供者列表。如果您在本地缓存提供者列表,这将很有用,因为性能很重要。默认禁用。

bannedList

一个不允许用于电子邮件地址的域名的数组。

disposableList

一个疑似一次性电子邮件地址提供者的域名的数组。

freeList

一个提供免费电子邮件地址的域名的数组。

示例

$config = [
    'checkMxRecords' => true,
    'checkBannedListedEmail' => true,
    'checkDisposableEmail' => true,
    'checkFreeEmail' => true,
    'bannedList' => $bannedDomainList,
    'disposableList' => $customDisposableEmailList,
    'freeList' => $customFreeEmailList,
];
$emailValidator = new EmailValidator($config);

示例

<?php

namespace EmailValidator;

require('../vendor/autoload.php');

$customDisposableEmailList = [
    'example.com',
];

$bannedDomainList = [
    'domain.com',
];

$customFreeEmailList = [
    'example2.com',
];

$testEmailAddresses = [
    'test@domain.com',
    'test@johnconde.net',
    'test@gmail.com',
    'test@hotmail.com',
    'test@outlook.com',
    'test@yahoo.com',
    'test@domain.com',
    'test@mxfuel.com',
    'test@example.com',
    'test@example2.com',
    'test@nobugmail.com',
    'test@cellurl.com',
    'test@10minutemail.com',
    'test+example@gmail.com',
];

$config = [
    'checkMxRecords' => true,
    'checkBannedListedEmail' => true,
    'checkDisposableEmail' => true,
    'checkFreeEmail' => true,
    'bannedList' => $bannedDomainList,
    'disposableList' => $customDisposableEmailList,
    'freeList' => $customFreeEmailList,
];
$emailValidator = new EmailValidator($config);

foreach ($testEmailAddresses as $emailAddress) {
    $emailIsValid = $emailValidator->validate($emailAddress);
    echo  ($emailIsValid) ? 'Email is valid' : $emailValidator->getErrorReason();
    if ($emailValidator->isGmailWithPlusChar()) {
        printf(
            ' (Sanitized address: %s)',
            $emailValidator->getGmailAddressWithoutPlus()
        );
    }
    echo PHP_EOL;
}

输出

Domain is banned
Email is valid
Domain is used by free email providers
Domain is used by free email providers
Domain is used by free email providers
Domain is used by free email providers
Domain is banned
Domain does not accept email
Domain is used by disposable email providers
Domain is used by free email providers
Domain is used by disposable email providers
Domain does not accept email
Domain is used by disposable email providers
Domain is used by free email providers (Sanitized address: test@gmail.com)

说明

电子邮件地址将与已知的一次性电子邮件地址提供者列表进行核对,这些列表是从公共一次性电子邮件地址提供者列表中聚合而来的。这需要在验证地址时发送HTTP请求以获取列表。

支持

如果您需要使用此库的帮助,请首先查看此包中包含的HELP.md文件。它包括常见问题和解决方案,以及如何请求额外的帮助。