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

2024-06-26 11:23:06 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

有没有经过战斗测试的模块可以正确解析这个问题?在

(如果是python的话就有奖金了!email模块只返回原始文本,没有任何分割它的方法,AFAIK) (如果将名称和地址拆分为多个字段,也会获得额外奖励)


Tags: 模块文本friendcomemailjohnccsmith
3条回答

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

下面的内容完全没有必要。我写它之前意识到您可以传递getaddresses()一个包含一个包含多个地址的字符串的列表。

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

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)

给出:

^{pr2}$

我很想看看其他人会怎么处理这个问题!在

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

>>> 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')]

相关问题 更多 >