Adding fix for Ticket #2298.

Added encoding wrapper for email addresses.

git-svn-id: https://svn.cakephp.org/repo/branches/1.2.x.x@4702 3807eeeb-6ff5-0310-8944-8be069107fe0
This commit is contained in:
phpnut 2007-03-28 22:57:07 +00:00
parent 823dac8166
commit f1c1c70664
2 changed files with 45 additions and 10 deletions

View file

@ -208,6 +208,7 @@ class EmailComponent extends Object{
*/ */
function send($content = null){ function send($content = null){
$this->__createHeader(); $this->__createHeader();
$this->subject = $this->__encode($this->subject);
if($this->template === null) { if($this->template === null) {
if(is_array($content)){ if(is_array($content)){
@ -236,9 +237,6 @@ class EmailComponent extends Object{
} }
$__method = '__'.$this->delivery; $__method = '__'.$this->delivery;
if(low($this->charset) === 'utf-8') {
$this->subject = utf8_decode($this->subject);
}
return $this->$__method(); return $this->$__method();
} }
/** /**
@ -305,21 +303,21 @@ class EmailComponent extends Object{
* @access private * @access private
*/ */
function __createHeader(){ function __createHeader(){
$this->__header .= 'From: ' . $this->from . $this->_newLine; $this->__header .= 'From: ' . $this->__formatAddress($this->from) . $this->_newLine;
$this->__header .= 'Reply-To: ' . $this->replyTo . $this->_newLine; $this->__header .= 'Reply-To: ' . $this->__formatAddress($this->replyTo) . $this->_newLine;
$this->__header .= 'Return-Path: ' . $this->return . $this->_newLine; $this->__header .= 'Return-Path: ' . $this->__formatAddress($this->return) . $this->_newLine;
$addresses = null; $addresses = null;
if(!empty($this->cc)) { if(!empty($this->cc)) {
foreach ($this->cc as $cc) { foreach ($this->cc as $cc) {
$addresses .= $cc . ', '; $addresses .= $this->__formatAddress($cc) . ', ';
} }
$this->__header .= 'cc: ' . $addresses . $this->_newLine; $this->__header .= 'cc: ' . $addresses . $this->_newLine;
//$this->to .= ', ' . $addresses; //$this->to .= ', ' . $addresses;
} }
if(!empty($this->bcc)) { if(!empty($this->bcc)) {
foreach ($this->bcc as $bcc) { foreach ($this->bcc as $bcc) {
$addresses .= $bcc . ', '; $addresses .= $this->__formatAddress($bcc) . ', ';
} }
$this->__header .= 'Bcc: ' . $addresses . $this->_newLine; $this->__header .= 'Bcc: ' . $addresses . $this->_newLine;
//$this->to .= ', ' . $addresses; //$this->to .= ', ' . $addresses;
@ -425,6 +423,43 @@ class EmailComponent extends Object{
} }
return $formated; return $formated;
} }
/**
* Enter description here...
*
* @param string $subject
* @return unknown
* @access private
*/
function __encode($subject) {
if(low($this->charset) !== 'iso-8859-15') {
$start = "=?" . $this->charset . "?B?";
$end = "?=";
$spacer = $end . "\n " . $start;
$length = 75 - strlen($start) - strlen($end);
$length = $length - ($length % 4);
$subject = base64_encode($subject);
$subject = chunk_split($subject, $length, $spacer);
$spacer = preg_quote($spacer);
$subject = preg_replace("/" . $spacer . "$/", "", $subject);
$subject = $start . $subject . $end;
}
return $subject;
}
/**
* Enter description here...
*
* @param string $string
* @return unknown
* @access private
*/
function __formatAddress($string){
if(strpos($string, '<') !== false){
$value = explode('<', $string);
$string = $this->__encode($value[0]) . ' <' . $value[1];
}
}
/** /**
* Enter description here... * Enter description here...
* *