2

私は巨大な mbox ファイルを持っており、おそらく 500 通の電子メールが入っています。

次のようになります。

From x@blah.com Fri Aug 12 09:34:09 2005
Message-ID: <42FBEE81.9090701@blah.com>
Date: Fri, 12 Aug 2005 09:34:09 +0900
From: me <x@blah.com>
User-Agent: Mozilla Thunderbird 1.0.6 (Windows/20050716)
X-Accept-Language: en-us, en
MIME-Version: 1.0
To: someone <someone@hotmail.com>
Subject: Re: (no subject)
References: <BAY101-F9353854000A4758A7E2CCA9BD0@phx.gbl>
In-Reply-To: <BAY101-F9353854000A4758A7E2CCA9BD0@phx.gbl>
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 8bit
Status: RO
X-Status: 
X-Keywords:                 
X-UID: 371
X-Evolution-Source: imap://x+blah.com@blah.com/
X-Evolution: 00000002-0010

Hey

the actual content of the email

someone wrote:

> lines of quotedtext

引用されたテキストをすべて削除し、To、From、および Date 行を除くほとんどのヘッダーを削除し、それでもある程度連続したままにする方法を知りたいです。

私の目標は、これらの電子メールを本のような形式で印刷できるようにすることです。現時点では、すべてのプログラムが 1 ページに 1 つの電子メール、またはすべてのヘッダーと引用テキストを印刷したいと考えています。シェル ツールを使用して小さなプログラムを作成する際に、どこから始めるべきかについて何か提案はありますか?

4

3 に答える 3

7

Mail::Box::Mboxを使用すると、ファイルを個別のメッセージに簡単に解析できます。YAPC::Europe 2002 からの Mark Overmeer のスライドでは、解析が見かけよりもはるかに難しい理由についてかなり詳しく説明しています。このライブラリを使用すると、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

    }

引用されたテキストを削除する要求を再検討する必要があるかもしれません -- インターリーブされた返信でフォーマットされた電子メールの場合はどうなるでしょうか? 引用されたテキストを削除すると、この種の電子メールは非常に理解しにくくなります。

  フー さんが書きました:
  > バーが好きです。

  バー?誰がバーが好きですか?

  >バズよりいいです。

  誰もがそれを知っています。

  --
  クックス

さらに、添付ファイル、非テキスト/プレーン MIME タイプ、エンコードされたテキスト エンティティ、およびその他の奇妙なものをどうする予定ですか?

于 2008-12-10T17:25:37.207 に答える
1

手始めに、おそらく「formail」を使用して、必要なヘッダーだけを含むメールを抽出します。それか、awk である種の状態テーブルを使用して、ヘッダーにいるかどうかを確認し、ヘッダーにいる場合は必要なヘッダー以外をすべて削除し、そうでない場合は引用符を削除します。

于 2008-12-10T17:04:15.923 に答える
1

Ruby や Perl など、mbox を処理するための多くの言語のライブラリが多数あるため、シェル ツールを使用することは最善の答えではないかもしれません。また、引用文字が常に "> " であるとは限らないことも考慮する必要があります。これにより、引用解除プロセスが台無しになる可能性があります。必要なヘッダーの抽出に関しては、これはどの言語でも難しくありません。これは一般的な答えであることは知っていますが、具体的ではないかもしれません...

于 2008-12-10T17:10:13.260 に答える