Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 17, 2011 02:03:03

notfedor
От:
Зарегистрирован: 2011-10-17
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблема с кодировками принятой почты(poplib)

Всем привет!
Столкнулся со столь распространенной проблемой кодировок. Сразу отмечу, что использую Mac.
При использовании следующего кода на прием почты с mail.ru кирилица выводится вот в таком виде:

либо:
=?utf-8?Q?"=D0=97=D0=BD=D0=B0=D0=BA=D0=BE=D0=BC=D1=81=D1=82=D0=B2=D0=B0

либо:
=?utf-8?b?0JLRiyDQt9Cw0YDQtdCz0LjRgdGC0YDQuNGA0L7QstCw0LvQuNGB0Ywg0L0=?=

import poplib, email

SERVER = "pop.mail.ru "
user = "user"
USERPASSWORD = "pass"

p = poplib.POP3('pop.mail.ru')
print p.getwelcome()

print p.user(user)
print p.pass_(USERPASSWORD)

response, lst, octets = p.list()
print response
for msgnum, msgsize in [i.split() for i in lst]:
print "Number: %(msgnum)s Size: %(msgsize)s" % vars()
print "UIDL =", p.uidl(int(msgnum)).split()[2]
if int(msgsize) > 32000:
(resp, lines, octets) = p.top(msgnum, 0)
else:
(resp, lines, octets) = p.retr(msgnum)
msgtxt = "\n".join(lines)
msg = email.message_from_string(msgtxt)
print "* From: %(from)s\n* For: %(to)s\n* Text: %(subject)s\n" % msg
Ни один из найденых на форуме путей решения проблемы не помогает:((
(хотя вероятно это у меня руки кривоваты)

Заранее СПАСИБО!



Офлайн

#2 Окт. 17, 2011 02:28:43

pyuser
От:
Зарегистрирован: 2007-05-13
Сообщения: 658
Репутация: +  36  -
Профиль   Отправить e-mail  

Проблема с кодировками принятой почты(poplib)

notfedor
Ни один из найденых на форуме путей решения проблемы не помогает
Скорее всего, Вы просто не пробовали
from email.Header import decode_header

def _decode_header(msg):
header = {"from": None, "to": None, "subject": None}
for h in header:
txt, enc = decode_header(msg[h])[0]
header[h] = txt.decode(enc) if enc else txt
return header
...
msg = email.message_from_string(msgtxt)
# print "* From: %(from)s\n* For: %(to)s\n* Text: %(subject)s\n" % msg
print "* From: %(from)s\n* For: %(to)s\n* Text: %(subject)s\n" % _decode_header(msg)



Офлайн

#3 Окт. 17, 2011 03:41:49

notfedor
От:
Зарегистрирован: 2011-10-17
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблема с кодировками принятой почты(poplib)

Спасибо Вам огромное!
Все работает, правда не совсем понятно как работает функция(вплане что именно она делает)
в частности:
1)if enc else txt #что происходит.))
2)зачем _ перед именем функции?
Спасибо.



Офлайн

#4 Окт. 17, 2011 05:19:50

pyuser
От:
Зарегистрирован: 2007-05-13
Сообщения: 658
Репутация: +  36  -
Профиль   Отправить e-mail  

Проблема с кодировками принятой почты(poplib)

notfedor
1)if enc else txt #что происходит.))
это более короткая форма записи чем
if enc:
header[h] = txt.decode(enc)
else:
header[h] = txt
notfedor
зачем _ перед именем функции?
Чтобы не вводить Python в заблуждение :) Имя decode_header уже используется поэтому и подчеркивание перед именем функции



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version