/** * Set the body of this entity, either as a string, or array of view * variables if a view is set, or as an instance of * {@link Swift_OutputByteStream}. * * @param mixed the body of the message. If a $this->view is set and this * is a string, this is passed to the view as $body. If $this->view is set * and this is an array, the array values are passed to the view like in the * controller render() method * @param string content type optional. For html, set to 'html/text' * @param string charset optional */ public function setBody($body = '', $contentType = null, $charset = null) { if ($this->view !== null) { if (!is_array($body)) { $body = array('body' => $body); } // if Yii::app()->controller doesn't exist create a dummy // controller to render the view (needed in the console app) if (isset(Yii::app()->controller)) { $controller = Yii::app()->controller; } else { $controller = new CController('YiiMail'); } // renderPartial won't work with CConsoleApplication, so use // renderInternal - this requires that we use an actual path to the // view rather than the usual alias $viewPath = Yii::getPathOfAlias($this->view) . '.php'; $body = $controller->renderInternal($viewPath, array_merge($body, array('mail' => $this)), true); } return $this->message->setBody($body, $contentType, $charset); }
/** * {@inheritdoc) */ public function transform(\Swift_Mime_Message $message) { $body = $message->getBody(); $body = preg_replace_callback('/(src|background)="(http[^"]*)"/', function ($matches) use($message) { $attribute = $matches[1]; $imagePath = $matches[2]; if ($fp = fopen($imagePath, "r")) { $imagePath = $message->embed(\Swift_Image::fromPath($imagePath)); fclose($fp); } return sprintf('%s="%s"', $attribute, $imagePath); }, $body); $body = preg_replace_callback('/url\\((http[^"]*)\\)/', function ($matches) use($message) { $imagePath = $matches[1]; if ($fp = fopen($imagePath, "r")) { $imagePath = $message->embed(\Swift_Image::fromPath($imagePath)); fclose($fp); } return sprintf('url(%s)', $imagePath); }, $body); $message->setBody($body, 'text/html'); }
/** Restore a changed message back to its original state */ private function restoreMessage(Swift_Mime_Message $message) { if ($this->lastMessage === $message) { if (isset($this->originalBody)) { $message->setBody($this->originalBody); $this->originalBody = null; } if (!empty($this->originalHeaders)) { foreach ($message->getHeaders()->getAll() as $header) { if (array_key_exists($header->getFieldName(), $this->originalHeaders)) { $header->setFieldBodyModel($this->originalHeaders[$header->getFieldName()]); } } $this->originalHeaders = array(); } if (!empty($this->originalChildBodies)) { $children = (array) $message->getChildren(); foreach ($children as $child) { $id = $child->getId(); if (array_key_exists($id, $this->originalChildBodies)) { $child->setBody($this->originalChildBodies[$id]); } } $this->originalChildBodies = array(); } $this->lastMessage = null; } }
/** Restore a changed message back to its original state */ private function _restoreMessage(Swift_Mime_Message $message) { if ($this->_lastMessage === $message) { if (isset($this->_originalBody)) { $message->setBody($this->_originalBody); $this->_originalBody = null; } if (isset($this->_originalSubject)) { $message->setSubject($this->_originalSubject); $this->_originalSubject = null; } if (!empty($this->_originalChildBodies)) { $children = (array) $message->getChildren(); foreach ($children as $child) { $id = $child->getId(); if (array_key_exists($id, $this->_originalChildBodies)) { $child->setBody($this->_originalChildBodies[$id]); } } $this->_originalChildBodies = array(); } $this->_lastMessage = null; } }
/** * Embed pictures * * @param \Swift_Mime_Message $message E-mail message * * @access public * @return void * @author Etienne de Longeaux <*****@*****.**> */ public function pictureEmbed(\Swift_Mime_Message &$message) { $body = $message->getBody(); $body = preg_replace_callback('/(src|background)="(http[^"]*)"/', function ($matches) use($message) { $attribute = $matches[1]; $imagePath = $matches[2]; if ($fp = fopen($imagePath, "r")) { // You can embed files from a URL if allow_url_fopen is on in php.ini $imagePath = $message->embed(\Swift_Image::fromPath($imagePath)); fclose($fp); } return sprintf('%s="%s"', $attribute, $imagePath); }, $body); $body = preg_replace_callback('/url\\((http[^"]*)\\)/', function ($matches) use($message) { $imagePath = $matches[1]; if ($fp = fopen($imagePath, "r")) { // You can embed files from a URL if allow_url_fopen is on in php.ini $imagePath = $message->embed(\Swift_Image::fromPath($imagePath)); fclose($fp); } return sprintf('url(%s)', $imagePath); }, $body); $message->setBody($body, 'text/html'); }