使用 imaplib 获取 headers 封电子邮件?
Using imaplib to get headers of emails?
这是我的代码:
conn = imaplib.IMAP4_SSL('imap.gmail.com')
conn.login('username', 'password')
conn.select()
typ, data = conn.search(None, "ALL")
parser1 = HeaderParser()
for num in data[0].split():
typ, data = conn.fetch(num, '(RFC822)')
header_data = str(data[1][0])
msg = email.message_from_string(header_data)
print(msg.keys())
print(msg['Date'])
为什么我得到 msg.keys() 的打印输出“[]”和消息 ['Date'] 的 "None"。没有错误信息。但是,如果我注释掉最后 4 行代码,然后键入 print(data),那么所有 headers 都会打印出来吗?我正在使用 python 3.4
conn.fetch
returns tuples of message part envelope and data。出于某种原因——我不确定为什么——它也可能是 return 一个字符串,例如 ')'
。因此,与其硬编码 data[1][0]
,不如循环遍历 data
中的元组并解析消息部分:
typ, msg_data = conn.fetch(num, '(RFC822)')
for response_part in msg_data:
if isinstance(response_part, tuple):
msg = email.message_from_string(response_part[1])
例如,
import imaplib
import config
import email
conn = imaplib.IMAP4_SSL("imap.gmail.com", 993)
conn.login(config.GMAIL_USER2, config.GMAIL_PASS2)
try:
conn.select()
typ, data = conn.search(None, "ALL")
print(data)
for num in data[0].split():
typ, msg_data = conn.fetch(num, '(RFC822)')
for response_part in msg_data:
if isinstance(response_part, tuple):
part = response_part[1].decode('utf-8')
msg = email.message_from_string(part)
print(msg.keys())
print(msg['Date'])
finally:
try:
conn.close()
except:
pass
finally:
conn.logout()
大部分代码来自 Doug Hellman's imaplib tutorial。
这是我的代码:
conn = imaplib.IMAP4_SSL('imap.gmail.com')
conn.login('username', 'password')
conn.select()
typ, data = conn.search(None, "ALL")
parser1 = HeaderParser()
for num in data[0].split():
typ, data = conn.fetch(num, '(RFC822)')
header_data = str(data[1][0])
msg = email.message_from_string(header_data)
print(msg.keys())
print(msg['Date'])
为什么我得到 msg.keys() 的打印输出“[]”和消息 ['Date'] 的 "None"。没有错误信息。但是,如果我注释掉最后 4 行代码,然后键入 print(data),那么所有 headers 都会打印出来吗?我正在使用 python 3.4
conn.fetch
returns tuples of message part envelope and data。出于某种原因——我不确定为什么——它也可能是 return 一个字符串,例如 ')'
。因此,与其硬编码 data[1][0]
,不如循环遍历 data
中的元组并解析消息部分:
typ, msg_data = conn.fetch(num, '(RFC822)')
for response_part in msg_data:
if isinstance(response_part, tuple):
msg = email.message_from_string(response_part[1])
例如,
import imaplib
import config
import email
conn = imaplib.IMAP4_SSL("imap.gmail.com", 993)
conn.login(config.GMAIL_USER2, config.GMAIL_PASS2)
try:
conn.select()
typ, data = conn.search(None, "ALL")
print(data)
for num in data[0].split():
typ, msg_data = conn.fetch(num, '(RFC822)')
for response_part in msg_data:
if isinstance(response_part, tuple):
part = response_part[1].decode('utf-8')
msg = email.message_from_string(part)
print(msg.keys())
print(msg['Date'])
finally:
try:
conn.close()
except:
pass
finally:
conn.logout()
大部分代码来自 Doug Hellman's imaplib tutorial。