解析可能是html或各种奇怪编码的原始电子邮件并将其转换为纯文本,松树的方式可能会显示它
问题描述:
我想这样做的原因是为了便于解析出指令通过电子邮件发送给机器人,这是majordomo可能会用来解析订阅和取消订阅等命令的一种方式。事实证明,有很多疯狂的格式和东西需要处理,比如引用文本,区分标题和正文等。解析可能是html或各种奇怪编码的原始电子邮件并将其转换为纯文本,松树的方式可能会显示它
perl模块可以做到这一点,但是任何语言的解决方案都是受欢迎的。
答
一些想法: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
}
答
的Python有email。
>>> import email
>>> p = email.Parser.Parser()
>>> msg = p.parsestr("From: [email protected]\nSubject: Hello\nDear Sir or Madam...")
>>> msg.get("Subject")
Hello
>>> msg.get_payload()
'Dear Sir or Madam...'
它支持MIME和几乎包含在Python中的所有编码。 HTML将只是文本,但您可以使用BeautifulSoup或Tidy + ElementTree将文本移出。
谢谢,确实非常有帮助。注意缺少URL中的最终“l”。 – dreeves 2008-09-25 21:38:54