host = $host; $this->username = $username; $this->password = $password; } /** * @access private * @description connect to imap server * @return null */ private function connect() { if ($this->connection = imap_open('{'.$this->host.':993/ssl/imap}INBOX',$this->username,$this->password)) { return true; } return false; } /** * @access public * @description checks email. Sets $this->messages * @return null */ public function check() { if (!$this->connect()) { throw new Exception('Could not connect to inbox.'); } $headers = imap_headers($this->connection); foreach ($headers as $msgid=>$header) { $msgid++; // get and parse all the headers $message = imap_rfc822_parse_headers(imap_fetchheader($this->connection,$msgid)); // get the body $body = imap_fetchbody($this->connection,$msgid,1); // delete this message imap_delete($this->connection,$msgid); $this->messages[] = array($message->from[0]->mailbox.'@'.$message->from[0]->host,$body); } $this->disconnect(); } /** * @access public * @description processes messages individually * @return null */ public function process() { foreach ($this->messages as $msg) { $message = MessageFactory::newMessage($msg[0],$msg[1]); $message->process(); } } /** * @access private * @description disconnects from email server * @return null */ private function disconnect() { imap_close($this->connection); } /** * @access public * @description adds a scheduler * @param Schedule * @return null */ public function addSchedule($sched) { if ($sched instanceof Schedule) $this->schedules[] = $sched; } /** * @access public * @description runs all schedules * @return null */ public function processSchedules() { foreach ($this->schedules as $sched) { $sched->process(time()); } } private $messages = array(); private $schedules = array(); } ?>