/** * @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; }
} 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;
/** * @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; }
/** * @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; }