我正在寻找一个模块来尽最大努力从电子邮件的纯文本组件中提取直接级别的内容(即丢弃任何引用的内容和签名块)。
我们已经有了一些有关它的代码,所以如果没有现有模块可以做到这一点,那么新模块名称的想法也会受到赞赏(Text::ExtractImmediateLevelOfContentFromEmail
似乎有点笨拙)。
答案 0 :(得分:3)
我相信没有这样的模块,因为这是非常面向任务的,并且有各种各样的消息格式化风格。只需几行代码就可以实现最小的实现:
use Email::MIME;
my $email = Email::MIME->new($message);
my $body;
$email->walk_parts(sub {
my ($part) = @_;
return unless $part->content_type =~ m[text/plain];
$body .= $part->body;
});
# strip quoted lines and attribution line
$body =~ s/^.+ wrote:\n(?=\n* ?>)//m;
$body =~ s/^ ?>.*\n//gm;
# strip signature
$body =~ s/-- \R.+//;
当然,您可能需要添加其他启发式规则来删除用其他语言编写的归因行,以及删除Outlook样式的引用文本。 如果消息被识别为使用交错式引用,我建议使用一些启发式方法来避免引用文本剥离。这是因为如果你删除引用的文本,交错的回复可能会失去一些意义。
如果您想将其分解为模块,我会将其称为Email::ExtractBody
或Email::ExtractText
。我在POD中强调该模块具有启发式和尽力而为的方法。