簡體   English   中英

使用Python獲取IMAP的電子郵件接收日期

[英]Get e-mail recieved date of IMAP using Python

我正在使用以下代碼(從StackOverflow中獲取了它:))來獲取來自特定電子郵件地址的所有未讀電子郵件。 它工作完美!

但是,我想獲取從中獲取附件的每封電子郵件的實際接收(或發送)日期。 但是我不知道該怎么做?

import email
import imaplib
import os
import sys
import random
import string
import glob
import unicodedata

def remove_accents(s):
    nkfd_form = unicodedata.normalize('NFKD', s)
    return u''.join([c for c in nkfd_form if not unicodedata.combining(c)])

def remove_non_ascii(text):
    return unidecode(unicode(text, encoding = "cp865"))

def replace_non_ascii(x): return ''.join(i if ord(i) < 128 else '_' for i in x)

detach_dir = r'\\1.1.1.1\xxx\xxx\drop_folder'

try:
    imapSession = imaplib.IMAP4_SSL('outlook.office365.com')
    typ, accountDetails = imapSession.login('xxxx', 'xxxx')
    if typ != 'OK':
        print ('Not able to sign in!')
        raise

    imapSession.select('Inbox')
    typ, data = imapSession.search(None, '(UNSEEN FROM "@xxxx.xxx")')
    if typ != 'OK':
        print ('Error searching Inbox.')
        raise

    # Iterating over all emails
    for msgId in data[0].split():
        typ, messageParts = imapSession.fetch(msgId, '(RFC822)')
        if typ != 'OK':
            print ('Error fetching mail.')
            raise

        emailBody = messageParts[0][1]
        mail = email.message_from_string(emailBody)
        for part in mail.walk():
            if part.get_content_maintype() == 'multipart':
                # print part.as_string()
                continue
            if part.get('Content-Disposition') is None:
                # print part.as_string()
                continue
        fileName = part.get_filename().encode('utf-8')

        if bool(fileName):
            filePath = os.path.join(detach_dir, 'EXP-' + fileName + '.xls')
            if not os.path.isfile(filePath) :
                fp = open(filePath, 'wb')
                fp.write(part.get_payload(decode=True))
                fp.close()

    imapSession.close()
    imapSession.logout()
except :
    print ('Not able to download all attachments.')

您可以獲取INTERNALDATE來代替RFC822項,或者在RFC822項之外獲取。 (通常)服務器接收到該消息。

您將必須對返回項進行一些解析,因為imaplib不會解析FETCH結果。 如果這是您唯一獲取的內容,則將更易於解析。

響應看起來像

* 5 FETCH (INTERNALDATE "17-Jul-2018 02:44:25 -0700")

暫無
暫無

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

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