Portál AbcLinuxu, 10. května 2025 02:40

Dotaz: Perl MIME::Parser - jak ziskat text zpravy

15.10.2005 00:22 Zubbik
Perl MIME::Parser - jak ziskat text zpravy
Přečteno: 394×
Odpovědět | Admin
Ahoj, uz nejakou tu chvili se tu potykam s problemem, jak dostat text z tela e-mailu. Timto stylem ziskavam ostatni hodnoty, ktere potrebuji:
my $parser=new MIME::Parser;
$parser->ignore_errors(1);
$parser->extract_uuencode(1);
$parser->tmp_recycling(0);
$parser->output_to_core(1);
my $entity=$parser->parse(\*STDIN);

my $from=$entity->head->get('From');
my $to=$entity->head->get('To');
my $subject=$entity->head->get('Subject');
Poradite mi nekdo, jak z toho dostat i telo zpravy?

Diky
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

15.10.2005 00:44 unchallenger | skóre: 69 | blog: unchallenger
Rozbalit Rozbalit vše Re: Perl MIME::Parser - jak ziskat text zpravy
Odpovědět | | Sbalit | Link | Blokovat | Admin
Zkusils vyhledávání? Dokonce jsem sem snad někdy dával celý skript, který to používal.
15.10.2005 10:24 Zubbik
Rozbalit Rozbalit vše Re: Perl MIME::Parser - jak ziskat text zpravy
Zkusil jsem vyhledavani zde, zkusil jsem vyhledavani v Googlu, procetl jsem kde co, ale proste ten text z toho nemuzu dostat. Dostanu z toho e-mailu vsechno vcetne priloh, ale s textem zpravy si proste nevim rady. :-(
15.10.2005 10:34 unchallenger | skóre: 69 | blog: unchallenger
Rozbalit Rozbalit vše Re: Perl MIME::Parser - jak ziskat text zpravy
Mezi tělem zprávy a příhlohami není žádný rozdíl. Dostaneš-li všechny přílohy, je mezi nimi i tělo zprávy.
15.10.2005 10:50 Zubbik
Rozbalit Rozbalit vše Re: Perl MIME::Parser - jak ziskat text zpravy
A dokazal bys mi poradit konkretne, kdyz prilohy ukladam nize uvedenym stylem, jak z toho to telo zpravy dostat?
my @parts=$entity->parts;
my $aname='attachment001';
while(my $part = shift(@parts)) {
    if($part->parts) {
        push @parts,$part->parts; # Nested multi-part
        next;
    }
    my $type=$part->head->mime_type || $part->head->effective_type;
    if($type !~ /^(text|message)/i) { # Not a text, save it
        my $filename=$part->head->recommended_filename || $aname;
        $aname++;
        my $io=$part->open("r");
        open(F,"> $attachdir/$filename");
        my $buf;
        while($io->read($buf,1024)) {
            print F $buf;
        }
        close(F);
        $io->close;
    }
}
15.10.2005 11:02 unchallenger | skóre: 69 | blog: unchallenger
Rozbalit Rozbalit vše Re: Perl MIME::Parser - jak ziskat text zpravy
Perl je write-only, takže ne ;-)

Ale následující triviální skript uloží do aktuálního adresáře přílohy jednoho mailu ze standardního výstupu pod jejich názvy a tělo mailu pod názvem typu msg-28630-1.txt (to je defaultní nastavení, předefinování jsem ukazoval v nějaké minulé diskusi):
#!/usr/bin/perl
use MIME::Parser;

my $parser = new MIME::Parser;
$parser->output_dir('.');
undef $/;
$parser->parse_data( <STDIN> );
15.10.2005 11:23 unchallenger | skóre: 69 | blog: unchallenger
Rozbalit Rozbalit vše Re: Perl MIME::Parser - jak ziskat text zpravy
s/standardního výstupu/standardního vstupu/
15.10.2005 11:37 Zubbik
Rozbalit Rozbalit vše Re: Perl MIME::Parser - jak ziskat text zpravy
Jak jednoduche. V tom mym skriptu, ktery jsem mimo jine nasel nekde tady :-), staci pouze zakomentovat podminky, ktere urcuji, aby se ulozily pouze prilohy. Potom se mi ulozi i telo. A to melo napadlo na zaklade tveho jednoducheho skriptiku. :-)

Dik za pomoc.
15.10.2005 13:27 User682 | skóre: 38 | blog: aqarium | Praha
Rozbalit Rozbalit vše Re: Perl MIME::Parser - jak ziskat text zpravy
Odpovědět | | Sbalit | Link | Blokovat | Admin
nevim na co to potrebujete, ale mozna by postacil grepmail. zalezi ale skutecne, na co to pouzivate (aplikace, vystup z shellu).

bye gf

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.