Exemplo n.º 1
0
 /**
  * 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');
 }
Exemplo n.º 3
0
 /** 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;
     }
 }
Exemplo n.º 4
0
 /** 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;
   }
 }
Exemplo n.º 5
0
 /**
  * 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');
 }