如何在Python3中打开邮件头?

2024-04-28 20:36:16 发布

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

注意:这个问题与编码无关,阅读后应该很清楚。忽略上面的建议。

我正在学习Python,我发现一个不错的工具可以通过MIME抓取一些电子邮件并显示给定的标题。以下是我的剧本:

#!/usr/bin/env python3

from imaplib import IMAP4_SSL
from netrc import netrc
from email import message_from_bytes

conn = IMAP4_SSL('imap.gmail.com')
auth = netrc().hosts['imap.gmail.com']

conn.login(auth[0], auth[2])
conn.select()

typ, data = conn.search(None, 'ALL')
i = 0
for num in reversed(data[0].split()):
    i += 1
    typ, data = conn.fetch(num, '(RFC822)')
    email = message_from_bytes(data[0][1])
    print("%i: %s" % (int(num), email.get('subject')))
    if i == 5:
        break
conn.close()
conn.logout()

令人沮丧的是,头折起来了;这样就露出了头 而不是邮件头中的实际值。在

如何获得正确展开的头值?我想 坚持核心Python3的东西,但如果必须的话,我对外部部门开放。在


Tags: fromimportcomauthsslmessagedatabytes
1条回答
网友
1楼 · 发布于 2024-04-28 20:36:16

TL;DR:删除换行符

我希望有一个简单的答案,所以如果你有一个更好的,请随意添加它。同时,这种sorta犹太人区解决方案非常有效:

#!/usr/bin/env python3

from imaplib import IMAP4_SSL
from netrc import netrc
from email import message_from_bytes
import re

conn = IMAP4_SSL('imap.gmail.com')
auth = netrc().hosts['imap.gmail.com']

conn.login(auth[0], auth[2])
conn.select()

typ, data = conn.search(None, 'ALL')
i = 0
for num in reversed(data[0].split()):
    i += 1
    typ, data = conn.fetch(num, '(RFC822)')
    email = message_from_bytes(data[0][1])
    raw_header = email.get('subject')
    header = re.sub('[\r\n]', '', header)

    print("%i: %s" % (int(num), header))
    if i == 5:
        break
conn.close()
conn.logout()

相关问题 更多 >