Найти - Пользователи
Полная версия: Парсинг писем с mail.ru
Начало » Python для новичков » Парсинг писем с mail.ru
1 2
zigen
добрый день.
Возникла нужда парсить письма со своего ящика. Но скрипт ругается, что я ему подсовывая не стринг тип а байт какой-то. Подскажите куда копать.


import email
import poplib
serv = 'pop.mail.ru'
user = 'user@inbox.ru'
pasw = 'pass'
port = '110'
'def gettingletters():'
Mailbox = poplib.POP3 (serv, port)
Mailbox.user(user)
Mailbox.pass_(pasw)
resp, lst, octets = Mailbox.list()
print ("DEBUG: Total %s messages: %s" % (user, len(lst)))
messages = [Mailbox.retr(i) for i in range(1, len(Mailbox.list()[1]) + 1)]
messages = ["\n".join(mssg[1]) for mssg in messages]
messages = [parser.Parser().parsestr(mssg) for mssg in messages]
for message in messages:
    print ("{} : {}\n".format(message['subject'], message['From']))
        
Mailbox.quit()


Traceback (most recent call last):
File “C:\Python34\my_project.py”, line 14, in <module>
messages = [“\n”.join(mssg) for mssg in messages]
File “C:\Python34\my_project.py”, line 14, in <listcomp>
messages = [“\n”.join(mssg) for mssg in messages]
TypeError: sequence item 0: expected str instance, bytes found
d54wvzc+i5zirs
Попробуй строку
messages = ["\n".join(mssg[1]) for mssg in messages]
изменить вот так
messages = [b"\n".join(mssg[1]) for mssg in messages]
zigen
d54wvzc+i5zirs
Попробуй строку


Теперь новое:

Traceback (most recent call last):
File “C:\Python34\my_project.py”, line 15, in <module>
messages =
File “C:\Python34\my_project.py”, line 15, in <listcomp>
messages =
NameError: name ‘parser’ is not defined
noob_saibot
zigen
А вы парсер импортируйте, и ошибка уйдет. (Так же, рекомендуется, перед импортом его установить)
zigen
zigen
С этим разобрался , добавил from email import parser. Теперь вот опять на типы ругается

Traceback (most recent call last):
File “C:\Python34\my_project.py”, line 16, in <module>
messages =
File “C:\Python34\my_project.py”, line 16, in <listcomp>
messages =
File “C:\Python34\lib\email\parser.py”, line 68, in parsestr
return self.parse(StringIO(text), headersonly=headersonly)
TypeError: initial_value must be str or None, not bytes


Попробовал сделать вот так: messages =
Ошибки все ушли, но не есть решение, т.к. на выходе None : None
d54wvzc+i5zirs
print ("{} : {}\n".format(message['subject'], message['From']))
print ("{} : {}\n".format(message['subject'].decode('utf8'), message['From'].decode('utf8')))
zigen
d54wvzc+i5zirs
print (“{} : {}\n”.format(message.decode('utf8'), message.decode('utf8')))

Вот зараза =\

Traceback (most recent call last):
File “C:\Python34\my_project.py”, line 18, in <module>
print (“{} : {}\n”.format(message.decode('utf8'), message.decode('utf8')))
AttributeError: ‘NoneType’ object has no attribute ‘decode’
d54wvzc+i5zirs
Попробуй вот так:
print ("{} : {}\n".format(str(message['subject']), str(message['From'])))
zigen
Вот так помогло!!

messages = [parser.Parser().parsestr(mssg.decode('utf8')) for mssg in messages]
zigen
Только неясно как в русский декодировать вот такое на выходе :
=?utf-8?Q?0=9D0=B0_0=B20=B01=880=B5_?=
=?utf-8?Q?0=BE0=B11=8A1=8F0=B20=BB0=B50=BD?=
=?utf-8?Q?0=B80=B5_0=BE1=820=B20=B51=820=B80=BB0=B8_?=
=?utf-8?Q?1=81_0=B00=B41=800=B51=810=B0?=
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB