Проблема по данным о самом файле.
Вот прикреплен zip архив к письму, внутри .xls файл с прайс листом, друго ничего внутри нет.
Вывожу я по нему данные:
part: stdClass Object
(
[type] => 3
[encoding] => 3
[ifsubtype] => 1
[subtype] => VND.MS-EXCEL
[ifdescription] => 0
[ifid] => 0
[bytes] => 1351520
[ifdisposition] => 1
[disposition] => attachment
[ifdparameters] => 1
[dparameters] => Array
(
[0] => stdClass Object
(
[attribute] => filename
[value] => =?UTF-8?B?0J/RgNCw0LnRgV/Qu9C40YHRgi54bHM=?=
)
)
[ifparameters] => 1
[parameters] => Array
(
[0] => stdClass Object
(
[attribute] => name
[value] => =?UTF-8?B?0J/RgNCw0LnRgV/Qu9C40YHRgi54bHM=?=
)
)
)
И что я вижу..
subtype равен VND.MS-EXCEL
никакой не архив
Далее раскодирую имя файла
...
// =?UTF-8?B?0J/RgNCw0LnRgV/Qu9C40YHRgi54bHM=?=
mb_decode_mimeheader($filename);
// выводит: Прайс_лист.xls
Как так и почему?
p.s. весь код:
Свернутый текст
$email = '******';
$pass = '******';
$connect = imap_open('{imap.yandex.ru:143/imap/notls}', $email, $pass);
if (!$connect)
{
echo 'Failed';
die;
}
$date = date("j F Y");
$mails = imap_search($connect, 'ON "'.$date.'"');
# http://stackoverflow.com/questions/2649579/downloading-attachments-to-directory-with-imap-i n-php-randomly-works
foreach ($mails as $email_number)
{
$structure = imap_fetchstructure($connect, $email_number, FT_UID);
//echo '<pre>structure: ' . htmlspecialchars(print_r($structure, 1)) . '</pre>';
$attachments = array();
//echo '<pre>partS: ' . htmlspecialchars(print_r($structure->parts, 1)) . '</pre>';
for ($i = 0; $i < count($structure->parts); $i++)
{
if ($structure->parts[$i]->subtype == 'VND.MS-EXCEL')
{
echo '<pre>part: ' . htmlspecialchars(print_r($structure->parts[$i], 1)) . '</pre>';
foreach ($structure->parts[$i]->dparameters as $object)
{
if ($object->attribute == 'filename')
{
$attachments[$i]['is_attachment'] = true;
$attachments[$i]['filename'] = $object->value;
$attachments[$i]['real_filename'] = mb_decode_mimeheader($object->value);
}
}
if ($attachments[$i]['is_attachment'])
{
$attachments[$i]['attachment'] = imap_fetchbody($connect, $email_number, $i+1);
//echo '<pre>attachment: ' . htmlspecialchars(print_r($attachments[$i], 1)) . '</pre>';
if ($structure->parts[$i]->encoding == 3)
{
$attachments[$i]['attachment'] = base64_decode($attachments[$i]['attachment']);
//$ext = substr($attachments[$i]['real_filename'], strrpos($attachments[$i]['real_filename'], '.') + 1);
//echo '<pre>$ext: ' . htmlspecialchars(print_r($ext, 1)) . '</pre>';
//echo '<pre>attachment: ' . htmlspecialchars(print_r($attachments[$i]['attachment'], 1)) . '</pre>';
echo '<pre>real_filename: ' . htmlspecialchars(print_r($attachments[$i]['real_filename'], 1)) . '</pre>';
$file = $_SERVER['DOCUMENT_ROOT'] . '/imap/test.xls';
file_put_contents($file, $attachments[$i]['attachment']);
}
}
}
}
// текст письма
//$test1 = imap_fetchbody($connect, $email_number, 1);
//echo '<pre>$test1: ' . htmlspecialchars(print_r($test1, 1)) . '</pre>';
}
_____________
"internet explorer всех правильней отображает страницы" ©