Еmail (по нашим правилам) бывает:
- невалидным
- бесплатным (учебное заведение, бесплатные почтовые сервисы)
- фейковым (пересылочные домены, домены-однодневки)
- корпоративным (все остальные)
- FakeDomains::DOMAINS - константа, хранит фейковые домены
- FakeDomains::PATTERNS - константа, хранит паттерны фейковых доменов
- FreeDomains::DOMAINS - константа, хранит домены бесплатных почтовых сервисов
- check_email() - битриксовская функция
class Emails
{
public const NOT_VALID = 'NOT_VALID';
public const FAKE = 'FAKE';
public const FREE = 'FREE';
public const CORPORATE = 'CORPORATE';
public static function isValidEmail(string $email, bool $checkDomain = true): bool
{
$emailIsValid = check_email($email);
if ($emailIsValid && $checkDomain) {
$emailIsValid = check_email($email, false, true);
if (!$emailIsValid) {
mail(EMAIL_FOR_LOGS, 'checkdnsrr failed', $email);
}
}
return $emailIsValid;
}
public static function isValidDomain(string $domain): bool
{
return self::isValidEmail('test@' . $domain, false);
}
public static function isFakeEmail(string $email): bool
{
return self::isFakeDomain(self::getDomain($email));
}
public static function isFakeDomain(string $domain): bool
{
$domain = strtolower($domain);
return !self::isFreeDomain($domain)
&& (
in_array($domain, FakeDomains::DOMAINS)
|| self::isFakeDomainByPattern($domain)
);
}
public static function isFakeDomainByPattern(string $domain): bool
{
$domain = strtolower($domain);
foreach (FakeDomains::PATTERNS as $pattern) {
if (preg_match($pattern, $domain)) {
return true;
}
}
return false;
}
public static function isFreeEmail(string $email): bool
{
return self::isFreeDomain(self::getDomain($email));
}
public static function isFreeDomain(string $domain): bool
{
return in_array(strtolower($domain), FreeDomains::DOMAINS);
}
public static function isCorporateEmail(string $email): bool
{
return self::isCorporateDomain(self::getDomain($email));
}
public static function isCorporateDomain(string $domain): bool
{
return !self::isFreeDomain($domain) && !self::isFakeDomain($domain);
}
public static function getDomain(string $email): string
{
$arEmail = explode('@', mb_strtolower(trim($email)));
return $arEmail[1] ?? '';
}
public static function getTypeEmail(string $email): string
{
if(!self::isValidEmail($email)){
return self::NOT_VALID;
}
return self::getTypeDomain(self::getDomain($email));
}
public static function getTypeDomain(string $domain): string
{
if(self::isFreeDomain($domain)){
return self::FREE;
}
if(self::isFakeDomain($domain)){
return self::FAKE;
}
return self::CORPORATE;
}
} |