Mail :: Box :: Mbox позволит вам легко разобрать файл в отдельные сообщения. Слайды Марка Овермера из YAPC :: Europe 2002 содержат довольно много подробностей о том, почему разбор гораздо сложнее, чем кажется. Использование этой библиотеки также будет работать с mh, IMAP и многими другими форматами, кроме mbox.
#!/usr/bin/perl
use warnings;
use strict;
use Mail::Box::Manager;
my $file = shift || $ENV{MAIL};
my $mgr = Mail::Box::Manager->new(
access => 'r',
);
my $folder = $mgr->open( folder => $file )
or die "$file: Unable to open: $!\n";
for my $msg ($folder->messages)
{
my $to = join( ', ', map { $_->format } $msg->to );
my $from = join( ', ', map { $_->format } $msg->from );
my $date = localtime( $msg->timestamp );
my $subject = $msg->subject;
my $body = $msg->body;
# Strip all quoted text
$body =~ s/^>.*$//msg;
print <<"";
From: $from
To: $to
Date: $date
$body
}
Возможно, вы захотите пересмотреть свой запрос на удаление цитируемого текста - что если вы отправите электронное письмо с чередованными ответами? Удаление цитируемого текста очень усложнит понимание такого рода писем:
Foo wrote:
> I like bar.
Bar? Who likes bar?
> It is better than baz.
Everyone knows that.
--
Quux
Кроме того, что вы планируете делать с вложениями, нетекстовыми / простыми типами MIME, закодированными текстовыми объектами и другими странностями?