web-dev-qa-db-ja.com

メールから署名と返信を削除する

私は現在、送信された通知メールにユーザーが返信できるシステムに取り組んでいます(ため息)。

返信と署名を削除して、ノイズのない返信の実際の内容を残す必要があります。

誰かがこれを行うための最良の方法について何か提案がありますか?

44
Jim Neath

システムが社内にある場合や、返信形式の数が限られている場合は、かなり良い仕事をすることができます。 tracチケットへの電子メール応答用に設定したフィルターは次のとおりです。

以下を含むすべてのテキストを削除します。

  1. '-- \n'(標準の電子メール信号区切り文字)に等しい行
  2. '--\n'に等しい行(人々はしばしばsig区切り文字のスペースを忘れます;そしてこれはsigの外ではそれほど一般的ではありません)
  3. '-----Original Message-----'で始まる行(MS Outlookのデフォルト)
  4. '________________________________ 'で始まる行(32アンダースコア、Outlookも)
  5. 'On 'で始まり、' wrote:\n'で終わる行(OS X Mail.appのデフォルト)
  6. 'From: 'で始まる行(フェイルセーフの4つのOutlookおよびその他の応答形式)
  7. 'Sent from my iPhone'で始まる行
  8. 'Sent from my BlackBerry'で始まる行

3番と4番は、ユーザーが偶然に線を押しつぶしてしまうことがあるため、「等しい」ではなく「で始まる」です。

不足しているテキストを修正するよりも、返信のゴミを持っている方が(私たちにとって)煩わしいので、返信を取り除くことについてはもっと寛大にしようとしています。

誰かが共有したい野生の他のフォーマットを持っていますか?

42
onecreativenerd

Email_reply_parser gem -- https://github.com/github/email_reply_parser を確認してください。それはこの問題を処理する素晴らしい仕事をします。

10
DrewB

私はあなたがこれを行うことができるとは思わない確実に(署名は'--'で始まっていたが、もうそれは見当たらない)。おそらく、テキストヘッダーの間に返信するように人々に依頼してから、これから返信を削除する方がよいでしょうか。エレガントではありませんが、おそらくより信頼性があります。

例えば.

REPLY BETWEEN HERE -->

AND HERE -->

したがって、上記の必要なヘッダーを探して、その中間にあるものを取得するだけです。

8
Brian Agnew

強力で堅牢なものが必要で、学術出版物を読んでもかまわない場合は、次のことを確認してください。

これが著者の1人のホームページで、詳細とダウンロードが含まれています。

4
mkopala

(__または-の検出に加えて)署名のみに使用できるアプローチは、送信者の名または姓がshort行(〜3を含む)にあるかどうかをテストすることです。最大4ワードまで)。

送信者名は、From: John Doe <[email protected]>のように、ほとんどの場合、電子メールアドレスの横にある生の電子メールヘッダーにあります。

これは、電子メールに自分の名前を書くことはめったにないという仮定に基づいており、そうする場合は、おそらくlong文になっています。

もちろん誤検知もありますが、何をするかによっては大きな問題にはならないかもしれません(引用されたテキストと署名を... gmailスタイルのボタンに折りたたむために使用するので、過剰検出が失われることはありませんどんなコンテンツでも、見当違いです)。

1
qnilab

これらの電子メールがプレーンテキストであると想定できる場合は、返信として「>」で始まる行を削除し、「-」行で署名を区切る必要があります。しかし、インターネット上のすべての人がルールに準拠したソフトウェアを使用しているわけではないため、これらの仮定は機能しない可能性があります。

0
samuil

メールの解析専用の本当に素敵なPHPライブラリがあります

http://williamdurand.fr/EmailReplyParser/

https://github.com/willdurand/EmailReplyParser

0
kachar