Index: trunk/core/kernel/utility/email.php =================================================================== diff -u -r2275 -r2444 --- trunk/core/kernel/utility/email.php (.../email.php) (revision 2275) +++ trunk/core/kernel/utility/email.php (.../email.php) (revision 2444) @@ -19,34 +19,34 @@ var $TransferEncoding; var $From; var $To; - - + + var $IsMultipart; var $Parts; var $Files; - - + + var $TextBoundary; var $EmailBoundary; - + function kEmailMessage(){ //$this->TextBoundary = uniqid(time()); - $this->EmailBoundary = uniqid(time()); + $this->EmailBoundary = uniqid(time()); $this->LineFeed = "\n"; $this->Charset='ISO-8859-1'; $this->TransferEncoding='8bit'; - $this->Body = ''; + $this->Body = ''; $this->setHeader('Subject', 'Automatically generated message'); $this->HeadersArray=array(); - + $this->setHeader('Mime-Version', '1.0'); } - + function setHeader($header, $value){ $this->HeadersArray[$header] = $value; $this->Compiled = false; } - + function setHeaders($headers){ $headers=str_replace("\r", "", $headers); $headers_lines = explode("\n", $headers); @@ -55,65 +55,77 @@ $header_value = trim($header_value); $this->setHeader($header_field, $header_value); } - + } function appendHeader($header, $value){ $this->HeadersArray[$header][] = $value; - $this->Compiled = false; + $this->Compiled = false; } - - + + function setFrom($from, $name=''){ - + $this->From = $from; - + if ($name!=''){ $from = trim($name).' <'.$from.'>'; } $this->setHeader('From', trim($from)); } function setTo($to, $name=''){ - + $this->To = $to; - + if ($name!=''){ $to = trim($name).' <'.$to.'>'; } - + $this->setHeader('To', trim($to)); } function setSubject($subj){ $this->setHeader('Subject', $subj); - } - + } + function SetCC($to_cc){ $this->appendHeader('CC', $to_cc); } function SetBCC($to_bcc){ $this->appendHeader('BCC', $to_bcc); - } - + } + function setReplyTo($reply_to){ $this->setHeader('Reply-to', $reply_to); } - + + function Clear() + { + $this->Compiled = false; + $this->Body = ''; + $this->BodyHtml = ''; + $this->BodyText = ''; + $this->Headers = ''; + $this->Files = ''; + $this->From = ''; + $this->To = ''; + } + function setTextBody($body_text){ - + $this->BodyText = $body_text; $this->Compiled = false; } function setHTMLBody($body_html){ - + $this->BodyHtml = $body_html; $this->IsMultipart = true; $this->Compiled = false; - } - + } + function compileBody(){ $search = array ( "'(<\/td>.*)[\r\n]+(.*'si", // "'^[\s\n\r\t]+'", //strip all spacers & newlines in the begin of document // "'[\s\n\r\t]+$'", //strip all spacers & newlines in the end of document - "'&(quot|#34);'i", + "'&(quot|#34);'i", "'&(amp|#38);'i", "'&(lt|#60);'i", "'&(gt|#62);'i", @@ -134,7 +146,7 @@ "'&(pound|#163);'i", "'&(copy|#169);'i", "'&#(\d+);'e" - ); + ); $replace = array ( "\\1\t\\2", @@ -155,10 +167,10 @@ chr(163), chr(169), "chr(\\1)" - ); + ); if($this->BodyHtml){ - + $not_html = preg_replace ($search, $replace, $this->BodyHtml); $not_html = strip_tags($not_html); // $not_html = $this->removeBlankLines($not_html); @@ -179,42 +191,42 @@ $this->Body .= 'Content-Description: HTML part'.$this->LF(); $this->Body .= 'Content-Disposition: inline'.$this->LF(); $this->Body .= $this->LF(); - + $this->BodyHtml = str_replace("\r", "", $this->BodyHtml); $this->BodyHtml = str_replace("\n", $this->LF(), $this->BodyHtml); - + $this->Body .= $this->BodyHtml; $this->Body .= $this->LF().$this->LF(); - - + + $this->IsMultipart = true; - + }else{ $not_html = preg_replace ($search, $replace, $this->BodyText); $not_html = strip_tags($not_html); // $not_html = $this->removeBlankLines($not_html); // Fixing problem with add exclamation characters "!" into the body of the email. $not_html = wordwrap($not_html, 72); - - + + if ($this->IsMultipart){ $this->Body .= '------='.$this->EmailBoundary.$this->LF(); $this->Body .= 'Content-Type: text/plain;'.$this->LF()." ".'charset="'.$this->Charset.'"'.$this->LF(); $this->Body .= 'Content-Disposition: inline'.$this->LF(); $this->Body .= $this->LF(); - $this->Body .= $not_html.$this->LF().$this->LF(); + $this->Body .= $not_html.$this->LF().$this->LF(); }else{ //$this->BodyText = str_replace("\r", "", $this->BodyText); - //$this->BodyText = str_replace("\n", $this->LF(), $this->BodyText); + //$this->BodyText = str_replace("\n", $this->LF(), $this->BodyText); $this->Body = $not_html; } - + } - - } - - + } + + + function setCharset($charset){ $this->Charset = $charset; $this->Compiled = false; @@ -223,28 +235,28 @@ function setLineFeed($linefeed){ $this->LineFeed=$linefeed; } - - + + function attachFile($filepath, $mime="application/octet-stream"){ - + if(is_file($filepath)){ $file_info = array('path'=>$filepath, 'mime'=>$mime); - $this->Files[] = $file_info; + $this->Files[] = $file_info; }else{ die('File "'.$filepath.'" not exist...'."\n"); } - + $this->IsMultipart = true; $this->Compiled = false; } - + function LF($str=''){ $str = str_replace("\n", "", $str); $str = str_replace("\r", "", $str); return $str.$this->LineFeed; } - + function getContentType(){ $content_type=""; if ($this->IsMultipart){ @@ -254,17 +266,17 @@ $content_type .= $this->LF('text/plain;'); $content_type .= $this->LF(" ".'charset='.$this->Charset); } - + return $content_type; - + } - + // ======================================== - + function compileHeaders(){ $this->Headers=""; - + // $this->Headers .= "From: ".$this->LF($this->From); //if ($this->ReplyTo){ // $this->Headers .= "Reply-To: ".$this->ReplyTo.$this->LF(); @@ -286,25 +298,25 @@ } } */ - + foreach ($this->HeadersArray as $key => $val){ if ($key=="To" || $key=="") continue; // avoid duplicate "To" field in headers if (is_array($val)){ $val = chunk_split(implode(', ', $val),72, $this->LF().' '); - - + + $this->Headers .= $key.": ".$val.$this->LF(); }else{ $this->Headers .= $key.": ".$val.$this->LF(); } - + } - + $this->Headers .= "Content-Type: ".$this->getContentType(); - + //$this->Headers .= "Content-Transfer-Encoding: ".$this->TransferEncoding.$this->LF(); - - + + } function compileFiles(){ @@ -319,72 +331,72 @@ $attachment_header .= $this->LF('Content-Description: '.basename($filepath)); $attachment_header .= $this->LF('Content-Disposition: attachment; filename="'.basename($filepath).'"'); $attachment_header .= $this->LF(''); - + $attachment_data = fread(fopen($filepath,"rb"),filesize($filepath)); $attachment_data = base64_encode($attachment_data); $attachment_data = chunk_split($attachment_data,72); - + $this->Body .= $attachment_header.$attachment_data.$this->LF(''); $this->IsMultipart = true; } - } + } } - + function compile(){ - + if ($this->Compiled) return; - + $this->compileBody(); - + $this->compileFiles(); - + $this->compileHeaders(); - + // Compile if ($this->IsMultipart){ - $this->Body .= '------='.$this->EmailBoundary.'--'.$this->LF(); + $this->Body .= '------='.$this->EmailBoundary.'--'.$this->LF(); } - + $this->Compiled = true; } - + // ======================================== - + function getHeaders(){ - + $this->Compile(); return $this->Headers; } - + function getBody(){ - + $this->Compile(); return $this->Body; } function send(){ - + return mail($this->HeadersArray['To'], $this->HeadersArray['Subject'], "", $this->getHeaders().$this->LF().$this->LF().$this->getBody()); //return mail($this->HeadersArray['To'], $this->HeadersArray['Subject'], "", $this->getHeaders().$this->LF().$this->LF().$this->getBody(), '-f'.$this->From); - + } function sendSMTP(&$smtp_object, $smtp_host, $user, $pass, $auth_used = 0){ - + $params['host'] = $smtp_host; // The smtp server host/ip $params['port'] = 25; // The smtp server port $params['helo'] = $_SERVER['HTTP_HOST']; // What to use when sending the helo command. Typically, your domain/hostname $params['auth'] = TRUE; // Whether to use basic authentication or not $params['user'] = $user; // Username for authentication - - + + $params['pass'] = $pass; // Password for authentication - $params['debug'] = 1; + $params['debug'] = 1; if ($auth_used == 0){ $params['authmethod'] = 'NOAUTH'; // forse disabling auth } - + $send_params['recipients'] = array($this->To); // The recipients (can be multiple) $send_params['headers'] = array( 'From: '.$this->HeadersArray['From'], // Headers @@ -396,8 +408,8 @@ $send_params['from'] = $this->From; // This is used as in the MAIL FROM: cmd // It should end up as the Return-Path: header $send_params['body']="\n"; - - + + if($smtp_object->connect($params) && $smtp_object->send($send_params)){ return true; }else { @@ -411,8 +423,8 @@ } } - - + + }