Copyright (c) 2006-2010 osTicket http://www.osticket.com Released under the GNU General Public License WITHOUT ANY WARRANTY. See LICENSE.TXT for details. vim: expandtab sw=4 ts=4 sts=4: $Id: $ **********************************************************************/ require_once('Mail/mimeDecode.php'); require_once('Mail/RFC822.php'); class Mail_Parse { var $mime_message; var $include_bodies; var $decode_headers; var $decode_bodies; var $struct; function Mail_parse($mimeMessage,$includeBodies=true,$decodeHeaders=TRUE,$decodeBodies=TRUE){ $this->mime_message=$mimeMessage; $this->include_bodies=$includeBodies; $this->decode_headers=$decodeHeaders; $this->decode_bodies=$decodeBodies; } function decode() { $params = array('crlf' => "\r\n", 'input' =>$this->mime_message, 'include_bodies'=> $this->include_bodies, 'decode_headers'=> $this->decode_headers, 'decode_bodies' => $this->decode_bodies); $this->splitBodyHeader(); $this->struct=Mail_mimeDecode::decode($params); return (PEAR::isError($this->struct) || !(count($this->struct->headers)>1))?FALSE:TRUE; } function splitBodyHeader() { if (preg_match("/^(.*?)\r?\n\r?\n(.*)/s",$this->mime_message, $match)) { $this->header=$match[1]; } } function getStruct(){ return $this->struct; } function getHeader() { if(!$this->header) $this->splitBodyHeader(); return $this->header; } function getError(){ return PEAR::isError($this->struct)?$this->struct->getMessage():''; } function getFromAddressList(){ return Mail_Parse::parseAddressList($this->struct->headers['from']); } function getToAddressList(){ //Delivered-to incase it was a BBC mail. return Mail_Parse::parseAddressList($this->struct->headers['to']?$this->struct->headers['to']:$this->struct->headers['delivered-to']); } function getCcAddressList(){ return $this->struct->headers['cc']?Mail_Parse::parseAddressList($this->struct->headers['cc']):null; } function getMessageId(){ return $this->struct->headers['message-id']; } function getSubject(){ return $this->struct->headers['subject']; } function getBody(){ $body=''; if(!($body=$this->getPart($this->struct,'text/plain'))) { if(($body=$this->getPart($this->struct,'text/html'))) { //Cleanup the html. $body=str_replace("