The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Про MIME::Parser. Очень нужна помощь!"
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Про MIME::Parser. Очень нужна помощь!"
Сообщение от vate.zlo emailИскать по авторуВ закладки on 03-Мрт-04, 10:48  (MSK)
Но вот ещё вопрос:
Вобщем пробую я сделать что-то вроде...
$parser = new MIME::Parser;
$parser->output_under("d:/1/test");
$parser->output_prefix("killpref");
$mail = "d:/1/incl.eml";

open $io, '<', $mail or die "open fault: $!";

$entity = $parser->parse($io);
$parser->tmp_recycling(0);
$results = $parser->results;
@msg = $results->msgs;
@flist='';
foreach $m (@msg) {
if ($m=~/.*?outputting body to disk file.*?/){
$swap=$m;

if($swap=~/.*?killpref.*?/) { }
else {
$swap=~s/debug: outputting body to disk file: //g;
print $swap;
push @flist,$swap;
}
}
}

for (@entity_queue = ($entity); scalar @entity_queue;)
{
$entity = shift @entity_queue;

if ($bh = $entity->bodyhandle) {
$io = $bh->open("r") or die "open fault: $!";
while (defined($_ = $io->getline)) {
}
$io->close();
} else {
push @entity_queue, $entity->parts();
next;
}
}
$entity->purge();

После таких махинаций, в принципе, в директории
d:/1/test должна появится папка в которой есть аттачи... Но...
Если в письме больше одного аттачмента, там всегда сохраняется на аттачмент меньше...

При том в массиве @flist существуют пути до всех файлов
а в массиве @msg отражается запись о сохранении тела этого файла на диск. Что делать? Как бороться? Не приделывать же в конец письма поддельный аттач! :)

  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "Про MIME::Parser. Очень нужна помощь!"
Сообщение от StatusQuo Искать по авторуВ закладки on 03-Мрт-04, 22:18  (MSK)
Значит с циклом что-то не так. Меня удивила вот эта строчка:

>for (@entity_queue = ($entity); scalar @entity_queue;)

scalar @entity_queue всегда будет равен единице, т.к. массив @entity_queue состоит из одного элемента - $entity.
И вообще, очень странно тут цикл задан, может ты имел в виду:

foreach $i (@entity_queue) {
  do_something($i);
}

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

$entity = $parser->parse($io);

следует заменить на:

@entity = $parser->parse($io); (массив - это список, а скаляр - всегда один элемент)

Впрочем, не уверен, перепиши цикл и поиграйся с perl -c и perl -w.

  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру