Уведомления

Группа в Telegram: @pythonsu

#1 Май 21, 2015 00:06:23

ruthven
Зарегистрирован: 2015-05-20
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

Python 3, email

Добрый день. Помогите, пожалуйста, выдрать аттач из письма. Все примеры, которые нашел, действуют примерно по одному плану:

response = server.retr(msgCount)
msg = email.message_from_bytes(b'\n'.join(response[1])
for part in msg.walk():
    print(part.get_content_type())
    if part.get_content_maintype() == 'multipart':
        continue
    if part.get('Content-Disposition') is None:
        print("no content dispo")
        continue
    filename = part.get_filename()
    
    fp = open(os.path.join(self.savedir, filename), 'wb')
    fp.write(part.get_payload(decode=1))
    fp.close

Но я не могу даже имени приаттаченного файла считать, get_filename() возвращает None (всё остальное тоже) вот письмо , которое я получаю с сервера сохранено pickle.dump'ом т.е. если потом сделать
import pickle
f = open('msg.dat', 'rb')
response = pickle.load(f)
f.close()
то в response будет, то что я получаю с сервера, т.е. response = server.retr(msgCount), в самом письме буквально две строчки, приаттаченный файл бинарный.

Офлайн

#2 Май 21, 2015 01:02:35

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

Python 3, email

>>> import pickle
>>> import email
>>> 
>>> r = pickle.load(open('msg.dat', 'rb'))
>>> 
>>> m = email.message_from_bytes(b'\n'.join(r[1]))
>>> p = tuple(m.walk())[-1]
>>> n = p.get_filename()
>>> c = p.get_payload(decode=True)
>>> 
>>> n, c[:10]
('LSN_00003396_T6.lsn', b'\x0c\x00\x00\x00Nemesi')
>>>



Отредактировано py.user.next (Май 21, 2015 01:09:17)

Офлайн

#3 Май 21, 2015 02:16:49

ruthven
Зарегистрирован: 2015-05-20
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

Python 3, email

py.user.next Спасибо огромное, очень выручили.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version