diff --git a/src/Symfony/Component/Validator/Constraints/Email.php b/src/Symfony/Component/Validator/Constraints/Email.php index 65537f6dfc..a1265e37cc 100644 --- a/src/Symfony/Component/Validator/Constraints/Email.php +++ b/src/Symfony/Component/Validator/Constraints/Email.php @@ -22,4 +22,5 @@ class Email extends Constraint { public $message = 'This value is not a valid email address'; public $checkMX = false; + public $checkHost = false; } diff --git a/src/Symfony/Component/Validator/Constraints/EmailValidator.php b/src/Symfony/Component/Validator/Constraints/EmailValidator.php index b26dd55441..a55c137e76 100644 --- a/src/Symfony/Component/Validator/Constraints/EmailValidator.php +++ b/src/Symfony/Component/Validator/Constraints/EmailValidator.php @@ -51,9 +51,11 @@ class EmailValidator extends ConstraintValidator $valid = false; } - // Check MX records + // Check for host DNS resource records if ($valid && $constraint->checkMX) { $valid = $this->checkMX($host); + } else if ($valid && $constraint->checkHost) { + $valid = $this->checkHost($host); } } @@ -69,7 +71,7 @@ class EmailValidator extends ConstraintValidator /** * Check DNS Records for MX type. * - * @param string $host Host name + * @param string $host Hostname * * @return Boolean */ @@ -77,4 +79,16 @@ class EmailValidator extends ConstraintValidator { return checkdnsrr($host, 'MX'); } + + /** + * Check if one of MX, A or AAAA DNS RR exists. + * + * @param string $host Hostname + * + * @return Boolean + */ + private function checkHost($host) + { + return $this->checkMX($host) || (checkdnsrr($host, "A") || checkdnsrr($host, "AAAA")); + } }