[python] Parsování emailu
Jakub Vojáček
jakohv na seznam.cz
Čtvrtek Duben 17 17:37:31 CEST 2008
Ano, už to částečně funguje. Manuál jsem četl a dokonce jsem zkoušel použít
funkci get_payload(), ale fakt mě nenapadlo, že to musím zavolat dvakrát...
Nicméně to funguje, nevím proč, pouze na některé emaily; zde je můj kód:
import re
from email.parser import*
m1="""('+OK Message follows (1562 bytes).', ['Reply-To:
=?iso-8859-2?Q?Jakub=20Voj=E1=E8ek?= <jakohv na seznam.cz>', 'Received: from
kubuvpocitac (r3ai164.net.upc.cz [213.220.226.164])', '\tby
email-relay2.go.seznam.cz (Seznam SMTPD 1.0.36 na 12969) with ESMTP;', '\tWed,
16 Apr 2008 18:46:52 +0200 (CEST) ', 'Message-Id:
<004f01c89fe1$7b567220$6e7ba8c0 na kubuvpocitac>', 'From:
=?iso-8859-2?Q?Jakub=20Voj=E1=E8ek?= <jakohv na seznam.cz>', 'To:
jakohv na seznam.cz', 'Subject: predemr', 'Date: Wed, 16 Apr 2008 18:46:52
+0200 (CEST)', 'Mime-Version: 1.0', 'Content-Type: multipart/alternative;',
'\tboundary="----=_NextPart_000_004A_01C89FF2.3C51E080"', '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 na 12969', 'X-Seznam-User: jakohv na seznam.cz', 'X-Qm-Mark:
email-qm1<17546722>', 'X-Seznam-Ffp: 680759260', '', 'This is a multi-part
message in MIME format.', '', '------=_NextPart_000_004A_01C89FF2.3C51E080',
'Content-Type: text/plain;', '\tcharset="iso-8859-2"',
'Content-Transfer-Encoding: quoted-printable', '', 'hhahsd',
'------=_NextPart_000_004A_01C89FF2.3C51E080', '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=3D"text/html; =',
'charset=3Diso-8859-2">', '<META content=3D"MSHTML 6.00.2900.3314"
name=3DGENERATOR>', '<STYLE></STYLE>', '</HEAD>', '<BODY
bgColor=3D#ffffff>', '<DIV><FONT face=3DArial
size=3D2>hhahsd</FONT></DIV></BODY></HTML>', '',
'------=_NextPart_000_004A_01C89FF2.3C51E080--'], 1562)"""
m2="""('+OK Message follows (1601 bytes).', ['Reply-To:
=?iso-8859-2?Q?Jakub=20Voj=E1=E8ek?= <jakohv na seznam.cz>', 'Received: from
kubuvpocitac (r3ai164.net.upc.cz [213.220.226.164])', '\tby
email-relay2.go.seznam.cz (Seznam SMTPD 1.0.36 na 12969) with ESMTP;', '\tThu,
17 Apr 2008 17:10:38 +0200 (CEST) ', 'Message-Id:
<00ba01c8a09d$320e0b70$6e7ba8c0 na kubuvpocitac>', 'From:
=?iso-8859-2?Q?Jakub=20Voj=E1=E8ek?= <jakohv na seznam.cz>', 'To:
jakohv na 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 na 12969', 'X-Seznam-User: jakohv na 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" <jkt na gentoo.org>
To: "Konference PyCZ" <python na py.cz>
Sent: Thursday, April 17, 2008 4:47 PM
Subject: Re: [python] Parsování emailu
Jakub Vojáček wrote:
> Jenomže to stejně nevrací tělo zprávy...
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
Další informace o konferenci Python