Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
0 / 0 / 0
Регистрация: 10.10.2018
Сообщений: 4
1

IMAP скачать вложение из письма

12.10.2018, 14:00. Просмотров 1900. Ответов 3
Метки нет (Все метки)

Добрый день!
Подскажите, как получить ссылку/загрузить вложение из письма?

PHP
1
2
$structure = imap_fetchstructure($imap_connect, $num_mail);
print_r ($structure->parts);
Код
Array ( [0] => stdClass Object ( [type] => 0 [encoding] => 1 [ifsubtype] => 1 [subtype] => HTML [ifdescription] => 0 [ifid] => 0 [bytes] => 798 [ifdisposition] => 0 [ifdparameters] => 0 [ifparameters] => 1 [parameters] => Array ( [0] => stdClass Object ( [attribute] => charset [value] => utf-8 ) ) ) [1] => stdClass Object ( [type] => 3 [encoding] => 3 [ifsubtype] => 1 [subtype] => ZIP [ifdescription] => 0 [ifid] => 0 [bytes] => 9403642 [ifdisposition] => 1 [disposition] => attachment [ifdparameters] => 1 [dparameters] => Array ( [0] => stdClass Object ( [attribute] => filename [value] => files.zip ) ) [ifparameters] => 1 [parameters] => Array ( [0] => stdClass Object ( [attribute] => name [value] => files.zip ) ) ) )
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.10.2018, 14:00
Ответы с готовыми решениями:

Pop без Imap, получить адрес отправителя и тело письма
данная тема здесь уже обсуждалась но до конца так и не решилась, вот помогите до вести до конца...

IMAP сохранить письма отправленные через phpmailer
Добрый день, возникла необходимость сохранять письма отправленные через phpmailer. Почта лежит...

Mail, IMAP и пропавшие письма
Как-то очень давно у меня с ящика mail.ru удалилась вся почта. Случился сбой на сервере, и все...

Вложение в отправке письма через CDO
Всем еще раз привет. Есть форма для отправки письма. Код на кнопку Public Function SendEmail() ...

3
456 / 364 / 94
Регистрация: 01.05.2010
Сообщений: 1,745
12.10.2018, 18:00 2
У меня даже код есть, где вложения извлекаются, но выкладывать я его не буду, так как писан давно и по сути говнокод. придется весь проект выкладывать, выдрать кусок не получится. Только что его посмотрел, мало что понял. Так что сории, код не приведу, придется писать заново.
Но по идее там ничего сверхсложного нету.
Анализируете структуру (ее вы уже получили). Структура состоит из отдельных частей (parts), которые в свою очередь также могут состоять из отдельных частей. Теоретически тут может быть бесконечный уровень вложенности, но я сомневаюсь, что кто-то так делает. Ваша задача определить в каких частях содержатся вложения. Структура должна хранить информацию о типе и имени файла. Вот это все нужно отслеживать, так как не всегда в структуре четко определен параметр attachment, иногда его просто нет, так что я сканирую на наличие имени файла. После определения части письма, получаете содержимое файла при помощи imap_fetchbody(). Третьим параметром передаете номер части. Содержимое будет закодировано в base64, так что сохраняя файл, не забудьте прогнать содержимое через base64_decode().
Сумбурно, да. Но увы, код привести не могу...
0
0 / 0 / 0
Регистрация: 10.10.2018
Сообщений: 4
12.10.2018, 19:36  [ТС] 3
Код
$imap_connect = imap_open("{}INBOX", '', '') or die("Error:" . imap_last_error());
$structure = imap_fetchstructure($imap_connect, $num_mail);

if(isset($structure->parts)){
    foreach($structure->parts as $section => $part){
        if(isset($part->disposition)){
            if(strtolower($part->disposition) == 'attachment'){
                /* echo 'section = '.$section."\n"; */
                $body = imap_fetchbody($imap_connect, $num_mail, $section);

                $finfo = new finfo(FILEINFO_MIME);
                /* echo $finfo->buffer($body) . "\n"; */
 
                $file = $dynamic['data_path'].$num_mail.'_'.$part->dparameters[0]->value;

                imap_savebody($imap_connect, $file, $num_mail, $section);

                echo $finfo->file($file) . "\n"; 

                /* print_r($body); */
            }
        }
    }
}
Подскажите, что не так делаю?
0
0 / 0 / 0
Регистрация: 10.10.2018
Сообщений: 4
14.10.2018, 14:19  [ТС] 4
UP! Неужели не кто не знает как сделать?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.10.2018, 14:19

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Получение письма с вложением по протоколу IMAP
Всем доброго дня. Интересует вопрос как по протоколу IMAP получать/разбирать письма состоящие из...

Задча - забрать в базу письма по Pop3/imap
Камрады, добры бобры! Появилсь задача (пока только прощупываю почву) - надо сделать базу,...

Как сохранить вложение из письма используя CDOSYS, MAPI и др
Не подскажет ли кто, где можно посмотреть пример как сохранить вложение из письма используя CDOSYS,...

Как прочесть письма через IMAP используя прокси?
Вообще, у меня есть такой шаблон с использованием IMAP: string server = "imap.yandex.ru"; int...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.