c# asp.net を使用して Web ベースの電子メール クライアントを作成しています。
紛らわしいのは、さまざまな電子メール クライアントが、電子メールで返信するときにさまざまな方法で元のテキストを追加しているように見えることです。
私が疑問に思っていたのは、何らかの標準化された方法があれば、このプロセスを明確にすることですか?
ありがとう - テオ
私が考えていた:
public String cleanMsgBody(String oBody, out Boolean isReply)
{
isReply = false;
Regex rx1 = new Regex("\n-----");
Regex rx2 = new Regex("\n([^\n]+):([ \t\r\n\v\f]+)>");
Regex rx3 = new Regex("([0-9]+)/([0-9]+)/([0-9]+)([^\n]+)<([^\n]+)>");
String txtBody = oBody;
while (txtBody.Contains("\n\n")) txtBody = txtBody.Replace("\n\n", "\n");
while (new Regex("\n ").IsMatch(txtBody)) txtBody = (new Regex("\n ")).Replace(txtBody, "\n");
while (txtBody.Contains(" ")) txtBody = txtBody.Replace(" ", " ");
if (isReply = (isReply || rx1.IsMatch(txtBody)))
txtBody = rx1.Split(txtBody)[0]; // Maybe a loop through would be better
if (isReply = (isReply || rx2.IsMatch(txtBody)))
txtBody = rx2.Split(txtBody)[0]; // Maybe a loop through would be better
if (isReply = (isReply || rx3.IsMatch(txtBody)))
txtBody = rx3.Split(txtBody)[0]; // Maybe a loop through would be better
return txtBody;
}
そうではありません。
インターネットメッセージの元のRFCはヘッダーについてin-reply-to
説明していますが、本文の形式は指定していません。
お気づきのとおり、クライアントが異なれば元のテキストをさまざまな方法で追加します。これは、標準がないことを意味し、ユーザーもさまざまなことを行うという事実と相まって、次のようになります。
標準化された方法はありませんが、賢明なヒューリスティックによって適切な距離が得られます。
一部のアルゴリズムは、最初の文字に基づいて行を分類し、テキストをマークアップされたテキストのコーパスと比較して、各行が a) 次/前のブロックと同じブロックの一部であり、b ) 引用テキスト、署名、新しいテキストなど
最も一般的な電子メール クライアントをいくつか試し、いくつかのサンプル メッセージを作成して比較し、違いを確認することをお勧めします。Usenet ニュースグループも、作業に使用する適切なメッセージのコーパスを構築するのに役立ちます。もちろん、HTML 形式の電子メールはさらに複雑になりますが、準拠しているほとんどのメール クライアントには、対応するプレーン テキストも含まれています。「Paul written:」を解析できるクライアントが「Pablo ha scritto:」で失敗する可能性があるため、異なる言語でも問題が発生します。
試すことができるいくつかのヒューリスティックは
-任意の数の>文字-「書き込み:」を探します(これには十分注意してください)
また、[メッセージID]フィールドを[返信先]フィールドに関連付けてみることができます
そして最後に、これを行うための適切なライブラリが見つからない場合は、このプロジェクトを開始するときが来ました。クトゥルフの方法でメールを解析する必要はもうありません:)