3

我想这样做的原因是为了便于解析通过电子邮件发送给机器人的指令,majordomo 可能会解析订阅和取消订阅等命令。事实证明,有很多疯狂的格式和事情需要处理,比如引用文本、区分标题和正文等。

执行此操作的 perl 模块将是理想的,但欢迎使用任何语言的解决方案。

4

4 回答 4

4

Python 有电子邮件

>>> 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 从中获取文本。

于 2008-09-26T01:34:15.287 回答
2

不能说我已经完全按照您所说的做了,但是也许您应该阅读一下,因为听起来作者正在按照您的描述进行操作。

解析 MIME 和 HTML

于 2008-09-25T21:33:12.090 回答
0

You could do worse than look at CPAN for email-related modules.

One that I've used in the past for breaking out subjects, and bodies has been Email::Simple

于 2008-09-25T21:39:12.667 回答
-1

一些想法: 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/\&nbsp\;/ /gs;
  $email =~ s/\<br\>/\n/gis;
  $email =~ s/(\<[^\>]+\>)/\n$1\n/gs;

  return $email
}
于 2008-09-25T21:36:19.167 回答