Portál AbcLinuxu, 10. května 2025 19:21
Možná by pomohlo vzít zprávu:
$ cat utf-8.eml Subject: predmet Content-Transfer-Encoding: base64 Content-Type: text/plain; charset=UTF-8 dGV4dCB6cHLDoXZ5IHYgxI1lxaF0aW7Emwo=
a převést na XML:
$ cat utf-8.eml | mime2xml <?xml version="1.0" encoding="UTF-8"?> <mime-message> <headers> <subject>predmet</subject> <content-transfer-encoding>base64</content-transfer-encoding> <content-type>text/plain</content-type> </headers> <body content-type="text/plain" length="26"><![CDATA[text zprávy v češtině ]]></body> </mime-message>
Ale je to ještě hodně čerstvé – dosud nevydaná verze relpipe-in-mimetable.
A pak to nasypat ideálně do nějaké XML databáze (eXist, BaseX, případně PostgreSQL s indexovaným XML sloupcem), která to zaindexuje a umožní v tom efektivně vyhledávat. V horším případě to nechat v souborech a prohledávat ty (nad tím jde psát XPath dotazy, akorát jak to nebude indexované, tak se budou muset vždy projet všechny soubory).
V XSLT se pak dá snadno napsat šablona, která naformátuje e-maily pro tisk.
Nicméně problém vidím v té (ne)struktuře těch zpráv a v tom, jak se k tomu e-mailu lidi chovají – většina BFU bohužel odpovídá nad původní zprávu, kterou tam nechávají celou. Tudíž jak ta citace, tak ta nová zpráva je v téže MIME části a neexistuje spolehlivý způsob, jak je od sebe oddělit – jen více či méně chybové heuristiky. Tohle by si člověk musel napsat sám (nebo na to možná existuje nějaká knihovna) a vložit to za ten převod do XML a aplikovat na elementy body/part
.
text 1 text 2 + 1 text 3 + (2 + 1) text 4 + (3 + (2 + 1)) atd.Ty by pak melo jit rozfiltrovat na jednotlive inkrementy (tedy jednotlive prispevky v konverzaci) pomoci diff, comm, difflib nebo podobne. Tim padem bych nemusel resit parsovani tech retezu. Momentalne budu premyslet jakym algoritmem ziskat ty inkrementy.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.