受信メールの本文をきれいにする方法について何か提案はありますか? 本文の内容だけが残るように、免責事項、画像、および存在する可能性のある以前の電子メール テキストを削除したいと考えています。信頼できる方法では不可能だと思いますが、誰か試したことがありますか?この種のことを対象としたライブラリはありますか?
6 に答える
電子メールには、削除したいものを意味する合意されたマーキングがいくつかあります。正規表現を使用してこれらの行を探すことができます。メールを完全に「サニタイズ」できないとは思いませんが、次の点に注意してください。
- "> " (空白よりも大きい) で始まる行は引用符を表します
- "--" (2 つのハイフン、空白、改行) の行は、署名の開始を示します。ウィキペディアの署名ブロックを参照してください。
- マルチパート メッセージ、境界は--で始まります。それを超えると、メッセージの本文部分を不要な部分 (base64 画像など) から分離するために検索を行う必要があります。
実際の C# の実装については、あなたや他の SOer に任せます。
見るべきいくつかの明らかなこと:
- メールが純粋なプレーン テキスト以外の場合、メッセージはマルチパート MIME になります。タイプが「image/*」のパーツ (image/jpeg など) は、おそらくドロップできます。ほとんどの場合、タイプが「text/*」ではない部分はすべて移動できます。
- HTML メッセージには、おそらく「multipart/alternative」タイプの部分があり (私が思うに)、「text/plain」と「text/html」の 2 つの部分があります。2 つの部分はほぼ同等であるため、HTML 部分を削除できます。存在する部分が HTML ビットだけの場合は、HTML からプレーン テキストへの変換が必要になる場合があります。
- 引用テキストの通常の形式は、テキストの前に ">" 文字を付けることです。行が ">From" で始まる場合を除き、これらの行をドロップできるはずです。この場合、"From" が新しいメールの始まりであるとメール リーダーが認識しないようにするために ">" が挿入されています。
- 署名は「-- \r\n」で開始する必要がありますが、末尾のスペースが欠落する可能性が非常に高くなります。
OSBF-Lua のバージョン 3 には、MIME を処理し、メッセージを MIME 部分などに分割するメール解析ライブラリがあります。私は現在、ほとんどの非テキスト添付ファイルを無視したり、HTML よりもプレーンテキストを優先したりするなどのことを行う、混乱した Lua スクリプトを持っています。(また、引用を保持しようとしながら、長い行を 80 文字に折り返します。)
以前に引用されたメールを削除する限り、上記の提案はすべて有効です (マナーの悪いメーリング リストに登録する必要があります)。
免責事項を確実に削除することは、おそらく難しいでしょう。私の最初のカットは、各メールメッセージの最後から取り除かれる免責事項のライブラリを維持することです。ライブラリに簡単に追加できるようにスクリプトを作成します。より洗練されたものについては、ある種の機械学習を試してみます。
私は 2007 年 2 月からスパム フィルタリングに取り組んできましたが、電子メールに関係するものはすべてめちゃくちゃであることがわかりました。良い経験則は、あなたがやりたいことは、あなたが思っているよりもずっと難しいということです :-(
「プログラムで電子メールを「クリーンアップ」することは可能ですか?」という質問に対して、「いいえ、確実ではありません」と答えます。
あなたが直面している危険は、実際には技術的なものではなく、社会的なものです。
メッセージのいくつかの側面 (画像など) を簡単に見つけて除外することができます。同様に、署名と免責事項を除外することも可能です (ただし、より困難です)。
本当の問題は、それを間違えた場合のコストです。
フィルタによってメッセージの重要な部分が削除された場合はどうなりますか? それをさかのぼって行方不明の部分を見つけることができますか、それともあなたのフィルタリングは破壊的ですか? さらに悪いことに、ピースがなくなっていることに気付くでしょうか?
私が何年も前に見た古典的なコメディのスケッチがあります。車で一緒に働く 2 人の男。1 人は下で作業を行っており、もう 1 人は近くに座ってサービス マニュアルの指示を読んでいます。
手作業の男、声を出して読む:「オイルパンの中央にある太字を元に戻します...」[ページをめくる]
道具屋さん:「よし、出た」
マニュアルガイ:「……どんなことがあっても」
独自のアプリケーションを作成する場合は、正規表現を調べて、テキストを見つけて置き換えます。アプリケーションを少し使いやすくするために、Email というクラスを作成します。そのクラスには、RAW というプロパティと Stripped というプロパティがあります。
ほんのいくつかのヒントです。残りは正規表現を調べるときに収集できます。