/** * {@inheritdoc} */ public function validate($value, Constraint $constraint) { if (!$constraint instanceof Email) { throw new UnexpectedTypeException($constraint, __NAMESPACE__ . '\\Email'); } if (null === $value || '' === $value) { return; } if (!is_scalar($value) && !(is_object($value) && method_exists($value, '__toString'))) { throw new UnexpectedTypeException($value, 'string'); } $value = (string) $value; if (null === $constraint->strict) { $constraint->strict = $this->isStrict; } if ($constraint->strict) { if (!class_exists('\\Egulias\\EmailValidator\\EmailValidator')) { throw new RuntimeException('Strict email validation requires egulias/email-validator'); } $strictValidator = new \Egulias\EmailValidator\EmailValidator(); if (!$strictValidator->isValid($value, false, true)) { if ($this->context instanceof ExecutionContextInterface) { $this->context->buildViolation($constraint->message)->setParameter('{{ value }}', $this->formatValue($value))->setCode(Email::INVALID_FORMAT_ERROR)->addViolation(); } else { $this->buildViolation($constraint->message)->setParameter('{{ value }}', $this->formatValue($value))->setCode(Email::INVALID_FORMAT_ERROR)->addViolation(); } return; } } elseif (!preg_match('/^.+\\@\\S+\\.\\S+$/', $value)) { if ($this->context instanceof ExecutionContextInterface) { $this->context->buildViolation($constraint->message)->setParameter('{{ value }}', $this->formatValue($value))->setCode(Email::INVALID_FORMAT_ERROR)->addViolation(); } else { $this->buildViolation($constraint->message)->setParameter('{{ value }}', $this->formatValue($value))->setCode(Email::INVALID_FORMAT_ERROR)->addViolation(); } return; } $host = substr($value, strpos($value, '@') + 1); // Check for host DNS resource records if ($constraint->checkMX) { if (!$this->checkMX($host)) { if ($this->context instanceof ExecutionContextInterface) { $this->context->buildViolation($constraint->message)->setParameter('{{ value }}', $this->formatValue($value))->setCode(Email::MX_CHECK_FAILED_ERROR)->addViolation(); } else { $this->buildViolation($constraint->message)->setParameter('{{ value }}', $this->formatValue($value))->setCode(Email::MX_CHECK_FAILED_ERROR)->addViolation(); } } return; } if ($constraint->checkHost && !$this->checkHost($host)) { if ($this->context instanceof ExecutionContextInterface) { $this->context->buildViolation($constraint->message)->setParameter('{{ value }}', $this->formatValue($value))->setCode(Email::HOST_CHECK_FAILED_ERROR)->addViolation(); } else { $this->buildViolation($constraint->message)->setParameter('{{ value }}', $this->formatValue($value))->setCode(Email::HOST_CHECK_FAILED_ERROR)->addViolation(); } } }
/** * Process * * @param mixed $value * @param array $options * * @return string|null */ public function process($value, array $options = array()) { if ($value === null) { return; } if (is_object($value) || is_resource($value) || is_array($value)) { $this->throwException($options, 'error'); } $options = array_replace(array('check_dns' => true, 'strict' => true), $options); $validators = array(); if ($options['strict']) { $validators[] = new \Egulias\EmailValidator\Validation\RFCValidation(); } if ($options['check_dns']) { $validators[] = new \Egulias\EmailValidator\Validation\DNSCheckValidation(); } $validations = new \Egulias\EmailValidator\Validation\MultipleValidationWithAnd($validators); $validator = new \Egulias\EmailValidator\EmailValidator(); if (!$validator->isValid($value, $validations)) { $this->throwException($options, 'error'); } return (string) $value; }
}, $raw); // Zou ! if ($process === true) { // Le vrai gars ici c'est lui :) $validator = new Egulias\EmailValidator\EmailValidator(); // Brrbrbrbrrrrbrr (bruit de moteur pour les incultes !) foreach ($raw as $email) { // La ligne est vide :( if (empty($email)) { continue; } // L'email est doublon... Ca peut devenir vilain sur les grosses listes. if (in_array($email, $cleaned, true)) { continue; } if ($validator->isValid($email, CHECK_DNS, true)) { $cleaned[] = $email; } else { // On stocke les erreurs mais elles ne servent nulle part... $errors[$email] = ['error' => $validator->getError(), 'warning' => $validator->getWarnings()]; } } // Petit enregistrement pour la protection SPAM (limitée au touristes qui ne savent pas effacer leurs cookies) if (!empty(LOGIN_PASSWORD)) { $_SESSION['last'] = time(); } $countc = count($cleaned); } } ?> <!DOCTYPE html>