From 49a9d24ca7cb4328e1fc8a00fe25c81d06b94fc9 Mon Sep 17 00:00:00 2001 From: ADmad Date: Tue, 17 Dec 2013 23:59:08 +0530 Subject: [PATCH] By default use filter_var() to valid email addresses in CakeEmail. Refs #2477 --- lib/Cake/Network/Email/CakeEmail.php | 37 +++++++++++-------- .../Test/Case/Network/Email/CakeEmailTest.php | 3 ++ 2 files changed, 25 insertions(+), 15 deletions(-) diff --git a/lib/Cake/Network/Email/CakeEmail.php b/lib/Cake/Network/Email/CakeEmail.php index bc925d27f..fd3630d2a 100644 --- a/lib/Cake/Network/Email/CakeEmail.php +++ b/lib/Cake/Network/Email/CakeEmail.php @@ -16,7 +16,6 @@ * @license http://www.opensource.org/licenses/mit-license.php MIT License */ -App::uses('Validation', 'Utility'); App::uses('Multibyte', 'I18n'); App::uses('AbstractTransport', 'Network/Email'); App::uses('File', 'Utility'); @@ -317,7 +316,7 @@ class CakeEmail { /** * Regex for email validation - * If null, it will use built in regex + * If null, filter_var() will be used. * * @var string */ @@ -554,13 +553,10 @@ class CakeEmail { * @param string|array $email * @param string $name * @return CakeEmail $this - * @throws SocketException */ protected function _setEmail($varName, $email, $name) { if (!is_array($email)) { - if (!Validation::email($email, false, $this->_emailPattern)) { - throw new SocketException(__d('cake_dev', 'Invalid email: "%s"', $email)); - } + $this->_validateEmail($email); if ($name === null) { $name = $email; } @@ -572,15 +568,30 @@ class CakeEmail { if (is_int($key)) { $key = $value; } - if (!Validation::email($key, false, $this->_emailPattern)) { - throw new SocketException(__d('cake_dev', 'Invalid email: "%s"', $key)); - } + $this->_validateEmail($key); $list[$key] = $value; } $this->{$varName} = $list; return $this; } +/** + * Validate email address + * + * @param string $email + * @return void + * @throws SocketException If email address does not validate + */ + protected function _validateEmail($email) { + $valid = (($this->_emailPattern !== null && + preg_match($this->_emailPattern, $email)) || + filter_var($email, FILTER_VALIDATE_EMAIL) + ); + if (!$valid) { + throw new SocketException(__d('cake_dev', 'Invalid email: "%s"', $email)); + } + } + /** * Set only 1 email * @@ -612,9 +623,7 @@ class CakeEmail { */ protected function _addEmail($varName, $email, $name) { if (!is_array($email)) { - if (!Validation::email($email, false, $this->_emailPattern)) { - throw new SocketException(__d('cake_dev', 'Invalid email: "%s"', $email)); - } + $this->_validateEmail($email); if ($name === null) { $name = $email; } @@ -626,9 +635,7 @@ class CakeEmail { if (is_int($key)) { $key = $value; } - if (!Validation::email($key, false, $this->_emailPattern)) { - throw new SocketException(__d('cake_dev', 'Invalid email: "%s"', $key)); - } + $this->_validateEmail($key); $list[$key] = $value; } $this->{$varName} = array_merge($this->{$varName}, $list); diff --git a/lib/Cake/Test/Case/Network/Email/CakeEmailTest.php b/lib/Cake/Test/Case/Network/Email/CakeEmailTest.php index 83db092db..cbfe13e55 100644 --- a/lib/Cake/Test/Case/Network/Email/CakeEmailTest.php +++ b/lib/Cake/Test/Case/Network/Email/CakeEmailTest.php @@ -271,6 +271,9 @@ class CakeEmailTest extends CakeTestCase { ); $this->assertSame($this->CakeEmail->to(), $expected); $this->assertSame($this->CakeEmail, $result); + + $this->setExpectedException('SocketException'); + $this->CakeEmail->to(array('cake@localhost', 'CakePHP')); } /**