1

关于 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?
4

2 回答 2

3

我一直在使用这个正则表达式,效果很好。从理论上讲,设计一个使这个正则表达式失败的发件人是可能的,这就是我捕获异常并警告地址的原因。但它还没有发生。

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

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

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

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

https://www.rfc-editor.org/rfc/rfc2822#section-3.4

于 2012-11-10T05:38:38.740 回答
1

没有正则表达式,例如:

s = "John Bolton <john78@mail.com>"
email = ''.join([e for e in s.split() if '@' in e])[1:-1]
于 2012-11-10T05:00:49.373 回答