如何从InboundMailHandler中提取电子邮件地址?

时间:2012-11-10 04:33:57

标签: python google-app-engine

关于InboundMailHandler的问题。

class MailHandle(InboundMailHandler):
  def receive(self, mail_message):

mail_message.sender may contained "John Bolton <john78@mail.com>". How can i extract "john78@mail.com" from it?

2 个答案:

答案 0 :(得分:3)

我一直在使用这个正则表达式,它非常有效。从理论上讲,可能会设计一个未通过此正则表达式的发送方,这就是我捕获异常并提醒地址的原因。但它还没有发生。

try:
    sender = re.search('<?([^<>]+)>?$',mail.sender).group(1)
except AttributeError:
    ...

另一个答案与官方电子邮件地址格式不兼容,如RFC 2822所定义。

  

通常,邮箱由两部分组成:(1)可选显示   名称,表示收件人的姓名(可以是某人)   或者系统)可以显示给邮件的用户   应用程序,以及(2)尖括号中的addr-spec地址   (“&lt;”和“&gt;”)。 还有另一种简单形式的邮箱   addr-spec地址单独出现的地方,没有收件人的地址   名称或尖括号。

请注意,此代码段提及收件人,但如果您阅读规范,它也适用于发件人。

http://tools.ietf.org/html/rfc2822#section-3.4

答案 1 :(得分:1)

没有正则表达式,例如:

s = "John Bolton <john78@mail.com>"
email = ''.join([e for e in s.split() if '@' in e])[1:-1]