X-Git-Url: http://git.roojs.org/?a=blobdiff_plain;f=Mailer.php;h=7da09a830987298f09257b356543f7011a39a067;hb=c1af5e6bb6064e88469651271f4d9aaff34d69c0;hp=7f416ba674bb4b5a6a08cdc3cffcf5bfc1670597;hpb=cf35660047285cab39bb1ab07731a59c692b68a4;p=Pman.Core diff --git a/Mailer.php b/Mailer.php index 7f416ba6..7da09a83 100644 --- a/Mailer.php +++ b/Mailer.php @@ -77,7 +77,7 @@ class Pman_Core_Mailer { var $html_locale = false; // eg. 'en' or 'zh_HK' var $images = array(); // generated list of cid images for sending var $attachments = false; - var $css_inline = false; // not supported + var $css_inline = false; // put the css into the html var $css_embed = false; // put the css tags into the body. var $mail_method = 'SMTP'; @@ -86,7 +86,9 @@ class Pman_Core_Mailer { var $bcc = false; - function Pman_Core_Mailer($args) { + var $body_cls = false; + + function __construct($args) { foreach($args as $k=>$v) { // a bit trusting.. $this->$k = $v; @@ -108,10 +110,8 @@ class Pman_Core_Mailer { function toData() { - $templateFile = $this->template; $args = (array)$this->contents; - $content = clone($this->page); foreach($args as $k=>$v) { @@ -122,16 +122,12 @@ class Pman_Core_Mailer { $ff = HTML_FlexyFramework::get(); $http_host = isset($_SERVER["HTTP_HOST"]) ? $_SERVER["HTTP_HOST"] : 'pman.HTTP_HOST.not.set'; - if (isset($ff->Pman['HTTP_HOST'])) { + if (isset($ff->Pman['HTTP_HOST']) && $http_host != 'localhost') { $http_host = $ff->Pman['HTTP_HOST']; } - $content->HTTP_HOST = $http_host; - - - // this should be done by having multiple template sources...!!! require_once 'HTML/Template/Flexy.php'; @@ -139,6 +135,7 @@ class Pman_Core_Mailer { $tmp_opts = array( // 'forceCompile' => true, 'site_prefix' => false, + 'multiSource' => true, ); if (!empty($this->templateDir)) { $tmp_opts['templateDir'] = $this->templateDir; @@ -159,9 +156,8 @@ class Pman_Core_Mailer { $htmlbody = false; $html_tmp_opts = $tmp_opts; $htmltemplate = new HTML_Template_Flexy( $html_tmp_opts ); - if (is_string($htmltemplate->resolvePath('mail/'.$templateFile.'.body.html')) ) { + if (is_string($htmltemplate->resolvePath('mail/'.$templateFile.'.body.html')) ) { // then we have a multi-part email... - if (!empty($this->html_locale)) { $html_tmp_opts['locale'] = $this->html_locale; } @@ -169,33 +165,42 @@ class Pman_Core_Mailer { $htmltemplate->compile('mail/'. $templateFile.'.body.html'); $htmlbody = $htmltemplate->bufferedOutputObject($content); - print_r($htmlbody);exit; $this->htmlbody = $htmlbody; // for the html body, we may want to convert the attachments to images. // var_dump($htmlbody);exit; + + if(!empty($content->body_cls) && strlen($content->body_cls)){ + $htmlbody = $this->htmlbodySetClass($htmlbody, $content->body_cls); + } + if ($this->replaceImages) { $htmlbody = $this->htmlbodytoCID($htmlbody); } + if ($this->css_embed) { - $htmlbody = $this->htmlbodyCssEmbed($htmlbody); - + $htmlbody = $this->htmlbodyCssEmbed($htmlbody); + } + + if ($this->css_inline && strlen($this->css_inline)) { + $htmlbody = $this->htmlbodyInlineCss($htmlbody); } + } $tmp_opts['nonHTML'] = true; //print_R($tmp_opts); // $tmp_opts['force'] = true; - $template = new HTML_Template_Flexy( $tmp_opts ); + $template = new HTML_Template_Flexy( $tmp_opts ); $template->compile('mail/'. $templateFile.'.txt'); /* use variables from this object to ouput data. */ $mailtext = $template->bufferedOutputObject($content); //print_r($mailtext);exit; - print_r($mailtext);exit; + //echo "
";print_R($mailtext);
@@ -311,12 +316,13 @@ class Pman_Core_Mailer {
     }
     function send($email = false)
     {
+			
         $ff = HTML_FlexyFramework::get();
         
         $pg = $ff->page;
         
-        
         $email = is_array($email)  ? $email : $this->toData();
+        
         if (is_a($email, 'PEAR_Error')) {
             $pg->addEvent("COREMAILER-FAIL",  false, "email toData failed"); 
       
@@ -367,7 +373,10 @@ class Pman_Core_Mailer {
                 'Subject: '  . @$email['headers']['Subject']
             ); 
         }  else {
-            $pg->addEvent("COREMAILER-FAIL",  false, $ret->toString());
+            $pg->addEvent("COREMAILER-FAIL",  false,
+                "Sending to : " . ( is_array($rcpts) ? implode(', ', $rcpts) : $rcpts ) .
+                " Error: " . $ret->toString());
+
         }
         
         return $ret;
@@ -380,6 +389,8 @@ class Pman_Core_Mailer {
         @$dom->loadHTML('' .$html);
         $imgs= $dom->getElementsByTagName('img');
         
+        $urls = array();
+        
         foreach ($imgs as $i=>$img) {
             $url  = $img->getAttribute('src');
             if (preg_match('#^cid:#', $url)) {
@@ -390,16 +401,19 @@ class Pman_Core_Mailer {
                 continue;
             }
             
-            $conv = $this->fetchImage($url);
-            $this->images[$conv['contentid']] = $conv;
-            
+            if(!array_key_exists($url, $urls)){
+                $conv = $this->fetchImage($url);
+                $urls[$url] = $conv;
+                $this->images[$conv['contentid']] = $conv;
+            } else {
+                $conv = $urls[$url];
+            }
+            $img->setAttribute('origsrc', $url);
             $img->setAttribute('src', 'cid:' . $conv['contentid']);
-            
-            
         }
-        return $dom->saveHTML();
         
         
+        return $dom->saveHTML();
         
     }
     function htmlbodyCssEmbed($html)
@@ -450,7 +464,60 @@ class Pman_Core_Mailer {
         
     }
     
+    function htmlbodyInlineCss($html)
+    {   
+        $dom = new DOMDocument();
+        
+        @$dom->loadHTML('' .$html);
+        
+        $html = $dom->getElementsByTagName('html');
+        $head = $dom->getElementsByTagName('head');
+        $body = $dom->getElementsByTagName('body');
+        
+        if(!$head->length){
+            $head = $dom->createElement('head');
+            $html->item(0)->insertBefore($head, $body->item(0));
+            $head = $dom->getElementsByTagName('head');
+        }
+        
+        $s = $dom->createElement('style');
+        $e = $dom->createTextNode($this->css_inline);
+        $s->appendChild($e);
+        $head->item(0)->appendChild($s);
+        
+        return $dom->saveHTML();
+        
+        /* Inline
+        require_once 'HTML/CSS/InlineStyle.php';
+        
+        $doc = new HTML_CSS_InlineStyle($html);
+        
+        $doc->applyStylesheet($this->css_inline);
+        
+        $html = $doc->getHTML();
+        
+        return $html;
+        */
+    }
     
+    function htmlbodySetClass($html, $cls)
+    {
+        $dom = new DOMDocument();
+        
+        @$dom->loadHTML('' .$html);
+        
+        $body = $dom->getElementsByTagName('body');
+        if (!empty($body->length)) {
+            $body->item(0)->setAttribute('class', $cls);
+        } else {
+            $body = $dom->createElement("body");
+            $body->setAttribute('class', $cls);
+            $dom->appendChild($body);
+        }
+        
+        
+        return $dom->saveHTML();
+    }
     
     function fetchImage($url)
     {
@@ -518,7 +585,9 @@ class Pman_Core_Mailer {
         }
         
         require_once 'HTTP/Request.php';
-        $a = new HTTP_Request($this->mapurl($url));
+        
+        $real_url = str_replace(' ', '%20', $this->mapurl($url));
+        $a = new HTTP_Request($real_url);
         $a->sendRequest();
         $data = $a->getResponseBody();