niedawno zaczolem zaznajamiac sie z pythonem,
postanowilem zrobic wlasny progrma pobierajacy poczte e-mail
udalo mi sie sciagnac, wyswietlic podstawowe parametry
jak data dostarczenia, od kogo do kogo etc.
zatrzymalem sie na decodowaniu wiadomosci, decoduje ja np za pomoca
base64
w wyniku dostaje prawie juz dobry tekst wiadomosci jednak nie
otrzymuje polskich
znakow, zamiast nich mam "?" z otoczka,
jakies sugestie jak rozwiazac ten pewnie drobny problem
pozdrawiam
p.s.
I robisz to ręcznie, bez użycia żadnej gotowej biblioteki?
Pozdrawiam,
Adam
--
Adam Byrtek
korzystam z poplib do polaczenia sie z serverem
i z base64 do dekodowania
Skorzystaj jeszcze z modułu `email`. Idzie to mniej
więcej tak:
<code>
import poplib
import email
pop3 = poplib.POP3('host')
pop3.user('user')
pop3.pass_('password')
msgcount = pop3.stat()[0]
for msgnr in range(1, msgcount + 1):
msgcontent = '\r\n'.join(pop3.retr(msgnr)[1])
msg = email.message_from_string(msgcontent)
charset = msg.get_content_charset() or 'iso-8859-2'
print '%d: %s %s (%s)' % (msgnr, msg['from'], msg['subject'], charset)
print "==========tresc========="
for part in msg.walk():
if part.get_content_maintype() == 'text':
print part.get_payload().decode(charset)
pop3.quit()
</code>
RW
dzieki nastepnym razem skorzystam,
ale mimo tego chcialbym poznac sposob
jak otrzymac polskie litery
dodatkowo moge powiedziec ze po zapisaniu odkodowanej wiadomosci e-
mail
do pliku i odpalenia go recznie w konsoli mam polskie litery, ale w
pythonie
caly czas brakuje mi polskich liter,
czyli zakladam ze chodzi tu tylko o
kodowanie w odpowiednim standardzie iso.. lub utf-8 tylko nie wiem
gdzie i jak to zmienic (nie dziala: zmienna.encode('utf-8') ani inne
standardy)
pozdrawiam
p.s.
Procedura jest następująca:
1. bierzesz ciąg znaków
>>> s = 'ąćę'
>>> s
'\xb1\xe6\xea'
2. sprawdzasz czy nie unikod
>>> type(s)
<type 'str'>
3. nie unikod, to dekodujesz do unikodu używajac kodowania,
jakie było użyte przy pisaniu maila (to *musisz* wiedzieć)
>>> u = s.decode('iso-8859-2')
>>> type(u)
<type 'unicode'>
4. unikod, kodujesz do stringa używając kodowania *terminala*
>>> print u.encode('utf-8')
ąćę
RW