Python 3.x email.message 库:试图删除特定的 header 内容,例如密件抄送

Python 3.x email.message library: trying to remove specific header content such as bcc

从 RFC822 兼容文件中读取 headers 的 library 函数对我来说工作得很好,例如:

    allRecips = []
    for hdrName in ['to', 'cc', 'bcc']:
        for i in email.utils.getaddresses(msg.get_all(hdrName, [])):
            r = {
                'address': {
                    'name': i[0],
                    'email': i[1]
                }
            }
            allRecips.append(r)

我现在想从上例中的 msg 结构中删除密件抄送收件人。为此,我查看了 del_param(),但不知道要传递什么。 有没有一种好方法可以删除可能存在的任何密件抄送 headers(1 个或多个)?

我找到了一种方法。诀窍是使用 reversed() 通过 headers 的数组向后工作,以避免数组中内容 'moves' 的问题。

# Remove any bcc headers from the message payload. Work backwards, as deletion changes later indices.
for i in reversed(range(len(msg._headers))):
    hdrName = msg._headers[i][0].lower()
    if hdrName == 'bcc':
        del(msg._headers[i])

列表具有搜索项目的删除方法,因此顺序并不重要。

我相信您可以使用此代码实现目标:

for header in msg._headers:
    if header[0].lower() == 'bcc':
        msg._headers.remove(header)