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

ste*_*eve 2 email email-headers python-3.x

用于从 RFC822 兼容文件读取标头的库函数对我来说工作得很好,例如:

    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)
Run Code Online (Sandbox Code Playgroud)

我现在想从msg上面示例中的结构中删除密件抄送收件人。我查看了del_param()这个,但无法弄清楚要传入的内容。有没有一种好方法可以删除可能存在的任何密件抄送标头(1 个或多个)?

ste*_*eve 5

我找到了一种方法来做到这一点。诀窍是使用 向后遍历标头数组reversed(),以避免内容在数组中“移动”的问题。

# 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])
Run Code Online (Sandbox Code Playgroud)


The*_*tor 5

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

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

for header in msg._headers:
    if header[0].lower() == 'bcc':
        msg._headers.remove(header)
Run Code Online (Sandbox Code Playgroud)