Я пытаюсь извлечь файлы из электронных писем через 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 файла? .