Я пытаюсь открыть изображение из электронного письма и затем повернуть его. Я не могу заставить его работать без сохранения изображения в файл ранее.
Я получаю эту ошибку:
Traceback (most recent call last):
File "stack_help.py", line 41, in <module>
with Image.open(part.get_payload(decode=True)) as img:
File "/home/ksb/Dropbox/Python/imap/venv/lib/python3.6/site-packages/PIL/Image.py", line 2809, in open
fp = builtins.open(filename, "rb")
ValueError: embedded null byte
Вот мой код:
import email
import imaplib
import os
import mimetypes
from PIL import Image
host = 'mail.host.dk'
user = 'user@host.dk'
password = 'password'
mailbox = 'INBOX'
mail = imaplib.IMAP4_SSL(host)
mail.login(user,password)
mail.select(mailbox)
result,data= mail.uid('search',None,"ALL")
inbox_item_list = data[0].split()
i = 1
for item in inbox_item_list:
result2,email_data = mail.uid('fetch',item, '(RFC822)')
raw_email = email_data[0][1].decode("utf-8")
email_message = email.message_from_string(raw_email)
for part in email_message.walk():
filename = part.get_filename()
content_type = part.get_content_type()
save_path = os.path.join(os.getcwd(),"emails", str(i) + " - " + "folder")
if not os.path.exists(save_path):
os.makedirs(save_path)
if filename:
with open(os.path.join(save_path, filename), 'wb') as fp:
if "image" in content_type:
fp.write(part.get_payload(decode=True))
with Image.open(part.get_payload(decode=True)) as img:
img.rotate(20)
i += 1
Эта строка сохраняет изображение в виде файла:
fp.write(part.get_payload(decode=True))
У меня нет проблем, открывая этот файл как изображение, а затем поворачивая его, но следующая часть не работает:
with Image.open(part.get_payload(decode=True)) as img:
img.rotate(20)
Любая помощь приветствуется.
BR Kresten