# !/usr/bin/perl = pod = head1名字split-linguist——从语言学家打开消化消息邮件列表。C = head1描述
从语言学家需要一个消化消息邮件列表在Unix邮箱格式和分裂。中的每个sub-message消化转化为自己的邮件;摘要本身删除所有sub-messages也保存一个额外的电子邮件消息。因此,这个程序将一个语言学家与我消化
sub-messages到我
S < + 1 >电子邮件。C
适用于使用传入的邮件过滤器。例如,下面的C
配方将和文件分为“语言学家”文件夹所有传入的语言学家信息::0:* ^:* \
|路径/ / split-linguist | formail - s > > $ MAILDIR /语言学家目前关于这个项目的信息,请查看http://www.digitas.harvard.edu/ ~肯/语言学家。语言学家邮件列表的更多信息,请参阅http://www.linguistlist.org/。看到L = head1先决条件
和L
。这个版本的C = head1版本
是日期为2004-10-09。= head1复制版权(c) 2001 - 2004, Chung-chieh山
保留所有权利。再分配和使用源代码和二进制形式,有或没有修改,允许提供满足下列条件:= / 4 =物品分发源代码必须保持上述版权声明,这个列表的条件以及其后的免责声明。=项目以二进制形式重新发布必须保留未经修改的上述版权通知,这个列表的条件以及其后的免责声明提供的文档和/或其他材料分布。=项哈佛大学的名字和贡献者的名字可以用来支持或促进产品源自这个软件没有特定的书面许可。=回这个软件版权所有者和贡献者所提供的“是”,任何明示或默示保证,包括但不限于适销性的隐含保证和健身为特定目的是否认的。没有董事会或贡献者概对任何直接、间接、附带、特别,模范,或间接的损害赔偿(包括但不限于替代产品或服务的采购;损失的使用、数据或利润;或业务中断)然而造成任何理论的责任,无论是在合同,严格责任,或侵权行为(包括疏忽或其他)引起的以任何方式使用这个软件,即使建议的这种损害的可能性。邮件= = head1脚本类别CPAN /切需要5;使用严格的; use Mail::Internet; use Mail::Util 'maildomain'; my @output; my $hostname = maildomain; my $mail = Mail::Internet->new([<>]); $mail->unescape_from; my $head = $mail->head; my $msg_id = $head->get("Message-ID"); my $from_ = $head->get("From ") || "- -"; my @sub_head_from_main = (["From ", $from_, 0]); foreach my $key (qw(Mime-Version Content-Type Content-Transfer-Encoding Sender Reply-To To Status)) { push @sub_head_from_main, map [$key, $_], $head->get($key) } foreach my $key (qw(Date From Subject)) { push @sub_head_from_main, map ["X-List-$key", $_], $head->get($key) } my $body = $mail->body; my @main; my @sub; my $sub_n; sub flush_sub { if (defined $sub_n) { shift @sub while @sub > 0 and $sub[0] =~ /^\s*$/s; my $sub = Mail::Internet->new(\@sub); $sub->tidy_body; my $sub_head = $sub->head; $sub_head->add(@$_) foreach @sub_head_from_main; my $sub_msg_id = $msg_id; $sub_msg_id =~ tr/@/./; $sub_msg_id =~ s/(>?)$/.$sub_n\@$hostname$1/; $sub_head->delete("Message-ID"); $sub_head->add("Message-ID", $sub_msg_id); $sub_head->add("References", $msg_id); $sub_head->add("Lines", scalar(@{$sub->body})); push @output, $sub->as_mbox_string; undef $sub_n; undef @sub; } } foreach my $line (@$body) { if (my ($new_n) = ($line =~ /^\s*-{25,38}(?:\s*Message\s*(\d+)\s*)?-{25,38}\s*$/is)) { flush_sub; push @main, $line; $sub_n = $new_n; } elsif (defined $sub_n) { push @sub, $line; } else { push @main, $line; } } flush_sub; print Mail::Internet->new(Header => $head, Body => \@main)->as_mbox_string; print @output; # print STDERR scalar($head->get("Subject"));