diff --git a/lib/Cake/Network/Email/CakeEmail.php b/lib/Cake/Network/Email/CakeEmail.php index 5ca5dd28d4a..82e4463b3b9 100644 --- a/lib/Cake/Network/Email/CakeEmail.php +++ b/lib/Cake/Network/Email/CakeEmail.php @@ -1254,7 +1254,11 @@ protected function _wrap($message, $wrapLength = CakeEmail::LINE_LENGTH_MUST) { $formatted[] = ''; continue; } - if (!preg_match('/<[a-z]+.+>/i', $line)) { + if (strlen($line) < $wrapLength) { + $formatted[] = $line; + continue; + } + if (!preg_match('/<[a-z]+.*>/i', $line)) { $formatted = array_merge( $formatted, explode("\n", wordwrap($line, $wrapLength, "\n")) diff --git a/lib/Cake/Test/Case/Network/Email/CakeEmailTest.php b/lib/Cake/Test/Case/Network/Email/CakeEmailTest.php index b30e2d8a83d..41878f1385a 100644 --- a/lib/Cake/Test/Case/Network/Email/CakeEmailTest.php +++ b/lib/Cake/Test/Case/Network/Email/CakeEmailTest.php @@ -1622,58 +1622,6 @@ public function testHeaderEncoding() { $this->assertContains('ってテーブルを作ってやってたらう', $result['message']); } - public function testWrapLongLine() { - $message = '' . str_repeat('x', CakeEmail::LINE_LENGTH_MUST) . ""; - - $this->CakeEmail->reset(); - $this->CakeEmail->transport('Debug'); - $this->CakeEmail->from('cake@cakephp.org'); - $this->CakeEmail->to('cake@cakephp.org'); - $this->CakeEmail->subject('Wordwrap Test'); - $this->CakeEmail->config(array('empty')); - $result = $this->CakeEmail->send($message); - $expected = "' . str_repeat('x', CakeEmail::LINE_LENGTH_MUST) . "\r\n\r\n\r\n"; - $this->assertEquals($expected, $result['message']); - } - - public function testWrapIncludeTag() { - $message = 'CakePHP'; - - $this->CakeEmail->reset(); - $this->CakeEmail->transport('Debug'); - $this->CakeEmail->from('cake@cakephp.org'); - $this->CakeEmail->to('cake@cakephp.org'); - $this->CakeEmail->subject('Wordwrap Test'); - $this->CakeEmail->config(array('empty')); - $result = $this->CakeEmail->send($message); - $expected = "{$message}\r\n\r\n"; - $this->assertEquals($expected, $result['message']); - - $message = 'fooCakeEmail->send($message); - $expected = "{$message}\r\n\r\n"; - $this->assertEquals($expected, $result['message']); - } - - public function testWrapForJapaneseEncoding() { - $this->skipIf(!function_exists('mb_convert_encoding')); - - $message = mb_convert_encoding('受け付けました', 'iso-2022-jp', 'UTF-8'); - - $this->CakeEmail->reset(); - $this->CakeEmail->transport('Debug'); - $this->CakeEmail->from('cake@cakephp.org'); - $this->CakeEmail->to('cake@cakephp.org'); - $this->CakeEmail->subject('Wordwrap Test'); - $this->CakeEmail->config(array('empty')); - $this->CakeEmail->charset('iso-2022-jp'); - $this->CakeEmail->headerCharset('iso-2022-jp'); - $result = $this->CakeEmail->send($message); - $expected = "{$message}\r\n\r\n"; - $this->assertEquals($expected, $result['message']); - } - /** * Tests that the body is encoded using the configured charset * @@ -1918,4 +1866,72 @@ protected function _getEmailByNewStyleCharset($charset, $headerCharset) { return $email; } + public function testWrapLongLine() { + $message = '' . str_repeat('x', CakeEmail::LINE_LENGTH_MUST) . ""; + + $this->CakeEmail->reset(); + $this->CakeEmail->transport('Debug'); + $this->CakeEmail->from('cake@cakephp.org'); + $this->CakeEmail->to('cake@cakephp.org'); + $this->CakeEmail->subject('Wordwrap Test'); + $this->CakeEmail->config(array('empty')); + $result = $this->CakeEmail->send($message); + $expected = "' . str_repeat('x', CakeEmail::LINE_LENGTH_MUST) . "\r\n\r\n\r\n"; + $this->assertEquals($expected, $result['message']); + + $str1 = "a "; + $str2 = " b"; + $len = strlen($str1) + strlen($str2); + $message = $str1 . str_repeat('x', CakeEmail::LINE_LENGTH_MUST - $len - 1) . $str2; + + $result = $this->CakeEmail->send($message); + $expected = "{$message}\r\n\r\n"; + $this->assertEquals($expected, $result['message']); + + $message = $str1 . str_repeat('x', CakeEmail::LINE_LENGTH_MUST - $len) . $str2; + + $result = $this->CakeEmail->send($message); + $expected = "{$message}\r\n\r\n"; + $this->assertEquals($expected, $result['message']); + + $message = $str1 . str_repeat('x', CakeEmail::LINE_LENGTH_MUST - $len + 1) . $str2; + + $result = $this->CakeEmail->send($message); + $expected = $str1 . str_repeat('x', CakeEmail::LINE_LENGTH_MUST - $len + 1) . sprintf("\r\n%s\r\n\r\n", trim($str2)); + $this->assertEquals($expected, $result['message']); + } + + public function testWrapIncludeLessThanSign() { + $str = 'fooCakeEmail->reset(); + $this->CakeEmail->transport('Debug'); + $this->CakeEmail->from('cake@cakephp.org'); + $this->CakeEmail->to('cake@cakephp.org'); + $this->CakeEmail->subject('Wordwrap Test'); + $this->CakeEmail->config(array('empty')); + $result = $this->CakeEmail->send($message); + $expected = "{$message}\r\n\r\n"; + $this->assertEquals($expected, $result['message']); + } + + public function testWrapForJapaneseEncoding() { + $this->skipIf(!function_exists('mb_convert_encoding')); + + $message = mb_convert_encoding('受け付けました', 'iso-2022-jp', 'UTF-8'); + + $this->CakeEmail->reset(); + $this->CakeEmail->transport('Debug'); + $this->CakeEmail->from('cake@cakephp.org'); + $this->CakeEmail->to('cake@cakephp.org'); + $this->CakeEmail->subject('Wordwrap Test'); + $this->CakeEmail->config(array('empty')); + $this->CakeEmail->charset('iso-2022-jp'); + $this->CakeEmail->headerCharset('iso-2022-jp'); + $result = $this->CakeEmail->send($message); + $expected = "{$message}\r\n\r\n"; + $this->assertEquals($expected, $result['message']); + } }