Portál AbcLinuxu, 11. května 2025 09:51
Return-Path: <www-data@xxx.cz>
Delivered-To: bad-header-quarantine
X-Envelope-From: <www-data@xxx.cz>
X-Envelope-To: <info@xxx.eu>
X-Quarantine-ID: <5x5tiQaaevhN>
X-Amavis-Alert: BAD HEADER Non-encoded 8-bit data (char E1 hex): Subject:
Rozd\341v\341me pen\355ze!\n
Received: from yyy.xxx.cz ([127.0.0.1])
by localhost (yyy.xxx.cz [127.0.0.1]) (amavisd-new, port 10024)
with ESMTP id 5x5tiQaaevhN for <info@xxx.eu>
Sun, 9 Dec 2007 08:26:27 +0100 (CET)
Received: from apache.xxx.cz (apache.superhosting.cz [88.86.xxx.xxx])
by mx1.xxx.cz (Postfix) with ESMTP id 766CEB7BE8
for <info@xxx.eu> Sun, 9 Dec 2007 08:26:27 +0100 (CET)
Received: by apache.xxx.cz (Postfix, from userid 33)
id 7D3A99C36B; Sun, 9 Dec 2007 08:25:02 +0100 (CET)
To: info@xxx.eu
Subject: tohel je subject
From: info@xxx.cz
X-Mailer: PHP
X-Priority: 1
Content-Type: text/html; charset=windows-1250
Message-Id: <20071209072502.7D3A99C36B@apache.xxx.cz>
Date: Sun, 9 Dec 2007 08:25:02 +0100 (CET)
Toto je text,tery potrebuju vytahnout do perlu
bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla
Dokazal by někdo poradit jak na to?
perl -00 -e 'print $1,"\n" if <>=~/^Subject:(.*)$/m;print while <>;'
# xyz.pl use Mail::Audit; my $mail = new Mail::Audit; print "Subject: ", $mail->subject, "\n"; print "Body: ", $mail->body, "\n";Použitie:
A co treba nasledujici (neodzkouseno). Vyzaduje soubor s maily jako parametr
#!/usr/bin/perl -w my $filename = shift @ARGV; if (!$filename || -r $filename) { die "Nelze cist soubor s maily"; } my $mgr = Mail::Box::Manager->new; my $folder = $mgr->open($filename); foreach my $message ($folder->messages) { print $message->get('Subject') || '<no subject>', "\n"; print $message->string || '<no body>', "\n\n"; } $folder->close;
Ani jsem si to po sobe neprecetl Chybi mi tam use pro modul Mail::Box::Manager, takze jeste jednou a s kontrolou chyb.
#!/usr/bin/perl -w use Mail::Box::Manager; if (@ARGV != 1) { die "Usage: $0 soubor_se_zpravami\n"; } my $filename = shift @ARGV; if (! -r $filename) { die "Nelze cist soubor se zpravami"; } my $mgr = Mail::Box::Manager->new; my $folder = $mgr->open($filename); if (! defined $folder) { die "Nelze cist soubor se zpravami: $!"; } foreach my $message ($folder->messages) { print $message->get('Subject') || '<no subject>', "\n"; print $message->string || '<no body>', "\n\n"; } $folder->close;
delli:~/perl/# ./mail.pl emaily
delli:~/perl/#
Nevite nekdo prosim proc?
Return-Path: <www-data@xxx.cz>
Delivered-To: bad-header-quarantine
X-Envelope-From: <www-data@xxx.cz>
X-Envelope-To: <info@xxx.eu>
X-Quarantine-ID: <5x5tiQaaevhN>
X-Amavis-Alert: BAD HEADER Non-encoded 8-bit data (char E1 hex): Subject:
Rozd\341v\341me pen\355ze!\n
Received: from yyy.xxx.cz ([127.0.0.1])
by localhost (yyy.xxx.cz [127.0.0.1]) (amavisd-new, port 10024)
with ESMTP id 5x5tiQaaevhN for <info@xxx.eu>
Sun, 9 Dec 2007 08:26:27 +0100 (CET)
Received: from apache.xxx.cz (apache.superhosting.cz [88.86.xxx.xxx])
by mx1.xxx.cz (Postfix) with ESMTP id 766CEB7BE8
for <info@xxx.eu> Sun, 9 Dec 2007 08:26:27 +0100 (CET)
Received: by apache.xxx.cz (Postfix, from userid 33)
id 7D3A99C36B; Sun, 9 Dec 2007 08:25:02 +0100 (CET)
To: info@xxx.eu
Subject: tohel je subject
From: info@xxx.cz
X-Mailer: PHP
X-Priority: 1
Content-Type: text/html; charset=windows-1250
Message-Id: <20071209072502.7D3A99C36B@apache.xxx.cz>
Date: Sun, 9 Dec 2007 08:25:02 +0100 (CET)
Toto je text,tery potrebuju vytahnout do perlu
bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla
Hmmm, opravdu to nefunguje a navic mam v cygwinu nejake problemy se zamykanim / mazanim souboru. Zkus tento kod. Tentokrat jsem si to i vyzkousel, takze by mel chodit. Pouziti je: perl ./script.pl email
. Predpoklada jeden email v jednom souboru. Je zapotrebi minimalne modul Mail::Box - pokud nemas, nainstalujes pres balickovaci system tve distribuce ci primo z CPANu.
use strict; use Mail::Box::Parser::Perl; sub get_subject { my $parser = shift; my ($where, @header) = $parser->readHeader; my $result; for (my $i = 1; $i < @header; $i++) { if ($header[$i][0] =~ /^Subject$/i) { $result = $header[$i][1]; chomp $result; } } return $result; } sub get_body { my $parser = shift; my ($start, $stop, $content) = $parser->bodyAsString(); return $content; } my $filename; my $mbp; my $subj; my $body; $filename = shift @ARGV; if (!$filename) { die "Missing param - filename"; } $mbp = Mail::Box::Parser::Perl->new(filename => $filename); $mbp->start(); $subj = get_subject($mbp); $body = get_body($mbp); print 'SUBJ: ', $subj ? $subj : '<no subject>', "\n"; print 'BODY: ', $body ? $body : '<no body>', "\n"; $mbp->stop();
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.