繁体   English   中英

解析电子邮件字段

[英]Parse email fields

我想从To:电子邮件字段解析电子邮件地址。

确实,当循环播放 mbox 中的电子邮件时:

mbox = mailbox.mbox('test.mbox')
for m in mbox:
  print m['To']

我们可以得到类似的东西:

info@test.org, Blahblah <blah@test.com>, <another@blah.org>, "Hey" <last@one.com>

应该被解析为:

[{email: "info@test.org", name: ""}, 
 {email: "blah@test.com", name: "Blahblah"},
 {email: "another@blah.org", name: ""},
 {email: "last@one.com", name: "Hey"}]

是否已经为此内置了一些东西(在mailbox或另一个模块中)或什么都没有?

我读了几次这个文档,但我没有找到相关的东西。

您可以email.utils.getaddresses()使用email.utils.getaddresses()

>>> getaddresses(['info@test.org, Blahblah <blah@test.com>, <another@blah.org>, "Hey" <last@one.com>'])
[('', 'info@test.org'), ('Blahblah', 'blah@test.com'), ('', 'another@blah.org'), ('Hey', 'last@one.com')]

(请注意,该函数需要一个列表,因此您必须将字符串括在[...] 。)

email.parser有你正在寻找的模块 email.message仍然相关,因为解析器将使用此结构返回消息,因此您将从中获取标题数据。 但要真正读取文件, email.parser是要走的路。

正如@TheSpooniest 所指出的, email有一个解析器:

import email

s = 'info@test.org, Blahblah <blah@test.com>, <another@blah.org>, "Hey" <last@one.com>'

for em in s.split(','):
    print email.utils.parseaddr(em) 

给出:

('', 'info@test.org')
('Blahblah', 'blah@test.com')
('', 'another@blah.org')
('Hey', 'last@one.com')

Python 提供了email.Header.decode_header()用于解码头部。 该函数解码每个原子并返回一个元组列表(文本,编码),您仍然需要解码并加入以获得全文。

对于地址,Python 提供email.utils.getaddresses()将地址拆分为元组列表( display-name, address )。 display-name 也需要解码,地址必须符合 RFC2822 语法。 函数getmailaddresses()完成所有工作。

这是一个可能有助于http://blog.magiksys.net/parsing-email-using-python-header的教程

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM