| ASP, PERL, CGI, C und alles andere Wolle ma net so sein. Obwohl Perl, ASP, C und TCL zu den minderwertigen Internet-Skriptsprachen zählen, dürfen ab sofort hierzu auch Fragen gestellt werden. ;) |
 |

04-04-2011, 15:21
|
|
Tartax
PHP Senior
|
|
Registriert seit: Oct 2002
Ort: BRD
Beiträge: 1.167
|
|
[python] IMAP, Gmail und encoding
Hey,
nach ca. vier Jahren ohne Post, jetzt mal wieder ich... und dann nicht mal PHP
Ich versuch email (betreffe) per imap von gmail abzurufen, hab aber probleme. obwohl ich ca. 200 code varianten ausprobiert habe die man so über google findet.
wenn die email non-ascii zeichen enthällt bekomme ich:
Code:
Subject: Beste =?ISO-8859-15?Q?Gr=FC=DFe?=
statt:
Code:
Subject: Beste Grüße
Der Code ist:
Code:
#!/usr/bin/python
import email, getpass, imaplib, os,re
m = imaplib.IMAP4_SSL("imap.googlemail.com",993)
m.login(user,pwd)
m.select("INBOX")
resp, data = m.search(None, "FLAGGED")
keys = data[0].split()
for num in keys:
raw = m.fetch(num, '(BODY.PEEK[HEADER.FIELDS (SUBJECT)])')[1][0][1]
subj = email.Header.decode_header(raw)
subject = u"".join([unicode(text, charset or "utf-8") for text, charset in subj])
print subject
Any hints would be much appreciated
__________________
Die Musikreview Seite
hi, i'm a signature virus. copy me into your signature to help me spread.
|

04-04-2011, 15:37
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
Hallo,
so werden Sonderzeichen in Kopfzeilen codiert, es ist also nichts falsch daran, dass du sowas bekommst.
MIME - Wikipedia, the free encyclopedia
Gruß,
Amica
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt? 
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke! 
|

04-04-2011, 16:12
|
|
Tartax
PHP Senior
|
|
Registriert seit: Oct 2002
Ort: BRD
Beiträge: 1.167
|
|
Hey, danke für deine Antwort.
Ja das weiß ich, aber sollte:
Code:
email.Header.decode_header
sich nicht darum kümmern?
__________________
Die Musikreview Seite
hi, i'm a signature virus. copy me into your signature to help me spread.
|

04-04-2011, 16:25
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
Achso, sorry, hab mir deinen Code mangels Python-Kenntnissen nicht angesehen. Auf den ersten Blick sollte es das tun, da geb ich dir recht, aber was der Code jetzt genau macht, bleibt mir als Nicht-Python verborgen.
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt? 
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke! 
|

05-04-2011, 13:03
|
 |
fireweasel
Registrierter Benutzer
|
|
Registriert seit: Sep 2008
Ort: At home
Beiträge: 679
|
|
Zitat:
Zitat von Tartax
... sollte:
Code:
email.Header.decode_header
sich nicht darum kümmern?
|
Im Prinzip ja. Daher würde ich mal vermuten, dass der Fehler im übergebenen Header-String liegt. Lass dir doch mal probeweise den Wert von raw vor dem Aufruf von .decode_header() und danach die beiden Rückgabewerte anzeigen.
__________________
PHP-Code:
class Brick implements Throwable {
// ...
}
Geändert von fireweasel (05-04-2011 um 13:07 Uhr)
|

05-04-2011, 15:49
|
|
Tartax
PHP Senior
|
|
Registriert seit: Oct 2002
Ort: BRD
Beiträge: 1.167
|
|
Jup, gerade gemacht, raw scheint in ordnung zu sein, aber mir ist aufgefallen dass es bei utf-8 klappt. iso-8859 schient das problem zu sein:
erst mail (iso):
Code:
raw: Subject: Fwd: Beste =?ISO-8859-15?Q?Gr=FC=DFe?=
subj: [('Subject: Fwd: Beste =?ISO-8859-15?Q?Gr=FC=DFe?=\r\n\r\n', None)]
output: Subject: Fwd: Beste =?ISO-8859-15?Q?Gr=FC=DFe?=
zweite email(utf):
Code:
raw: Subject: =?UTF-8?B?0JLQuNC60YLQvtGAINCS0L7RgNC+0LHRh9GD0Lo=?=
=?UTF-8?B?IHBvc3RlZCBvbiB5b3Vy?= =?UTF-8?B?IFdhbGwu?=
subj: [('Subject:', None), ('\xd0\x92\xd0\xb8\xd0\xba\xd1\x82\xd0\xbe\xd1\x80 \xd0\x92\xd0\xbe\xd1\x80\xd0\xbe\xd0\xb1\xd1\x87\xd1\x83\xd0\xba posted on your Wall.', 'utf-8'), ('', None)]
output: Subject:Виктор Воробчук posted on your Wall.
__________________
Die Musikreview Seite
hi, i'm a signature virus. copy me into your signature to help me spread.
|

08-04-2011, 14:24
|
 |
fireweasel
Registrierter Benutzer
|
|
Registriert seit: Sep 2008
Ort: At home
Beiträge: 679
|
|
Zitat:
Zitat von Tartax
Jup, gerade gemacht, raw scheint in ordnung zu sein, aber mir ist aufgefallen dass es bei utf-8 klappt. iso-8859 schient das problem zu sein:
erst mail (iso):
Code:
raw: Subject: Fwd: Beste =?ISO-8859-15?Q?Gr=FC=DFe?=
subj: [('Subject: Fwd: Beste =?ISO-8859-15?Q?Gr=FC=DFe?=\r\n\r\n', None)]
output: Subject: Fwd: Beste =?ISO-8859-15?Q?Gr=FC=DFe?=
zweite email(utf):
Code:
raw: Subject: =?UTF-8?B?0JLQuNC60YLQvtGAINCS0L7RgNC+0LHRh9GD0Lo=?=
=?UTF-8?B?IHBvc3RlZCBvbiB5b3Vy?= =?UTF-8?B?IFdhbGwu?=
subj: [('Subject:', None), ('\xd0\x92\xd0\xb8\xd0\xba\xd1\x82\xd0\xbe\xd1\x80 \xd0\x92\xd0\xbe\xd1\x80\xd0\xbe\xd0\xb1\xd1\x87\xd1\x83\xd0\xba posted on your Wall.', 'utf-8'), ('', None)]
output: Subject:Виктор Воробчук posted on your Wall.
|
Mhmmm, das ist merkwürdig. Die Zeichensatz-Kodierung (ISO-Latin, UTF-8) sollte keine Rolle spielen, sie wird nur als Klartext zurückgeliefert. Wenn der Ausgangsstring zurückgeliefert wird, hat .decode_header() die Quoted-Printable-Kodierung nicht erkannt. Der dazu (in email/mail.py) benutzte RegEx lautet:
Code:
ecre = re.compile(r'''
=\? # literal =?
(?P<charset>[^?]*?) # non-greedy up to the next ? is the charset
\? # literal ?
(?P<encoding>[qb]) # either a "q" or a "b", case insensitive
\? # literal ?
(?P<encoded>.*?) # non-greedy up to the next ?= is the encoded string
\?= # literal ?=
(?=[ \t]|$) # whitespace or the end of the string
''', re.VERBOSE | re.IGNORECASE | re.MULTILINE)
Ich sehe nicht, wo der auf deinen Header nicht passen sollte.
Wenn man ein wenig herumgoogelt, findet man zu .header_decode() lediglich "Bugs", die mit (nichtvorhandenen) Leerzeichen am Ende eines kodierten Teilstücks zu tun haben. Du könntest versuchsweise ein Leerzeichen vor den Zeilenumbruch einfügen, um zu sehen, ob das Zeilenende nicht richtig erkannt wird. Aber $ und MULTILINE (entspricht /m in PCRE) sollten eigentlich zusammenpassen.
__________________
PHP-Code:
class Brick implements Throwable {
// ...
}
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|