Извлекать вложения электронной почты и сохранять дату изменения / создания? - PullRequest
0 голосов
/ 14 апреля 2020

Я пытаюсь извлечь файлы из электронных писем через IMAP, используя Python 3.7 (на Windows, fyi), и каждая из моих попыток показывает извлеченные файлы с датой модификации и создания = время извлечения (что неверно).
Поскольку полные почтовые приложения имеют возможность сохранять эту информацию, она должна где-то храниться. Я также попробовал работать со структурами, думая, что информация может храниться в двоичном формате, но безуспешно.

import email
from email.header import decode_header
import imaplib
import os

SERVER = None
OUT_DIR = '/var/out'
IMP_SRV = 'mail.domain.tld'
IMP_USR = 'user@domain.tld'
IMP_PWD = 'hunter2'

def login_mail():
    global SERVER
    SERVER = imaplib.IMAP4_SSL(IMP_SRV)
    SERVER.login(IMP_USR, IMP_PWD)


def get_mail(folder='INBOX'):
    mails = []
    _, data = SERVER.uid('SEARCH', 'ALL')
    uids = data[0].split()

    for uid in uids:
        _, s = SERVER.uid('FETCH', uid, '(RFC822)')
        mail = email.message_from_bytes(s[0][1])
        mails.append(mail)

    return mails


def parse_attachments(mail):
    for part in mail.walk():
        if part.get_content_type() == 'application/octet-stream':
            filename = get_filename(part)
            output = os.path.join(OUT_DIR, filename)
            with open(output, 'wb') as f:
                f.write(part.get_payload(decode=True))

def get_filename(part):
    filename = part.get_filename()
    binary = part.get_payload(decode=True)
    if decode_header(filename)[0][1] is not None:
        filename = decode_header(filename)[0][0].decode(decode_header(filename)[0][1])
    filename = os.path.basename(filename)

    return filename

Может кто-нибудь сказать мне, что я делаю неправильно, и если это как-то возможно?
После получения указанной информации можно изменить временные метки, используя Как изменить дату создания файла Windows файла? .

...