diff --git a/src/Core/Message.php b/src/Core/Message.php index d46601c..0dad601 100644 --- a/src/Core/Message.php +++ b/src/Core/Message.php @@ -6,6 +6,8 @@ namespace Clivern\Imap\Core; use Clivern\Imap\Core\Connection; +use Clivern\Imap\Core\Message\Header; +use Clivern\Imap\Core\Message\Actions; /** * Message Class @@ -19,6 +21,16 @@ class Message */ protected $connection; + /** + * @var Header + */ + protected $header; + + /** + * @var Actions + */ + protected $actions; + /** * @var integer */ @@ -34,9 +46,11 @@ class Message * * @param Connection $connection */ - public function __construct(Connection $connection) + public function __construct(Connection $connection, Header $header, Actions $actions) { $this->connection = $connection; + $this->header = $header; + $this->actions = $actions; } /** @@ -103,6 +117,18 @@ class Message return $this; } + /** + * Get Message Header + * + * @param string $key + * @param boolean $default + * @return mixed + */ + public function header($key, $default = false) + { + return $this->header->config($this->msg_number, $this->uid, $options = 0)->get($key, $default); + } + /** * Get Body * diff --git a/src/Core/Message/Actions b/src/Core/Message/Actions.php similarity index 66% rename from src/Core/Message/Actions rename to src/Core/Message/Actions.php index 1d229f3..24e8996 100644 --- a/src/Core/Message/Actions +++ b/src/Core/Message/Actions.php @@ -30,10 +30,22 @@ class Actions */ protected $message_uid; - public function __construct(Connection $connection, $message_number, $message_uid) + public function __construct(Connection $connection) { $this->connection = $connection; + } + + /** + * Config Message + * + * @param integer $message_number + * @param integer $message_uid + * @return Actions + */ + public function config($message_number, $message_uid) + { $this->message_number = $message_number; $this->message_uid = $message_uid; + return $this; } } \ No newline at end of file diff --git a/src/Core/Message/Header.php b/src/Core/Message/Header.php index d17515c..6aff6d8 100644 --- a/src/Core/Message/Header.php +++ b/src/Core/Message/Header.php @@ -25,21 +25,45 @@ class Header */ protected $message_number; - /** - * @var array - */ - protected $header = []; - /** * @var integer */ protected $message_uid; - public function __construct(Connection $connection, $message_number, $message_uid) + /** + * @var array + */ + protected $header = []; + + + /** + * Class Constructor + * + * @param Connection $connection + */ + public function __construct(Connection $connection) { $this->connection = $connection; + } + + /** + * Config Message + * + * @param integer $message_number + * @param integer $message_uid + * @return Header + */ + public function config($message_number, $message_uid, $options = 0) + { + if( !empty($this->header) ){ + return $this; + } + $this->message_number = $message_number; $this->message_uid = $message_uid; + $this->load(); + + return $this; } /** @@ -68,10 +92,31 @@ class Header /** * Load Header Data * - * @return boolean + * @param mixed $options + * @return Header */ - protected function load() + protected function load($options = 0) { - #~ + $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['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['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; + $this->header['recent'] = (isset($item_overview->recent)) ? $item_overview->recent : false; + $this->header['flagged'] = (isset($item_overview->flagged)) ? $item_overview->flagged : false; + $this->header['answered'] = (isset($item_overview->answered)) ? $item_overview->answered : false; + $this->header['deleted'] = (isset($item_overview->deleted)) ? $item_overview->deleted : false; + $this->header['seen'] = (isset($item_overview->seen)) ? $item_overview->seen : false; + $this->header['draft'] = (isset($item_overview->draft)) ? $item_overview->draft : false; + $this->header['udate'] = (isset($item_overview->udate)) ? $item_overview->udate : false; + } + + return $this; } } \ No newline at end of file diff --git a/src/Core/MessageIterator.php b/src/Core/MessageIterator.php index 17a8986..b426d6f 100644 --- a/src/Core/MessageIterator.php +++ b/src/Core/MessageIterator.php @@ -7,6 +7,8 @@ namespace Clivern\Imap\Core; use Clivern\Imap\Core\Message; use Clivern\Imap\Core\Connection; +use Clivern\Imap\Core\Message\Header; +use Clivern\Imap\Core\Message\Actions; /** * Message Iterator Class @@ -16,6 +18,9 @@ use Clivern\Imap\Core\Connection; class MessageIterator extends \ArrayIterator { + /** + * @var Connection + */ protected $connection; /** @@ -37,7 +42,7 @@ class MessageIterator extends \ArrayIterator */ public function current() { - $message = new Message($this->connection); + $message = new Message($this->connection, new Header($this->connection), new Actions($this->connection)); return $message->setUid(parent::current())->config(); } } \ No newline at end of file diff --git a/src/MailBox.php b/src/MailBox.php index bdc1d17..bffe2b0 100644 --- a/src/MailBox.php +++ b/src/MailBox.php @@ -9,6 +9,8 @@ use Clivern\Imap\Core\Connection; use Clivern\Imap\Core\MessageIterator; use Clivern\Imap\Core\Message; use Clivern\Imap\Core\Search; +use Clivern\Imap\Core\Message\Header; +use Clivern\Imap\Core\Message\Actions; /** * MailBox Class @@ -102,7 +104,7 @@ class MailBox { $this->connection->survive($this->folder); - $message = new Message($this->connection); + $message = new Message($this->connection, new Header($this->connection), new Actions($this->connection)); if( $message_number == false ){ return $message->setUid($message_uid)->config();