我想知道如何修改下面的代码以在多行的末尾删除=20
个字符,主要是按时间顺序对消息进行排序,从第一次接收或发送到最后。我不确定这是否是一个内部Perl例程。
#!/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
}
尝试运行时遇到以下错误:
“my”变量$ msg在x.pl第16行的同一范围内屏蔽早期声明。 x.pl第15行的语法错误,靠近“))” x.pl第31行的语法错误,靠近“}” (可能是一个失控的多行&lt;&lt;字符串从第25行开始) 由于编译错误,x.pl的执行中止。
我不确定为什么,因为语法似乎很好。
答案 0 :(得分:3)
我猜那些=20
的实例都在消息的正文中。只需阅读documentation for Mail::Message中的一点就会发现这个有用的注释:
请注意,这会返回一个可能被编码的对象:使用decoding()来获取具有可用数据的正文。
因此,只需拨打$msg->body
。
$msg->decoded->string
使用Mail::Message::timestamp
:
...
for my $msg ( sort { $a->timestamp <=> $b->timestamp } $folder->messages) )
...
答案 1 :(得分:0)
我建议查看包含MIME :: QuotedPrint :: Perl模块的MIME::Base64模块来解码QP主体。