Techioz Blog

引用された返信から電子メールの内容を解析する

概要

メールに含まれる可能性のある引用された返信テキストからメールのテキストを解析する方法を見つけようとしています。通常、電子メール クライアントは「これこれの日付に誰々が書きました」と行の前に山括弧を付けるか、行頭に山括弧を付けることに気付きました。残念ながら、誰もがこれを行うわけではありません。プログラムで返信テキストを検出する方法について何かアイデアを持っている人はいますか?このパーサーを作成するために C# を使用しています。

解決策

これについてさらに多くの検索を行ったところ、ここに私が見つけたものがあります。これを行う状況は基本的に 2 つあります。スレッド全体を持っている場合と、スレッド全体を持っていない場合です。これら 2 つのカテゴリに分けて説明します。

スレッドがある場合:

一連の電子メール全体があれば、削除しようとしているものが実際に引用されたテキストであることを非常に高いレベルで保証できます。これを行うには 2 つの方法があります。 1 つ目は、メッセージの Message-ID、In-Reply-To ID、および Thread-Index を使用して、個々のメッセージ、その親、およびそのメッセージが属するスレッドを特定することができます。詳細については、RFC822、RFC2822、スレッドに関するこの興味深い記事、またはスレッドに関するこの記事を参照してください。スレッドを再構築したら、外部テキスト (To、From、CC などの行) を削除すれば完了です。

作業しているメッセージにヘッダーがない場合は、類似性照合を使用して、電子メールのどの部分が返信テキストであるかを判断することもできます。この場合、繰り返されるテキストを特定するために類似性照合を実行する必要があります。この場合、Code Project のこのアルゴリズムやこのアルゴリズムなどのレーベンシュタイン距離アルゴリズムを検討するとよいでしょう。

いずれにせよ、スレッド化プロセスに興味がある場合は、電子メール スレッドの再構成に関するこの素晴らしい PDF をチェックしてください。

スレッドがない場合:

スレッドの 1 つのメッセージだけで行き詰まっている場合は、その引用が何であるかを推測する必要があります。その場合、私がこれまでに見たさまざまな引用方法を次に示します。

そこから下のテキストを削除すれば完了です。これらのいずれかの欠点は、送信者が引用テキストの上に返信を置き、(インターネットの古いスタイルのように)インターリーブしなかったとみなしていることです。そうなれば幸運を祈ります。これが皆さんの何人かに役立つことを願っています。