首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解析邮件头文本抄送字段的方法?

解析邮件头文本抄送字段的方法?
EN

Stack Overflow用户
提问于 2011-03-25 07:22:12
回答 4查看 2.8K关注 0票数 5

我有一个Cc标题字段的纯文本,如下所示:

friend@email.com, John Smith <john.smith@email.com>,"Smith, Jane" <jane.smith@uconn.edu>

有没有经过实战测试的模块可以正确解析它?

(如果它是用python编写的,那就更好了!电子邮件模块只返回原始文本,没有任何拆分方法( AFAIK) (如果它将姓名和地址拆分为to字段,也会有好处)

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-03-25 07:35:02

有很多函数可以作为标准的python模块使用,但我认为您要找的是email.utils.parseaddr()email.utils.getaddresses()

代码语言:javascript
复制
>>> addresses = 'friend@email.com, John Smith <john.smith@email.com>,"Smith, Jane" <jane.smith@uconn.edu>'
>>> email.utils.getaddresses([addresses])
[('', 'friend@email.com'), ('John Smith', 'john.smith@email.com'), ('Smith, Jane', 'jane.smith@uconn.edu')]
票数 17
EN

Stack Overflow用户

发布于 2011-03-25 07:34:21

我自己还没有用过它,但在我看来,您可以很容易地使用csv包来解析数据。

票数 0
EN

Stack Overflow用户

发布于 2011-03-25 10:58:59

这是完全不必要的。我在意识到可以向getaddresses()传递一个包含单个字符串(包含多个地址)的列表之前编写了它。

我还没有机会查看电子邮件头中地址的规范,但是根据您提供的字符串,此代码应该可以将其拆分成一个列表,确保忽略逗号(如果逗号在引号内(因此是名称的一部分))。

代码语言:javascript
复制
from email.utils import getaddresses

addrstring = ',friend@email.com, John Smith <john.smith@email.com>,"Smith, Jane" <jane.smith@uconn.edu>,'

def addrparser(addrstring):
    addrlist = ['']
    quoted = False

    # ignore comma at beginning or end
    addrstring = addrstring.strip(',')

    for char in addrstring:
        if char == '"':
            # toggle quoted mode
            quoted = not quoted
            addrlist[-1] += char
        # a comma outside of quotes means a new address
        elif char == ',' and not quoted:
            addrlist.append('')
        # anything else is the next letter of the current address
        else:
            addrlist[-1] += char

    return getaddresses(addrlist)

print addrparser(addrstring)

给予:

代码语言:javascript
复制
[('', 'friend@email.com'), ('John Smith', 'john.smith@email.com'),
 ('Smith, Jane', 'jane.smith@uconn.edu')]

我很想看看其他人是如何解决这个问题的!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5426789

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档