Как получть ссылку на вложение imap

qwelp

Новичок
Как получть ссылку на вложение imap

Как можно получить ссылку на вложение?

PHP:
$struct = imap_fetchstructure($mbox, $q);   
$parts = $struct->parts;
$part = $parts[1];
$filename=$part->parameters[0]->value;

echo ("File:   ");
echo $filename;
 

OZ

Новичок
В каком виде тебе должно вернуться вложение? Как avi-файл весом 800Mb в одной строке? Тебе уже сказали - смотри, как работают бесплатные скрипты по работе с email.
 

qwelp

Новичок
не хочешь помогать не пиши.

а смотри, как работают бесплатные скрипты по работе с email - это не помощь.
 

OZ

Новичок
qwelp, я объясняю тебе, что такой ссылки ты получить не можешь. И я написал, почему. Если не хватает мозга понять это, то сделай хотя-бы копипэйст. И ты ещё говоришь, что я не помог тебе.
 

Фанат

oncle terrible
Команда форума
qwelp
в поиск, по теме отдача файла скриптом.
такой вопрос задается минимум раз в день
 

ioleg

Новичок
Re: Как получть ссылку на вложение imap

PHP:
$file = imap_fetchbody (int imap_stream, int msg_number, string part_number); //извлекаешь нужную часть
$file = imap_base64($file); //приводишь к человеческому виду
header('Content-Disposition: attachment; filename=<имя файла>');
header('Content-Length: <размер файла>')
echo ($file);
 

Фанат

oncle terrible
Команда форума
зря я тему не закрыл.
ну да буду закрывать впредь.
 

qwelp

Новичок
ioleg спасибо. я понял что есть кусок текста который является файлом в теле. Сначала находишь его по type и subtype. не знал. Фанат почему зря не закрыл? мне ведь помогли.
 

qwelp

Новичок
Скачки фалов добился помогла информация ioleg и примеры на php.net по imap_fetchbody , но все что я скачиваю не открывается. как я понимаю надо соблюсти целостность файла. подскажите где копать?
 

Фанат

oncle terrible
Команда форума
копать надо в сторону отладки.
в частности, не глубокомысленно тыкать мышкой "ой не открывается", а сравнивать два файла. тот, который отправляли и тот, который пришел. визуально.

также неплохо сохранить файл на сервере и оттуда забрать по фтп. и тоже сравнить
 

ioleg

Новичок
qwelp

А ты письмо которое пытаешься пропарсить и вытащить из него часть с файлом сам своим скриптом создавал или письмо с человеческого почтового клиента?

Если своим скриптом, то здесь и копай, скорее всего ты его не привел к нужному виду.
 

qwelp

Новичок
с mail.ru и rambler.ru прислал. Сообщение и все заголовки отображаться хорошо спасибо ты помог в другой теме. ссылки в сообщении тоже выводятся вот так:

Код:
print(nl2br(eregi_replace( "(http|https|ftp)://([-=%_a-zA-Z0-9./~?:]+)", "<a href=\"\\1://\\2\" target=\"_blank\">\\1://\\2</a>", htmlspecialchars($message))));
Но не могу скачать фаил. пробую разные варианты в итоге всегда фаил не соответствует размеру или вызывает ошибку в браузере.
 

Фанат

oncle terrible
Команда форума
ты не мог бы пояснить, при чем тут ссылки в сообщении?
и почему ты до сих пор только тыкаешь в ссылку, но не сделал то, что я тебе велел?

рекомендую не игнорировать мой вопрос
 

qwelp

Новичок
ты не мог бы пояснить, при чем тут ссылки в сообщении?
ioleg помог мне разобраться с переводом кодировок и я ему сообщил что его помощь мне помогла. что в той теме разобрался. с регулярными выражениями между прочим ты помог.

и почему ты до сих пор только тыкаешь в ссылку, но не сделал то, что я тебе велел?
сравнить файлы визуально я не могу так как я отправляю rar фаил, а приходит он на imap сервер ввиде текста в сообщении.
Сохранить сначала на сервере фаил не очень удобно. если у меня не получится вариант без сохранения на сервер и сразу предоставить ссылку на скачку то буду пробовать твой вариант.
 

Фанат

oncle terrible
Команда форума
приходит он на imap сервер ввиде текста в сообщении.
и что с того?
вообще-то, я не спрашивал, в каком виде файл приходит в письме.
я тебе велел сравнить тот файл, который ты отправлял, и тот, который скачался на комп.
Неужели ни разу не приходила в голову мысль посмотреть - а что, собственно, ты скачал?
ты вообще можешь просмотреть содержимое файла? открыть в блокноте, или F3 нажать в коммандере каком-нибудь?
Если не можешь, то зачем отправлять себе рар? отправь себе текстовый файл. и открывай его. смотри - что пришло.
Ведь только после этого можно будет разобраться.

Ну ты хоть посмотри на себя со стороны.
- дайте код!
- на
- ой, не работает! где у меня ошибка?
Что ты сам-то сделал? Не стыдно?
 

ioleg

Новичок
qwelp

Фанат тебе не предлагал выход из ситуации как способ сохранения сначала на сервере, а потом отдавать файл. Тебя просили проверить разницу между этими файлами. А совет дельный.

А лучше покажи код как ты извлекаешь файл и как отдаешь клиенту.
 

qwelp

Новичок
ioleg Фанат Спасибо вы мне очень помогли. все заработало. вот код:
Код:
$file = imap_fetchbody ($mbox,$q, $n);
$file = imap_base64($file);
$struct = imap_fetchstructure($mbox, $q);   
$parts = $struct->parts;
$part = $parts[1];
$filename=$part->parameters[0]->value;
$filesize=$part->bytes;
header('Content-Disposition: attachment; filename="'.$filename.'"');
header('Content-Length: "'.$filesize.'"');
echo ($file);
Правда фаил сразу выдает. при загрузки страницы.

Ну ты хоть посмотри на себя со стороны.
- дайте код!
- на
- ой, не работает! где у меня ошибка?
Что ты сам-то сделал? Не стыдно?


Код нужен для примера чтобы быстрее понять.
Если не работает спроси у умных людей :)
Чего стыдиться, я только учусь :)

-~{}~ 28.04.07 16:15:

Не могу получить вложения из скрипта. список писем получаю.

В скрипте выше получаю вложение через перезагрузку.

В этом попытался совместить тело письма с вложение. добился только что выводит весь список вложения и тело письма. когда нажимаю на ссылку все вложение открывается в браузере.

$q = 23;
$n = 1;
$f = '2';
$body=imap_fetchbody($mbox,$q,$n);
$obj = imap_headerinfo($mbox, $q);
$arr = imap_mime_header_decode($obj->Subject);
print(nl2br(eregi_replace( "(http|https|ftp)://([-=%_a-zA-Z0-9./~?:]+)", "<a href=\"\\1://\\2\" target=\"_blank\">\\1://\\2</a>", convert_cyr_string($body,$arr[0]->charset,"w"))));



$struct = imap_fetchstructure($mbox, $q);
$parts = $struct->parts;
$count = count($parts);
for($i = 1; $i < $count; $i++) {
$file = imap_fetchbody ($mbox,$q, $f);
$file = imap_base64($file);
$part = $parts[$i];
$filename=$part->parameters[0]->value;
$filesize=$part->bytes;
$index = $_SERVER['PHP_SELF'];

echo ("<a href=\"".$index."?v=1\">".$filename."</a><br />");

}
if(isset($_GET[v])) {
header('Content-Disposition: attachment; filename="'.$filename.'"');
header('Content-Length: "'.$filesize.'"');
echo ($file);
}
 

Фанат

oncle terrible
Команда форума
ну а ты что хотел-то?
сначала выводишь ссылки, а потом, вдруг, решаешь выводить вложение.
делать надо что-нибудь ОДНО
 
Сверху