X-Git-Url: http://git.roojs.org/?a=blobdiff_plain;f=Mailer.php;h=596ff9cd348a223a6a808cf7272ae01b13327e4a;hb=23c1f1c3f623285c4e255786b06ff78fdfd9bf1e;hp=8601f71545a7df7813ffa918c2a858dc33be8259;hpb=866eae759a07c4f7c0689d309379f24db72cfe0b;p=Pman.Core diff --git a/Mailer.php b/Mailer.php index 8601f715..596ff9cd 100644 --- a/Mailer.php +++ b/Mailer.php @@ -13,25 +13,37 @@ * * usage: * - * - * $x= new Pman_Core_Mailer($opts) - * - * $x= Pman_Core_Mailer(array( - page => - contents - template - html_locale => 'en' == always use the 'english translated verison' - replaceImages => true|false, - locale => 'en' .... or zh_hk.... - rcpts => array() // override recipients.. - attachments => array( - array( - file: - name : (optional) - uses basename of file - mimetype : - ), - ...... - mail_method : (SMTP or SMTPMX) + * + * require_once 'Pman/Core/Mailer.php'; + * $x= new Pman_Core_Mailer(array( + 'page' => $this, + // if bcc is property of this, then it will be used (BAD DESIGN) + 'rcpts' => array(), + 'template' => 'your_template', + // must be in templates/mail direcotry.. + // header and plaintext verison in mail/your_template.txt + // if you want a html body - use mail/your_template.body.html + + // 'bcc' => 'xyz@abc.com,abc@xyz.com', // string... + // 'contents' => array(), // << keys must be trusted + // if bcc is property of contents, then it will be used (BAD DESIGN) + + // 'html_locale => 'en', // always use the 'english translated verison' + // 'cache_images => true, // -- defaults to caching images - set to false to disable. + // 'replaceImages => false, // should images be replaced. + // 'urlmap => array( // map urls from template to a different location. + // 'https://www.mysite.com/' => 'http://localhost/', + // ), + // 'locale' => 'en', // .... or zh_hk.... + + // 'attachments' => array( + // array( + // 'file' => '/path/to/file', // file location + // name => 'myfile.pdf', // (optional) - uses basename of file + // mimetype : + // ), + // + // 'mail_method' => 'SMTP', // or SMTPMX ) * @@ -51,7 +63,7 @@ */ class Pman_Core_Mailer { - var $debug = false; + var $debug = 0; var $page = false; /* usually a html_flexyframework_page */ var $contents = false; /* object or array */ var $template = false; /* string */ @@ -59,6 +71,7 @@ class Pman_Core_Mailer { var $rcpts = false; var $templateDir = false; var $locale = false; // eg. 'en' or 'zh_HK' + var $urlmap = array(); var $html_locale = false; // eg. 'en' or 'zh_HK' @@ -69,11 +82,24 @@ class Pman_Core_Mailer { var $mail_method = 'SMTP'; + var $cache_images = true; + + var $bcc = false; + function Pman_Core_Mailer($args) { foreach($args as $k=>$v) { // a bit trusting.. $this->$k = $v; } + // allow core mailer debug setting. + $ff = HTML_FlexyFramework::get(); + + if (!empty($ff->Core_Mailer['debug'])) { + $this->debug = $ff->Core_Mailer['debug']; + } + //$this->log("URL MAP"); + //$this->log($this->urlmap); + } /** @@ -84,11 +110,11 @@ class Pman_Core_Mailer { { $templateFile = $this->template; - $args = $this->contents; + $args = (array)$this->contents; $content = clone($this->page); - foreach((array)$args as $k=>$v) { + foreach($args as $k=>$v) { $content->$k = $v; } @@ -258,22 +284,35 @@ class Pman_Core_Mailer { $parts[2] = $mime->get(); $parts[1] = $mime->headers($parts[1]); } -// echo '
'; -// print_r('parts'); -// print_r($parts[2]); -// exit; - // list($recipents,$headers,$body) = $parts; - return array( + + + $ret = array( 'recipents' => $parts[0], 'headers' => $parts[1], 'body' => $parts[2], 'mailer' => $this ); + if ($this->rcpts !== false) { + $ret['recipents'] = $this->rcpts; + } + // if 'to' is empty, then add the recipents in there... (must be an array? + if (!empty($ret['recipents']) && is_array($ret['recipents']) && + (empty($ret['headers']['To']) || !strlen(trim($ret['headers']['To'])))) { + $ret['headers']['To'] = implode(',', $ret['recipents']); + } + + + // add bcc if necessary.. + if (!empty($this->bcc)) { + $ret['bcc'] = $this->bcc; + } + return $ret; } function send($email = false) { + $ff = HTML_FlexyFramework::get(); - $pg = HTML_FlexyFramework::get()->page; + $pg = $ff->page; $email = is_array($email) ? $email : $this->toData(); @@ -283,11 +322,13 @@ class Pman_Core_Mailer { return $email; } - if ($this->debug) { - echo '';echo htmlspecialchars(print_r($email,true)); - } + + //$this->log( htmlspecialchars(print_r($email,true))); + ///$recipents = array($this->email); - $mailOptions = PEAR::getStaticProperty('Mail','options'); +// $mailOptions = PEAR::getStaticProperty('Mail','options'); + + $mailOptions = isset($ff->Mail) ? $ff->Mail : array(); //print_R($mailOptions);exit; if ($this->mail_method == 'SMTPMX' && empty($mailOptions['mailname'])) { @@ -297,7 +338,7 @@ class Pman_Core_Mailer { $mail = Mail::factory($this->mail_method,$mailOptions); if ($this->debug) { - $mail->debug = $this->debug; + $mail->debug = (bool) $this->debug; } $email['headers']['Date'] = date('r'); @@ -309,6 +350,9 @@ class Pman_Core_Mailer { } $rcpts = $this->rcpts == false ? $email['recipents'] : $this->rcpts; + + + // this makes contents untrustable... if (!empty($this->contents['bcc']) && is_array($this->contents['bcc'])) { $rcpts =array_merge(is_array($rcpts) ? $rcpts : array($rcpts), $this->contents['bcc']); } @@ -380,16 +424,16 @@ class Pman_Core_Mailer { $url = $link->getAttribute('href'); $file = $ff->rootDir . $url; - if (!preg_match('#^http://#', $url)) { + if (!preg_match('#^(http|https)://#', $url)) { $file = $ff->rootDir . $url; if (!file_exists($file)) { - echo $file; +// echo $file; $link->setAttribute('href', 'missing:' . $file); continue; } } else { - $file = $url; + $file = $this->mapurl($url); } $par = $link->parentNode; @@ -409,9 +453,10 @@ class Pman_Core_Mailer { function fetchImage($url) { - if($this->debug) { - echo "FETCH : $url\n"; - } + + + $this->log( "FETCH : $url\n"); + if ($url[0] == '/') { $ff = HTML_FlexyFramework::get(); $file = $ff->rootDir . $url; @@ -423,7 +468,7 @@ class Pman_Core_Mailer { return array( 'mimetype' => $mt, 'ext' => $ext, - 'contentid' => md5($file), + 'contentid' => md5($file), // mailer makes md5 cid's' -- cid with attachment-** are done by mailer. 'file' => $file ); @@ -458,8 +503,12 @@ class Pman_Core_Mailer { $user = $uinfo['name']; $cache = ini_get('session.save_path')."/Pman_Core_Mailer-{$user}/" . md5($url); - if (file_exists($cache) and filemtime($cache) > strtotime('NOW - 1 WEEK')) { + if ($this->cache_images && + file_exists($cache) && + filemtime($cache) > strtotime('NOW - 1 WEEK') + ) { $ret = json_decode(file_get_contents($cache), true); + $this->log("fetched from cache"); $ret['file'] = $cache . '.data'; return $ret; } @@ -468,9 +517,15 @@ class Pman_Core_Mailer { } require_once 'HTTP/Request.php'; - $a = new HTTP_Request($url); + $a = new HTTP_Request($this->mapurl($url)); $a->sendRequest(); - file_put_contents($cache .'.data', $a->getResponseBody()); + $data = $a->getResponseBody(); + + $this->log("got file of size " . strlen($data)); + $this->log("save contentid " . md5($url)); + + file_put_contents($cache .'.data', $data); + $mt = $a->getResponseHeader('Content-Type'); @@ -490,6 +545,38 @@ class Pman_Core_Mailer { return $ret; } + function mapurl($in) + { + + foreach($this->urlmap as $o=>$n) { + if (strpos($in,$o) === 0) { + $ret =$n . substr($in,strlen($o)); + $this->log("mapURL in $in = $ret"); + return $ret; + } + } + $this->log("mapurl no change - $in"); + return $in; + + + } + + + function log($val) + { + if (!$this->debug) { + return; + } + if ($this->debug < 2) { + echo '' . print_r($val,true). "\n"; + return; + } + $fh = fopen('/tmp/core_mailer.log', 'a'); + fwrite($fh, date('Y-m-d H:i:s -') . json_encode($val) . "\n"); + fclose($fh); + + + } } \ No newline at end of file