http://docs.python.org/lib/module-email.parser.html
>>> Parser().parsestr(r).keys()
['Reply-To', 'Received', 'X-Spam-Checker-Version', 'X-Spam-Status',
'Received', 'Received', 'Received', 'Message-Id', 'From', 'To', 'Subject',
'Date', 'Mime-Version', 'Content-Type', 'X-Priority', 'X-Msmail-Priority',
'X-Mailer', 'X-Mimeole', 'X-Smtpd', 'X-Seznam-User', 'X-Smtpd',
'X-Nod32result', 'X-Seznam-Ffp']
http://docs.python.org/lib/module-email.parser.html
_______________________________________________
Python mailing list
Pyt...@py.cz
http://www.py.cz/mailman/listinfo/python
Je dobre si prostudovat dokumentaci celeho modulu. Kdybys cetl [1],
dozvedel by ses, ze email.message.Message ma dve dulezite casti,
"headers" a "payload". Vic ti nereknu, myslim, ze na to uz umis prijit sam.
Pokud to s tim psanim mailoveho klienta myslis vazne, mel by sis precist
vic manualu.
[1] http://docs.python.org/lib/module-email.message.html
Hezky den,
-jkt
import re
from email.parser import*
m1="""('+OK Message follows (1562 bytes).', ['Reply-To:
m2="""('+OK Message follows (1601 bytes).', ['Reply-To:
=?iso-8859-2?Q?Jakub=20Voj=E1=E8ek?= <jak...@seznam.cz>', 'Received: from
kubuvpocitac (r3ai164.net.upc.cz [213.220.226.164])', '\tby
email-relay2.go.seznam.cz (Seznam SMTPD 1.0.36@12969) with ESMTP;', '\tThu,
17 Apr 2008 17:10:38 +0200 (CEST) ', 'Message-Id:
<00ba01c8a09d$320e0b70$6e7ba8c0@kubuvpocitac>', 'From:
=?iso-8859-2?Q?Jakub=20Voj=E1=E8ek?= <jak...@seznam.cz>', 'To:
jak...@seznam.cz', 'Subject: predemr', 'Date: Thu, 17 Apr 2008 17:10:36
+0200 (CEST)', 'Mime-Version: 1.0', 'Content-Type: multipart/alternative;',
'\tboundary="----=_NextPart_000_00B7_01C8A0AD.F44443C0"', 'X-Priority: 3',
'X-Msmail-Priority: Normal', 'X-Mailer: Microsoft Outlook Express
6.00.2900.3138', 'X-Mimeole: Produced By Microsoft MimeOLE V6.00.2900.3198',
'X-Smtpd: 1.0.36@12969', 'X-Seznam-User: jak...@seznam.cz', 'X-Qm-Mark:
email-qm1<17566836>', 'X-Seznam-Ffp: -1361842557', '', 'This is a multi-part
message in MIME format.', '', '------=_NextPart_000_00B7_01C8A0AD.F44443C0',
'Content-Type: text/plain;', '\tcharset="iso-8859-2"',
'Content-Transfer-Encoding: quoted-printable', '', "'sdfdf','sdf'",
'------=_NextPart_000_00B7_01C8A0AD. F44443C0', 'Content-Type: text/html;',
'\tcharset="iso-8859-2"', 'Content-Transfer-Encoding: quoted-printable', '',
'<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">',
'<HTML><HEAD>', '<META http-equiv=3DContent-Type content=3 D"text/html; =',
'charset=3Diso-8859-2">', '<META content=3D"MSHTML 6.00.2900.33 14"
name=3DGENERATOR>', '<STYLE></STYLE>', '</HEAD>', '<BODY bgColor=3D#ffffff>'
, '<DIV><FONT face=3DArial =',
"size=3D2>'sdfdf','sdf'</FONT></DIV></BODY></HTML >", '',
'------=_NextPart_000_00B7_01C8A0AD.F44443C0--'], 1601)"""
m1=re.search(r"[\w]*\['(?P<x>[\w\W]*)'\]", m1).group("x").replace("',
'","\n")
m2=re.search(r"[\w]*\['(?P<x>[\w\W]*)'\]", m2).group("x").replace("',
'","\n")
print Parser().parsestr(m1).get_payload()[0].get_payload()
print Parser().parsestr(m2).get_payload()[0].get_payload()
#První email to rozparsuje dobře, ale ten druhý už ne...
#Děkuji za trpělivost; pomalu mi to myslí:(
----- Original Message -----
From: "Jan Kundrát" <j...@gentoo.org>
To: "Konference PyCZ" <pyt...@py.cz>
Sent: Thursday, April 17, 2008 4:47 PM
Subject: Re: [python] Parsování emailu
Tohle muze fungovat na jednoduche text/plain maily, ktere jeste navic
nebyly zakodovane necim jako base64. Pokud je cilem mailovy klient,
ktery umi precist i napriklad zpravu, ke ktere je prilozeny obrazek, a
nebo neco podobneho tomu, cos prave ted poslal ty, opravdu potrebujes
korektne pracovat s MIME formatovanim, jako to dela napriklad modul email.
Schvalne se zkus podivat na "zdrojovy kod" zpravy, kterous napsal,
nerekl bych, ze ji dokazes ocima precist...
Hezky den,
-jkt
Tohle muze fungovat na jednoduche text/plain maily, ktere jeste navic
nebyly zakodovane necim jako base64. Pokud je cilem mailovy klient,
ktery umi precist i napriklad zpravu, ke ktere je prilozeny obrazek, a
nebo neco podobneho tomu, cos prave ted poslal ty, opravdu potrebujes
korektne pracovat s MIME formatovanim, jako to dela napriklad modul email.
Schvalne se zkus podivat na "zdrojovy kod" zpravy, kterous napsal,
nerekl bych, ze ji dokazes ocima precist...
Osobne bych zavedl jeste dotaz pro vyzvednutí pouze hlavicek a body
vyzvednout samostatne pro kazdý mail. Stránkování lze resit na strane SQL
serveru, byt ne vzdy zcela snadno (treba MSSQL - tam je to opruz).
A samozrejme nastavit vhodne indexy nad sloupcema. Ale pokud
----- Original Message -----
From: Jakub Vojácek
Opet se na vás obracím s nekterými mými problémy. Tentokrát se jedná o
takovou spíse teoretickou otázku. Jiz mám naprogramovaného "relativne"
fungujícího postovního klienta (prijímání, psaní mailu, pravidla pro zprávy,
skupiny, kontakty, rss ctecka apod...). Pokud pracuji s databází, která
obsahuje 100 e-mailu, zádný problém nenastane, ale jelikoz e-maily nemazu,
tak je pocet e-mailu o neco vyssí (pres 4000). A v tom je práve ten problém.
Pokud mám napríklad slozku, ve které je 500 e-mailu, tak se nacítá asi 5
sekund. V jiných aplikacích (Outlook Express je tato doba 10 kratsí). A moje
otázka je: Jak by se tato doba dala zkrátit?
.....
Aby nacítání trvalo alespon o trochu méne, rozhodl jsem zavést stránkování
(na jedné strane pouze 100 mailu), ale moc jsem si nepomohl, protze stejne
musím procházet vsemi e-maily a zobrazovat pouze ty z daného rozsahu. Ve
funkci pridej_zaznam jeste musím získat odesílatele, predmet a cas prijetí,
coz zabere taky relativne dost casu.
Za vyzkouseni by stalo pouziti sqlite3. V pythonu 2.5 je jako modul,
do starsich se da doinstalovat.
Jirka Vejrazka
Děkuji, je to o moc lepší. Nyní to zobrazí 2500 zpráv za 3 sekundy...
Blujacker