#!/usr/bin/env php . */ define('INSTALLDIR', realpath(dirname(__FILE__) . '/../..')); $shortoptions = 'fi::'; $longoptions = array('id::', 'foreground'); $helptext = <<$value) { $this->$attr = $value; } $this->log(LOG_INFO, "INITIALIZE IMAPDaemon {" . $this->name() . "}"); } function name() { return strtolower('imapdaemon.'.$this->user.'.'.crc32($this->mailbox)); } function run() { $this->connect(); while(true) { if(imap_ping($this->conn) || $this->connect()) { $this->check_mailbox(); } sleep($this->poll_frequency); } } function check_mailbox() { $count = imap_num_msg($this->conn); $this->log(LOG_INFO, "Found $count messages"); if($count > 0){ $handler = new IMAPMailHandler(); for($i=1; $i <= $count; $i++) { $rawmessage = imap_fetchheader($this->conn, $count, FT_PREFETCHTEXT) . imap_body($this->conn, $i); $handler->handle_message($rawmessage); imap_delete($this->conn, $i); } imap_expunge($this->conn); $this->log(LOG_INFO, "Finished processing messages"); } } function log($level, $msg) { $text = $this->name() . ': '.$msg; common_log($level, $text); if (!$this->daemonize) { $line = common_log_line($level, $text); echo $line; echo "\n"; } } function connect() { $this->conn = imap_open($this->mailbox, $this->user, $this->password); if($this->conn){ $this->log(LOG_INFO, "Connected"); return true; }else{ $this->log(LOG_INFO, "Failed to connect: " . imap_last_error()); return false; } } } class IMAPMailHandler extends MailHandler { function error($from, $msg) { $this->log(LOG_INFO, "Error: $from $msg"); $headers['To'] = $from; $headers['Subject'] = _m('Error'); return mail_send(array($from), $headers, $msg); } } if (have_option('i', 'id')) { $id = get_option_value('i', 'id'); } else if (count($args) > 0) { $id = $args[0]; } else { $id = null; } $foreground = have_option('f', 'foreground'); foreach(ImapPlugin::$instances as $pluginInstance){ $daemon = new IMAPDaemon($id, !$foreground, array( 'mailbox' => $pluginInstance->mailbox, 'user' => $pluginInstance->user, 'password' => $pluginInstance->password, 'poll_frequency' => $pluginInstance->poll_frequency )); $daemon->runOnce(); }