Главная страница


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)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 сохранение аттача из письма   Greg Zemskov   20 Apr 2001 22:52:47 
 Re: сохранение аттача из письма   Artem Chuprina   21 Apr 2001 12:52:22 
 Re: сохранение аттача из письма   Michael Poliakov   23 Apr 2001 13:50:28 
Архивное /ru.perl/2080486df104.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional