|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Michael Poliakov 2:5020/400 23 Apr 2001 13:50:28 To : All Subject : Re: сохранение аттача из письма -------------------------------------------------------------------------------- On Sat, 21 Apr 2001 08:52:22 +0000 (UTC), ran@ran.pp.ru (Artem Chuprina) wrote: >Здравствуй, Greg Zemskov. > >В твоём письме от Fri, 20 Apr 2001 18:52:47 +0000 (UTC) написано: > >aznr> Hа STDIN скрипта приходит письмо с аттачем, перенаправленное >aznr> procmail'ом. Hужно сохранить аттач на диск. >aznr> Пытался разобраться с MIME::Parser, не нашел метод для сохранения >aznr> отдельно аттачей... > >Hа MIME::Parser не смотрел, а вообще должен тебе заметить, что аттач от >неаттача с точки зрения формирования письма отличается только наличием >указания имени файла. Если пользоваться MIME::Entity, на который я все-таки >смотрел, то там очень просто - получаешь нужную entity, из заголовка >извлекаешь имя файла (RTFM: RFC2046), открываешь оный файл на запись, и пишешь >туда раскодированное (если оно закодировано) тело оной entity. Кодирование >тоже записано в заголовке. Только это будет уже RFC2045, кажется (не помню я >распределения информации между ними). Все проще. MIME::Parser по умолчанию сохраняет аттачи на диске в каталоге, который можно ему указать: use MIME::Parser; my $parser = MIME::Parser->new; $parser->output_under("/tmp/path/to/temp_directory"); Hазвание, под которым парсер сохраняет аттач, совпадает с filename, указанным в заголовке MIME-части, если filename оценивается как "допустимый", и со случайным именем - иначе. К ним (именам) запросто можно достучаться. my $ent; # У меня данные для письма брались модулем POP3Client, # но здесь это неважно, можно $ent = $parser->parse(\*STDIN); my ($data) = ( $pop->Head($messnum) . "\n\n" . $pop->Body($messnum) ); eval { $ent = $parser->parse_data($data); if ($@) { die('Ошибка разбора письма / Message parsing error'); } my @parts = $ent->parts; # если несколько частей, устраиваем рекурсию, # в итоге обрабатываем конкретную часть, пусть назовем ее $entity # итак, путь к файлу-аттачу my $path = $entity->bodyhandle->path; # что хочешь, то и делай print 'Attachment: <a href="' . $path . '">Скачать / Download</a><br>'; # если аттачи в конце нужно удалить, это делается методом $ent->purge; Michael Poliakov --- ifmail v.2.15dev5 * Origin: Nizhniny Novgorod Information Networks (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/2080486df104.html, оценка из 5, голосов 10
|