Skip to content

Commit

Permalink
By default use filter_var() to valid email addresses in CakeEmail.
Browse files Browse the repository at this point in the history
Refs #2477
  • Loading branch information
ADmad committed Dec 17, 2013
1 parent b5d7628 commit 49a9d24
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 15 deletions.
37 changes: 22 additions & 15 deletions lib/Cake/Network/Email/CakeEmail.php
Expand Up @@ -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');
Expand Down Expand Up @@ -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
*/
Expand Down Expand Up @@ -554,13 +553,10 @@ public function emailPattern($regex = null) {
* @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;
}
Expand All @@ -572,15 +568,30 @@ protected function _setEmail($varName, $email, $name) {
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
*
Expand Down Expand Up @@ -612,9 +623,7 @@ protected function _setEmailSingle($varName, $email, $name, $throwMessage) {
*/
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;
}
Expand All @@ -626,9 +635,7 @@ protected function _addEmail($varName, $email, $name) {
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);
Expand Down
3 changes: 3 additions & 0 deletions lib/Cake/Test/Case/Network/Email/CakeEmailTest.php
Expand Up @@ -271,6 +271,9 @@ public function testTo() {
);
$this->assertSame($this->CakeEmail->to(), $expected);
$this->assertSame($this->CakeEmail, $result);

$this->setExpectedException('SocketException');
$this->CakeEmail->to(array('cake@localhost', 'CakePHP'));
}

/**
Expand Down

0 comments on commit 49a9d24

Please sign in to comment.