Форум сайта python.su
Есть email-сообщение.
Работаю с ним следующим образом: (пусть сообщение сохранено в файл “message.eml”)
import email
fp = file("message.eml", "rb")
msg = email.message_from_file(fp)
fp.close()
print msg["Subject"]
=?koi8-r?Q?=F0=CF=C4=D4=D7=C5=D2=D6=C4=C5=CE=C9=C5=20?==?koi8-r?Q?=CF=20?==?koi8-r?Q?=D0=CF=CC=D5=DE=C5=CE=C9=C9=20?==?koi8-r?Q?=DA=C1=CD=C5=DD=C1=C0=DD=C5=CA=20?==?koi8-r?Q?=C9=CE=C6=CF=D2=CD=C1=C3=C9=C9?=
txt, enc = email.Header.decode_header(msg["Subject"])[0]
txt ,как в прочем и txt.encode(enc)
Отредактировано (Ноя. 14, 2007 08:54:57)
Офлайн
Попробуйте:
# -*- coding: cp1251 -*-
import email
from email.Header import make_header as mkh
from email.Header import decode_header as dkh
msg_file = ‘c:/msg.eml’
def print_mail():
msg = email.message_from_file(file(msg_file))
msg_from = msg
msg_to = msg
msg_date = msg
msg_subj = ''.join([text for text,enc in dkh(msg)])
print ‘От: ’+msg_from+'\nКому: ‘+msg_to+ \
’\nКогда: ‘+msg_date+’\nТема: '+msg_subj
return
print_mail()
Офлайн
Подскажите, как прочитать txt?txt закодирован, понятно, koi8-r. Текст легко декодируется в unicode:
utxt = txt.decode(enc)
Офлайн
proDivaНе красиво же. Сравни с:
Попробуйте:
print ‘От: ’+msg_from+'\nКому: ‘+msg_to+ \
’\nКогда: ‘+msg_date+’\nТема: '+msg_subj
Офлайн
j2a
абсолютно согласна….. ваш способ красивее
Офлайн
proDiva
j2a
Спасибо.
Оказывается все дело в правильном выборе ПО для работы.
со строкой txt.encode(enc) я конечно погорячился (какие только комбинации из unicode(), encode() и decode() я не выписывал), а в остальном пример изначально был рабочим
proDiva
Ну и чтобы было совсем красиво, сроку, в Вашем примере
msg_subj = “”.join([text for text, enc in dkh(msg)])
заменил на
msg_subj = “”.join([enc and text.decode(enc) or text for text, enc in dkh(msg)])
P.S. в данном, конкретном случае перед парсингом заголовков письма целесообразно избавиться от вставок ?==?koi8-r?Q?
Отредактировано (Ноя. 15, 2007 03:01:39)
Офлайн