HTML电子邮件到MIME :: Entity的纯文本

时间:2013-05-02 09:52:53

标签: perl email mime

我正在使用perl脚本将HTML邮件转换为纯文本。

当前代码(对于多部分邮件)如下所示:

my $parser = new MIME::Parser;
my $entity = $parser->parse(\*STDIN) or die "parse failed\n";

for my $part ($entity->parts()) {
 if ($part->mime_type eq 'text/html') {
 my $bh = $part->bodyhandle;

 my $tree = HTML::TreeBuilder->new();
 $tree->utf8_mode();
 $tree->parse($bh->as_string);

 my $formatter = HTML::FormatText->new(leftmargin => 0, rightmargin => 72);
 my $txt = $formatter->format($tree);

 my $txtEntity=MIME::Entity->build(Data  => $txt,
                                 Type  => "text/plain",
                                 Encoding => "8bit"
                                 );

 $entity->add_part($txtEntity,0);
 }
}
$entity->print(\*STDOUT);

它可以工作,但它添加只是将纯文本部分添加到现有部分,而不是替换HTML部分 所以我想出了这个:

my $head = $entity->head;

my $txtEntity=MIME::Entity->build(Data  => $txt,
                               Type  => "text/plain",
                               Encoding => "8bit",
                               From    => $head->get('From',0),
                               To      => $head->get('To',0),
                               Subject => $head->get('Subject',0),
                               Cc => $head->get('Cc',0)
                               );

$txtEntity->print(\*STDOUT);

但这可能会删除电子邮件标题的某些部分。 是否有一个函数用纯文本替换HTML主体?

谢谢!

1 个答案:

答案 0 :(得分:0)

如果您没有办法替换正文而不是添加新零件,则这可能是formail实用程序(procmail的一部分)的工作,该实用程序可以生成带有旧电子邮件标题的新电子邮件,替换您要替换的内容(例如编码和内容类型标头)。

此外,您可以尝试将编码更改为纯文本。您仍然会看到HTML代码,但是它不会呈现,并且还会看到纯文本/文本添加,尽管我认为这是一个糟糕的解决方案。