これを行う理由は、ボットに電子メールで送信された指示を簡単に解析できるようにするためです。これは、majordomo がサブスクライブやサブスクライブ解除などのコマンドを解析するために行うようなものです。引用されたテキスト、ヘッダーと本文の区別など、多くのクレイジーなフォーマットと処理するものがあることがわかりました.
これを行うための perl モジュールが理想的ですが、任意の言語でのソリューションを歓迎します。
Python にはemailがあります。
>>> import email
>>> p = email.Parser.Parser()
>>> msg = p.parsestr("From: me@example.com\nSubject: Hello\nDear Sir or Madam...")
>>> msg.get("Subject")
Hello
>>> msg.get_payload()
'Dear Sir or Madam...'
MIME と、Python に含まれるほぼすべてのエンコーディングをサポートしています。HTML は単なるテキストになりますが、BeautifulSoup または Tidy+ElementTree を使用してテキストを取得できます。
私があなたが話していることをすべて正確に行ったとは言えませんが、著者があなたが説明したことをしているように聞こえるので、おそらくこれを読んでください。
電子メール関連のモジュールについて CPANを調べるよりも悪いことをする可能性があります。
過去に主題を分類するために使用したもので、本文はEmail::Simpleです。
いくつかのアイデア: http://news.ycombinator.com/item?id=666607
これが私の不完全なソリューションです。これは実際には私の目的(ボットにメールで送信されたコマンドの解析)で機能します。決定的に優れた回答が得られるまで、参照用にここに保持します。
# Take an email as a big string and turn it into a plain ascii equivalent.
# TODO: leave any html tags inside of quotes alone.
sub plainify {
my($email) = @_;
# translate quoted-printable or whatever this crap is to plain text.
$email =~ s/\=0D\=0A/\n/gs;
$email =~ s/\=0A/\n/gs;
$email =~ s/\=A0/ /gs;
$email =~ s/\=2E/\./gs;
$email =~ s/\=20/\ /gs;
$email =~ s/\=([\n\r]|\n\r|\r\n)//gs;
# translate html to plain text (or enough of it to parse commands).
$email =~ s/\ \;/ /gs;
$email =~ s/\<br\>/\n/gis;
$email =~ s/(\<[^\>]+\>)/\n$1\n/gs;
return $email
}