簡體   English   中英

使用imaplib獲取電子郵件的標題?

[英]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()的打印輸出為“[]”,msg ['Date']為“無”。 沒有錯誤消息。 但是,如果我注釋掉最后4行代碼,並輸入print(data),那么所有的標題都會打印出來嗎? 我使用python 3.4

conn.fetch返回消息部分包絡和數據的元組 出於某種原因 - 我不確定為什么 - 它也可能返回一個字符串,例如')' 因此,不是硬編碼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的imaplib教程

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM