# -*- coding: koi8-r -*- import poplib import base64 import quopri import re def decode_subject(inp): found = re.findall(r'=\?([a-zA-Z0-9-]+)\?([bqBQ])\?([a-zA-Z0-9/+=]{4,})={0,2}\?', inp.decode('utf8', 'ignore')) try: found = list(filter(bool, found[0])) except IndexError: return inp # if found[1].upper() == 'B': text = base64.b64decode(found[2]).decode(found[0], 'replace') else: text = quopri.decodestring(found[2]).decode(found[0], 'replace') return 'Subject: {}'.format(text) server = "pop.mail.ru" port = "995" user = "здесь логин" pasw= 'здесь пароль' mServer = poplib.POP3_SSL(server,port) mServer.user(user) mServer.pass_(pasw) print(mServer.stat()) messages = [] senders = [] numMessages = len(mServer.list()[1]) for i in range(numMessages): for msg in mServer.top(i+1,0)[1]: if msg.startswith(b'Subject'): messages.append(msg) if msg.startswith(b'Return-path'): senders.append(msg) print (mServer.retr(2)) # # mServer.dele(3) # for i in messages: print(decode_subject(i)) print('\n') for i in senders: print(i) print (mServer.quit()) #
Используя функцию POP3.retr(which) получаю письмо, только оно появляется в какой то не понятной для мене кодировке.
Вот отрывок:
“ b'O3ZhbHVlIFBST0M9IklOUyImZ3Q7LTQuOTMmbHQ7L3ZhbHVlJmd0Ozxicj4KJmx0Oy9wYXJhbWV0', b'ZXImZ3Q7PGJyPgombHQ7cGFyYW1ldGVyIFZBUj0iVEVMRU0iIFNFTlNUWVBFPSJIZWF0ZXIiIFNF', b'TlNJRD0iMiIgdW5pdD0iYyImZ3Q7PGJyPgombHQ7dmFsdWUgUFJPQz0iSU5TIiZndDstMS44NyZs', ”
Я так понимаю, это какой то байт код? Должен быть в кодировке Base64 ?
Пробовал его декодировать с помощью функции base64.b64decode(), питон ругается, говорит давай ASCII:
“ TypeError: argument should be a bytes-like object or ASCII string, not ‘tuple’ ”
Ну по крайней мере я так понимаю, что необходимо его с начало кодировать в ASCII, а уже после этого в Base64, ну или как то из b' байт кода переиначить в строку?
А может быть я вообще не той функцией пользуюсь? Ну в смысле POP3.retr(which), хотя вроде другой подходящей в модуле poplib нету: https://docs.python.org/2/library/poplib.html#module-poplib
Или не туда смотрю?
Вообщем вопросов много, натолкните на путь истинный
