13

c# asp.net を使用して Web ベースの電子メール クライアントを作成しています。

紛らわしいのは、さまざまな電子メール クライアントが、電子メールで返信するときにさまざまな方法で元のテキストを追加しているように見えることです。

私が疑問に思っていたのは、何らかの標準化された方法があれば、このプロセスを明確にすることですか?

ありがとう - テオ

4

4 に答える 4

3

私が考えていた:

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;
}
于 2010-03-22T10:07:41.040 に答える
2

そうではありません。

インターネットメッセージの元のRFCはヘッダーについてin-reply-to説明していますが、本文の形式は指定していません。

お気づきのとおり、クライアントが異なれば元のテキストをさまざまな方法で追加します。これは、標準がないことを意味し、ユーザーもさまざまなことを行うという事実と相まって、次のようになります。

  • プレーンテキスト、「リッチテキスト」、HTMLはすべて、返信を元のテキストから分離する方法が異なります。
  • Outlookでは、メッセージに返信するときに次のオプションから選択できます。
  • 含めないでください
  • 元のメッセージを添付する
  • 元のメッセージテキストを含める
  • 元のメッセージテキストを含めてインデントする
  • 元のメッセージの各行にプレフィックスを付ける
  • その上、コメントが元のメッセージと混ざり合っている「Responsesin-line」という返信を頻繁に送受信するため、元のメッセージは元の形式では存在しなくなります。
于 2010-03-15T13:06:15.953 に答える
2

標準化された方法はありませんが、賢明なヒューリスティックによって適切な距離が得られます。

一部のアルゴリズムは、最初の文字に基づいて行を分類し、テキストをマークアップされたテキストのコーパスと比較して、各行が a) 次/前のブロックと同じブロックの一部であり、b ) 引用テキスト、署名、新しいテキストなど

最も一般的な電子メール クライアントをいくつか試し、いくつかのサンプル メッセージを作成して比較し、違いを確認することをお勧めします。Usenet ニュースグループも、作業に使用する適切なメッセージのコーパスを構築するのに役立ちます。もちろん、HTML 形式の電子メールはさらに複雑になりますが、準拠しているほとんどのメール クライアントには、対応するプレーン テキストも含まれています。「Paul written:」を解析できるクライアントが「Pablo ha scritto:」で失敗する可能性があるため、異なる言語でも問題が発生します。

于 2010-03-19T21:14:45.873 に答える
1

試すことができるいくつかのヒューリスティックは

-任意の数の>文字-「書き込み:」を探します(これには十分注意してください)

また、[メッセージID]フィールドを[返信先]フィールドに関連付けてみることができます

そして最後に、これを行うための適切なライブラリが見つからない場合は、このプロジェクトを開始するときが来ました。クトゥルフの方法でメールを解析する必要はもうありません:)

于 2010-03-21T20:29:38.710 に答える