Как получить список файлов из архива (rar или zip), прикрепленных к E-mail, используя Python? То есть, у меня есть EML-файл. Мне не нужно разархивировать файлы, чтобы получить список. Теоретически возможная опция при прикреплении очень большого файла и обработки извлеченных вложений может занять много времени и ресурсов.Как получить список файлов из архива (rar или zip), прикрепленный к E-mail с помощью Python?
1
A
ответ
1
Вот как сделать это с STDLIB, получая первое вложение в простом из нескольких частей сообщения, хранящееся в message.eml
:
import email.parser
import StringIO
import zipfile
with open('message.eml') as f:
msg = email.parser.Parser().parse(f)
attachment = msg.get_payload(1)
zipf = StringIO.StringIO(attachment.get_payload())
zip = zipfile.ZipFile(zipf)
filenames = zip.namelist()
Это будет проанализировать весь конверт MIME, декодировать все вложение и прочитать каталог ZIP этого вложения ... но по крайней мере он не будет распаковывать какие-либо файлы в ZIP-архиве, поэтому я подозреваю, что на самом деле у вас не будет проблемы с производительностью беспокоюсь о.
0
This answer рассказывает вам, как получить файл-объект (для архива zip используйте ZipFile constructor, чтобы открыть файл, а не обычную функцию open()). Затем вы можете использовать zipfile.namelist(), чтобы получить имена членов архива
С помощью инструментов stdlib нет выбора, кроме [разбора всего MIME-конверта] (http://docs.python.org/2/library/email.parser.html#parser-class-api), [extract вложение] (http://docs.python.org/2/library/email.message.html#email.message.Message.get_payload), [открыть его как почтовый] (http://docs.python.org /2/library/zipfile.html#zipfile.ZipFile) и [прочитать каталог] (http://docs.python.org/2/library/zipfile.html#zipfile.ZipFile.infolist). Конечно, вам не нужно будет читать фактические записи в почтовом индексе. Вы пробовали это и обнаружили, что это слишком медленно, или вас просто беспокоит «теоретически возможно»? – abarnert