예제 #1
0
 /**
  * @param string $messageIndex
  * @param bool $indexAsUid
  * @param Folder $folder
  * @return WebMailMessage
  */
 function &LoadMessageHeader($messageIndex, $indexAsUid)
 {
     $uids =& $this->_getPop3Uids();
     $idx = $messageIndex;
     if ($indexAsUid) {
         $idx = $this->_getMessageIndexFromUid($uids, $messageIndex);
     }
     if ($idx < 0 || $idx > count($uids)) {
         return null;
     }
     $msgText = $this->_pop3Mail->get_top($idx);
     if (!$msgText) {
         return null;
     }
     $message = new WebMailMessage();
     $message->LoadMessageFromRawBody($msgText);
     $message->IdMsg = $idx;
     $message->Uid = $uids[$idx];
     $size =& $this->_getPop3Sizes();
     $message->Size = $size[$idx];
     return $message;
 }
예제 #2
0
     } else {
         if (isset($_GET['bsi'])) {
             $processor = new MailProcessor($account);
             $folder = new Folder($account->Id, $folder_id, $folder_name);
             $messageBody = $processor->GetBodyPartByIndex($_GET['bsi'], $mes_uid, $folder);
             $encode = 'base64';
             if (isset($_GET['bse']) && strlen($messageBody) > 0) {
                 $encode = ConvertUtils::GetBodyStructureEncodeString($_GET['bse']);
                 $messageBody = ConvertUtils::DecodeBodyByType($messageBody, $encode);
             }
             $tempFiles->SaveFile($tempNameFromGet, $messageBody);
         }
     }
     if ($messageBody) {
         $message = new WebMailMessage();
         $message->LoadMessageFromRawBody($messageBody, true);
     }
     if ($message) {
         $isNull = false;
     }
 }
 if ($isNull) {
     exit(PROC_MSG_HAS_DELETED);
 }
 $fromString = $message->GetFromAsString(true);
 $toString = $message->GetToAsString(true);
 $ccString = $message->GetCcAsString(true);
 $subjectString = $message->GetSubject(true);
 $date =& $message->GetDate();
 $date->FormatString = $account->DefaultDateFormat;
 $date->TimeFormat = $account->DefaultTimeFormat;
예제 #3
0
 /**
  * @param string $messageIndex
  * @param bool $indexAsUid
  * @param Folder $folder
  * @return WebMailMessage
  */
 function &LoadMessage($messageIndex, $indexAsUid, &$folder, $_preData = null)
 {
     $messageIndexArray = array($messageIndex);
     if ($this->_settings->StoreMailsInDb) {
         if (null === $_preData) {
             $_preData = $this->PreLoadMessagesFromDB($messageIndexArray, $indexAsUid, $folder);
         }
         $_msgArray = array_keys($_preData);
         $message = null;
         //read messages from db
         if (!$this->_dbConnection->Execute($this->_commandCreator->LoadMessagesFromDB($_msgArray, $this->Account))) {
             return $message;
         }
         $row = $this->_dbConnection->GetNextRecord();
         if ($row && isset($_preData[$row->id_msg])) {
             $message = new WebMailMessage();
             $message->LoadMessageFromRawBody($row->msg);
             $message->IdMsg = $row->id_msg;
             $message->IdFolder = $folder->IdDb;
             $message->Uid = $_preData[$row->id_msg][0];
             $message->DbPriority = $_preData[$row->id_msg][1];
             $message->Flags = $_preData[$row->id_msg][2];
             $message->Size = strlen($row->msg);
             $message->Downloaded = true;
         } else {
             setGlobalError(PROC_MSG_HAS_DELETED);
         }
         $this->_dbConnection->FreeResult();
     } else {
         $fs = new FileSystem(INI_DIR . '/mail', strtolower($this->Account->Email), $this->Account->Id);
         if (null === $_preData) {
             $_preData = $this->PreLoadMessagesFromDB($messageIndexArray, $indexAsUid, $folder);
         }
         foreach ($_preData as $_id_msg => $_varArray) {
             $message =& $fs->LoadMessage($_id_msg, $folder);
             if ($message != null && is_array($_varArray)) {
                 $message->IdMsg = $_id_msg;
                 $message->Uid = $_varArray[0];
                 $message->IdFolder = $folder->IdDb;
                 $message->DbPriority = $_varArray[1];
                 $message->Flags = $_varArray[2];
                 $message->Size = $_varArray[4];
                 $message->Downloaded = true;
             } else {
                 setGlobalError(PROC_MSG_HAS_DELETED);
             }
             break;
         }
     }
     return $message;
 }
예제 #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;
 }