| | |
| | | | program/steps/mail/import.inc | |
| | | | | |
| | | | This file is part of the Roundcube Webmail client | |
| | | | Copyright (C) 2005-2013, The Roundcube Dev Team | |
| | | | Copyright (C) 2005-2014, The Roundcube Dev Team | |
| | | | | |
| | | | Licensed under the GNU General Public License version 3 or | |
| | | | any later version with exceptions for skins & plugins. | |
| | |
| | | | | |
| | | +-----------------------------------------------------------------------+ |
| | | | Author: Thomas Bruederli <roundcube@gmail.com> | |
| | | | Author: Aleksander Machniak <alec@alec.pl> | |
| | | +-----------------------------------------------------------------------+ |
| | | */ |
| | | |
| | |
| | | |
| | | if (!$err) { |
| | | // check file content type first |
| | | list($mtype_primary,) = explode('/', rcube_mime::file_content_type($filepath, $_FILES['_file']['name'][$i], $_FILES['_file']['type'][$i])); |
| | | $ctype = rcube_mime::file_content_type($filepath, $_FILES['_file']['name'][$i], $_FILES['_file']['type'][$i]); |
| | | list($mtype_primary, $mtype_secondary) = explode('/', $ctype); |
| | | |
| | | if (!in_array($mtype_primary, array('text', 'message'))) { |
| | | if (in_array($ctype, array('application/zip', 'application/x-zip'))) { |
| | | $filepath = rcmail_zip_extract($filepath); |
| | | if (empty($filepath)) { |
| | | continue; |
| | | } |
| | | } |
| | | else if (!in_array($mtype_primary, array('text', 'message'))) { |
| | | continue; |
| | | } |
| | | |
| | | foreach ((array) $filepath as $file) { |
| | | // read the first few lines to detect header-like structure |
| | | $fp = fopen($filepath, 'r'); |
| | | $fp = fopen($file, 'r'); |
| | | do { |
| | | $line = fgets($fp); |
| | | } |
| | |
| | | if (!empty($message) && $RCMAIL->storage->save_message(null, rtrim($message))) { |
| | | $imported++; |
| | | } |
| | | |
| | | // remove temp files extracted from zip |
| | | if (is_array($filepath)) { |
| | | unlink($file); |
| | | } |
| | | } |
| | | } |
| | | |
| | | if ($err == UPLOAD_ERR_INI_SIZE || $err == UPLOAD_ERR_FORM_SIZE) { |
| | |
| | | |
| | | // send html page with JS calls as response |
| | | $OUTPUT->send('iframe'); |
| | | |
| | | |
| | | function rcmail_zip_extract($path) |
| | | { |
| | | if (!class_exists('ZipArchive', false)) { |
| | | return; |
| | | } |
| | | |
| | | $rcmail = rcmail::get_instance(); |
| | | $temp_dir = $rcmail->config->get('temp_dir'); |
| | | $zip = new ZipArchive; |
| | | $files = array(); |
| | | |
| | | if ($zip->open($path)) { |
| | | for ($i = 0; $i < $zip->numFiles; $i++) { |
| | | $entry = $zip->getNameIndex($i); |
| | | $tmpfname = tempnam($temp_dir, 'zipimport'); |
| | | |
| | | if (copy("zip://$path#$entry", $tmpfname)) { |
| | | $ctype = rcube_mime::file_content_type($tmpfname, $entry); |
| | | list($mtype_primary, $mtype_secondary) = explode('/', $ctype); |
| | | |
| | | if (in_array($mtype_primary, array('text', 'message'))) { |
| | | $files[] = $tmpfname; |
| | | } |
| | | else { |
| | | unlink($tmpfname); |
| | | } |
| | | } |
| | | } |
| | | |
| | | $zip->close(); |
| | | } |
| | | |
| | | return $files; |
| | | } |