diff --git a/src/Core/Message.php b/src/Core/Message.php index 2f626d0..c2c2466 100644 --- a/src/Core/Message.php +++ b/src/Core/Message.php @@ -183,103 +183,4 @@ class Message return $body; } - - /** - * Parse Address List - * - * @param string $address_string - * @return array - */ - public function parseAddressList($address_string, $default_host = "example.com") - { - $address_array = imap_rfc822_parse_adrlist($address_string, $default_host); - $address_list = []; - - foreach ($address_array as $id => $val) { - $address_list[] = [ - 'mailbox' => $val->mailbox, - 'host' => $val->host, - 'personal' => $val->personal, - 'adl' => $val->adl - ]; - } - - return $address_list; - } - - /** - * Fetch Body - * - * @param mixed $section - * @param mixed $options - * @return string - */ - public function fetchBody($section = 0, $options = 0) - { - return imap_fetchbody($this->connection->getStream(), $this->msg_number, $section, $options); - } - - /** - * Fetch Overview - * - * @param boolean $sequence - * @param mixed $options - * @return array - */ - public function fetchOverview($sequence = false, $options = 0) - { - if( $sequence == false ){ - $overview = imap_fetch_overview($this->connection->getStream(), $this->msg_number, $options); - }else{ - $overview = imap_fetch_overview($this->connection->getStream(), $sequence, $options); - } - - $items_overview = []; - - foreach ($overview as $key => $item_overview) { - $items_overview[] = [ - 'subject' => (isset($item_overview->subject)) ? $item_overview->subject : false, - 'from' => (isset($item_overview->from)) ? $item_overview->from : false, - 'to' => (isset($item_overview->to)) ? $item_overview->to : false, - 'date' => (isset($item_overview->date)) ? $item_overview->date : false, - 'message_id' => (isset($item_overview->message_id)) ? $item_overview->message_id : false, - 'size' => (isset($item_overview->size)) ? $item_overview->size : false, - 'uid' => (isset($item_overview->uid)) ? $item_overview->uid : false, - 'msgno' => (isset($item_overview->msgno)) ? $item_overview->msgno : false, - 'recent' => (isset($item_overview->recent)) ? $item_overview->recent : false, - 'flagged' => (isset($item_overview->flagged)) ? $item_overview->flagged : false, - 'answered' => (isset($item_overview->answered)) ? $item_overview->answered : false, - 'deleted' => (isset($item_overview->deleted)) ? $item_overview->deleted : false, - 'seen' => (isset($item_overview->seen)) ? $item_overview->seen : false, - 'draft' => (isset($item_overview->draft)) ? $item_overview->draft : false, - 'udate' => (isset($item_overview->udate)) ? $item_overview->udate : false - ]; - } - - return $items_overview; - } - - /** - * Fetch Header - * - * @param mixed $options - * @return string - */ - public function fetchHeader($options = 0) - { - return imap_fetchheader($this->connection->getStream(), $this->msg_number, $options); - } - - /** - * Fetch Structure - * - * @param mixed $options - * @return stdClass - */ - public function fetchStructure($options = 0) - { - $structure = imap_fetchstructure($this->connection->getStream(), $this->msg_number, $options); - - return $structure; - } } \ No newline at end of file diff --git a/src/Core/Message/Body.php b/src/Core/Message/Body.php index 8d0b25e..c82980f 100644 --- a/src/Core/Message/Body.php +++ b/src/Core/Message/Body.php @@ -30,6 +30,16 @@ class Body */ protected $message_uid; + /** + * @var integer + */ + protected $encoding; + + /** + * @var string + */ + protected $message = ''; + /** * Class Constructor @@ -55,4 +65,46 @@ class Body return $this; } + + /** + * Get Message + * + * @param integer $option + * @return string + */ + public function getMessage($option = 2) + { + if( !empty($this->message) ){ + return $this->message; + } + + $structure = imap_fetchstructure($this->connection->getStream(), $this->message_number); + + if(isset($structure->parts) && is_array($structure->parts) && isset($structure->parts[1])) { + $part = $structure->parts[1]; + $this->message = imap_fetchbody($this->connection->getStream(),$this->message_number , $option); + + $this->encoding = $part->encoding; + + if($part->encoding == 3) { + $this->message = imap_base64($this->message); + } elseif($part->encoding == 1) { + $this->message = imap_8bit($this->message); + } else { + $this->message = imap_qprint($this->message); + } + } + + return $this->message; + } + + /** + * Get Encoding + * + * @return integer + */ + public function getEncoding() + { + return $this->encoding; + } } \ No newline at end of file diff --git a/src/Core/Message/Header.php b/src/Core/Message/Header.php index eca5242..06de82d 100644 --- a/src/Core/Message/Header.php +++ b/src/Core/Message/Header.php @@ -89,6 +89,29 @@ class Header return (isset($this->header[strtolower($key)])); } + /** + * Parse Address List + * + * @param string $address_string + * @return array + */ + public function parseAddressList($address_string, $default_host = "example.com") + { + $address_array = imap_rfc822_parse_adrlist($address_string, $default_host); + $address_list = []; + + foreach ($address_array as $id => $val) { + $address_list[] = [ + 'mailbox' => $val->mailbox, + 'host' => $val->host, + 'personal' => $val->personal, + 'adl' => $val->adl + ]; + } + + return $address_list; + } + /** * Load Header Data * @@ -100,11 +123,13 @@ class Header $overview = imap_fetch_overview($this->connection->getStream(), $this->message_number, $options); foreach ($overview as $key => $item_overview) { - $this->header['subject'] = (isset($item_overview->subject)) ? $item_overview->subject : false; + $this->header['subject'] = (isset($item_overview->subject)) ? imap_utf8($item_overview->subject) : false; $this->header['from'] = (isset($item_overview->from)) ? $item_overview->from : false; $this->header['to'] = (isset($item_overview->to)) ? $item_overview->to : false; $this->header['date'] = (isset($item_overview->date)) ? $item_overview->date : false; $this->header['message_id'] = (isset($item_overview->message_id)) ? $item_overview->message_id : false; + $this->header['in_reply_to'] = (isset($item_overview->in_reply_to)) ? $item_overview->in_reply_to : false; + $this->header['references'] = (isset($item_overview->references)) ? explode(" ", $item_overview->references) : false; $this->header['size'] = (isset($item_overview->size)) ? $item_overview->size : false; $this->header['uid'] = (isset($item_overview->uid)) ? $item_overview->uid : false; $this->header['msgno'] = (isset($item_overview->msgno)) ? $item_overview->msgno : false;