/** * @param string $partId * @param string $messageId * * @return array */ public function extractWinMailDat($messageId, $partId = NULL) { $path = Tinebase_Core::getTempDir() . '/winmail/'; // create base path if (!is_dir($path)) { mkdir($path); } // create path for this message id if (!is_dir($path . $messageId)) { mkdir($path . $messageId); $part = $this->getMessagePart($messageId, $partId); $path = $path . $messageId . '/'; $datFile = $path . 'winmail.dat'; $stream = $part->getDecodedStream(); $tmpFile = fopen($datFile, 'w'); stream_copy_to_stream($stream, $tmpFile); fclose($tmpFile); // find out filenames $files = array(); $fileString = explode(chr(10), Tinebase_Core::callSystemCommand('tnef -t ' . $datFile)); foreach ($fileString as $line) { $split = explode('|', $line); $clean = trim($split[0]); if (!empty($clean)) { $files[] = $clean; } } // extract files Tinebase_Core::callSystemCommand('tnef -C ' . $path . ' ' . $datFile); } else { // temp files still existing $dir = new DirectoryIterator($path . $messageId); $files = array(); foreach ($dir as $file) { if ($file->isFile() && $file->getFilename() != 'winmail.dat') { $files[] = $file->getFilename(); } } } asort($files); return $files; }