コード例 #1
0
 /**
  * @access private
  * @param Array $messageIndexSet
  * @param bool $indexAsUid
  * @param Folder $folder
  * @return WebMailMessageCollection
  */
 function &_loadMessageHeaders(&$messageIndexSet, $indexAsUid, $folder)
 {
     $messageCollection = new WebMailMessageCollection();
     $uids =& $this->_getPop3Uids();
     $size =& $this->_getPop3Sizes();
     foreach ($messageIndexSet as $index) {
         $idx = $index;
         if ($indexAsUid) {
             $idx = $this->_getMessageIndexFromUid($uids, $index);
         }
         if ($idx < 0 || $idx > count($uids)) {
             continue;
         }
         $msgText = $this->_pop3Mail->get_top($idx);
         if (!$msgText) {
             continue;
         }
         $message = new WebMailMessage();
         $message->LoadMessageFromRawBody($msgText);
         $message->IdMsg = $idx;
         $message->Uid = $uids[$idx];
         $size =& $this->_getPop3Sizes();
         $message->Size = $size[$idx];
         if ($folder->SyncType == FOLDERSYNC_DirectMode) {
             $message->Flags |= MESSAGEFLAGS_Seen;
         }
         $messageCollection->Add($message);
         unset($message);
     }
     return $messageCollection;
 }
コード例 #2
0
 /**
  * @param array $messageIdSet
  * @param Folder $folder
  * @return MessageCollection
  */
 function GetMessages(&$messageIdUidSet, &$folder, $setRead = false)
 {
     $mailCollection = new WebMailMessageCollection();
     $GLOBALS[MailDefaultCharset] = $this->_account->GetDefaultIncCharset();
     $GLOBALS[MailOutputCharset] = $this->_account->GetUserCharset();
     ConvertUtils::SetLimits();
     $messageIdSet = array_keys($messageIdUidSet);
     $messageUidSet = array_values($messageIdUidSet);
     for ($i = 0, $c = count($messageIdUidSet); $i < $c; $i++) {
         $messageId =& $messageIdSet[$i];
         $messageUid =& $messageUidSet[$i];
         $mailMess = null;
         if ($folder->SyncType == FOLDERSYNC_DirectMode) {
             if ($this->MailStorage->Connect()) {
                 $mailMess =& $this->MailStorage->LoadMessage($messageUid, true, $folder);
             }
         } elseif ($this->DbStorage->Connect()) {
             if ($this->DbStorage->GetMessageDownloadedFlag($messageId, $folder)) {
                 $mailMess =& $this->DbStorage->LoadMessage($messageId, false, $folder);
             } elseif ($this->MailStorage->Connect()) {
                 $mailMess =& $this->MailStorage->LoadMessage($messageUid, true, $folder);
             }
         }
         if ($setRead && $mailMess) {
             $mailMess->Flags = $mailMess->Flags | MESSAGEFLAGS_Seen;
         }
         if ($mailMess) {
             $mailMess->IdFolder = $folder->IdDb;
         }
         $mailCollection->Add($mailMess);
         unset($mailMess);
     }
     return $mailCollection;
 }
コード例 #3
0
ファイル: class_dbstorage.php プロジェクト: JDevelopers/Mail
 /**
  * @param int $pageNumber
  * @param string $condition
  * @param FolderCollection $folders
  * @param bool $inHeadersOnly
  * @return WebMailMessageCollection
  */
 function &SearchMessages($pageNumber, $condition, &$folders, $inHeadersOnly)
 {
     $mailCollection = null;
     if ($this->_dbConnection->Execute($this->_commandCreator->SearchMessages($pageNumber, $condition, $folders->CreateFolderListFromTree(), $inHeadersOnly, $this->Account))) {
         $mailCollection = new WebMailMessageCollection();
         while (false !== ($row = $this->_dbConnection->GetNextRecord())) {
             $msg =& $this->_rowToWebMailMessage($row);
             $mailCollection->Add($msg);
             unset($msg);
         }
     }
     return $mailCollection;
 }
コード例 #4
0
 /**
  * @param array $indexs
  * @param bool $indexsAsUid = false
  * @return WebMailMessageCollection | null
  */
 function &LoadMessageHeadersInOneRequest($folder, $indexs, $indexsAsUid = false, $imapFlags = null, $imapSizes = null)
 {
     $messageCollection = null;
     $indexsStr = trim(implode(',', $indexs));
     $preText = ' ';
     if (null === $imapFlags) {
         $preText .= 'FLAGS ';
     }
     if (null === $imapSizes) {
         $preText .= 'RFC822.SIZE ';
     }
     $rString = 'FETCH ' . $indexsStr . ' (UID' . $preText . 'BODY.PEEK[HEADER])';
     //		$rString = 'FETCH '.$indexsStr.' (UID'.$preText.'BODY.PEEK[HEADER.FIELDS (RETURN-PATH RECEIVED MIME-VERSION FROM TO CC DATE SUBJECT X-MSMAIL-PRIORITY IMPORTANCE X-PRIORITY CONTENT-TYPE)])';
     if ($indexsAsUid) {
         $rString = 'UID ' . $rString;
     }
     $responseArray = $this->_imapMail->getResponseAsArray($rString);
     if (is_array($responseArray)) {
         $messageCollection = new WebMailMessageCollection();
         $headersString = implode('', $responseArray);
         unset($responseArray);
         $piecesOut = array();
         $pieces = preg_split('/\\* [\\d]+ FETCH /', $headersString);
         $tmpArray = array();
         preg_match_all('/\\* ([\\d]+) FETCH /', $headersString, $tmpArray);
         $piecesFetchId = isset($tmpArray[1]) ? $tmpArray[1] : array();
         unset($tmpArray, $headersString);
         foreach ($pieces as $key => $text) {
             if (isset($piecesFetchId[$key - 1])) {
                 $index = $piecesFetchId[$key - 1];
                 $uid = $size = $flags = null;
                 $lines = explode("\n", trim($text));
                 $firstline = array_shift($lines);
                 $lastline = array_pop($lines);
                 $matchUid = $matchSize = $matchFlags = array();
                 preg_match('/UID (\\d+)/', $firstline, $matchUid);
                 if (isset($matchUid[1])) {
                     $uid = (int) $matchUid[1];
                 }
                 if (null === $imapFlags) {
                     preg_match('/FLAGS \\(([^\\)]*)\\)/', $firstline, $matchFlags);
                     if (isset($matchFlags[1])) {
                         $flags = trim(trim($matchFlags[1]), '()');
                     }
                 } else {
                     if (isset($imapFlags[$uid])) {
                         $flags = $imapFlags[$uid];
                     }
                 }
                 if (null === $imapSizes) {
                     preg_match('/RFC822\\.SIZE ([\\d]+)/', $firstline, $matchSize);
                     if (isset($matchSize[1])) {
                         $size = (int) $matchSize[1];
                     }
                 } else {
                     if (isset($imapSizes[$uid])) {
                         $size = (int) $imapSizes[$uid];
                     }
                 }
                 if (null === $uid) {
                     $match = array();
                     preg_match('/UID (\\d+)/', $lastline, $match);
                     if (isset($match[1])) {
                         $uid = (int) $match[1];
                     }
                 }
                 $piecesOut[$indexsAsUid ? $uid : $index] = array($uid, trim(implode("\n", $lines)), $size, $flags);
             }
         }
         unset($pieces);
         foreach ($indexs as $value) {
             if (isset($piecesOut[$value])) {
                 $headerArray = $piecesOut[$value];
                 if (is_array($headerArray) && count($headerArray) == 4 && $headerArray[0] > 0 && strlen($headerArray[1]) > 10) {
                     $msg = new WebMailMessage();
                     $msg->LoadMessageFromRawBody($headerArray[1]);
                     $msg->IdFolder = $folder->IdDb;
                     $msg->IdMsg = $headerArray[0];
                     $msg->Uid = $headerArray[0];
                     $msg->Size = (int) $headerArray[2];
                     $this->_setMessageFlags($msg, $headerArray[3]);
                     $messageCollection->Add($msg);
                     unset($msg);
                 }
             }
         }
     }
     return $messageCollection;
 }