예제 #1
0
 static function fetch($options)
 {
     if ($mbox = imap_open(sprintf('{%1$s:%2$s/%3$s}INBOX', $options['server'], $options['port'], implode('/', $options['settings'])), $options['user'], $options['pass'])) {
         $ret = array();
         if (($messages = imap_num_msg($mbox)) > 0) {
             for ($message = 1; $message < $messages + 1; $message++) {
                 $eml = imap_fetchheader($mbox, $message) . imap_body($mbox, $message);
                 $data = array('Task' => array());
                 $email_data = LilTasksParseEmail::__parseEmailHeader($mbox, $message);
                 $data['Task']['title'] = $email_data['subject'];
                 $data['Task']['happened'] = strftime('%Y-%m-%d', strtotime($email_data['date']));
                 list($sender, $domain) = explode('@', $email_data['from']);
                 if ($sender == 'today') {
                     $data['Task']['deadline'] = strftime('%Y-%m-%d');
                 } else {
                     if ($sender == 'tomorrow') {
                         $data['Task']['deadline'] = strftime('%Y-%m-%d', time() + 24 * 60 * 60);
                     } else {
                         if (in_array(strtolower($sender), array('monday', 'tuesday', 'wednesday', 'thursday', 'saturday', 'sunday'))) {
                             $data['Task']['deadline'] = strftime('%Y-%m-%d', strtotime('next ' . ucfirst($sender)));
                         }
                     }
                 }
                 $hash = sha1($data['Task']['happened'] . '_' . $email_data['subject']);
                 $parts = array();
                 $data['Task']['descript'] = LilTasksParseEmail::__parseEmailBody($mbox, $message, $hash, $parts);
                 file_put_contents(TMP . $hash . '.eml', $eml);
                 $data['Attachment'][0] = array('model' => 'Task', 'filename' => array('name' => $hash . '.eml', 'tmp_name' => TMP . $hash . '.eml'), 'title' => 'SOURCE: ' . $data['Task']['title']);
                 App::uses('Sanitize', 'Utility');
                 foreach ($parts as $part) {
                     if (!empty($part['attachment'])) {
                         $data['Attachment'][] = array('model' => 'Task', 'filename' => array('name' => Sanitize::paranoid($part['attachment']['filename']), 'tmp_name' => $part['attachment']['tmp']), 'title' => $part['attachment']['filename']);
                     }
                 }
                 $ret[$message] = $data;
                 imap_delete($mbox, $message);
             }
         }
         return $ret;
         imap_close($mbox, CL_EXPUNGE);
     } else {
         var_dump(imap_errors());
     }
 }