message/partial mailovi
(1 korsinik/a gleda/ju temu) (1) Gost

message/partial mailovi


21.04.2020 | 00:30
Elem, #$%"#&, uredski printer/scanner/kopirka, Konica Minolta Bizhub C224e se pravi pametna.

Uređaj ima +/- iste funkcije kao i onaj kojeg smo imali prije, od Canona. Konica je puno kvalitetniji i brži uređaj, u hardverskom smislu (mlađi je, to sigurno ima veze), ali autore softvera (osobito autora GUI-ja, i onog web-baziranog, i onog na touch-panelu) bi kaznio s 250 godina korištenja tog softvera.

Između ostalog, da sad ne duljim, zbog tako kardinalno us*anog GUIja, mogućnost skeniranja većeg broja stranica odjednom uz pohranu na stick ili u korisnički pretinac na disku uređaja (pa povlačenje k sebi putem browsera) uopće nije opcija korisniku koji nije iznimno informatički iskusan. Tako da takvom korisniku ostaje opcija da mu stroj skenirano pošalje E-mailom, što je jedino relativno jednostavno.

Međutim, ako veličina dokumenta premaši nešto što može proći u jednom mailu, skener to nareže na komade i šalje u više mailova. Onaj prethodni, Canon, radio je to vrlo jednostavno - poslao bi više mailova, u svakom mailu PDF s određenim brojem stranica pa, ako ti je bitno, ti poslije te PDFove spajaj na kompjuteru (što je na Macu vrlo jednostavno - drag & drop operacija u Previewu).

Nažalost, Konica Minolta i tu komplicira pakleno. Pošalje više mailova koji imaju Content-Type "message/partial". Koliko vidim, to je sve uredno, po RFC-u. Dakle, neki client koji to podržava bi uredno trebao skužiti da je to jedan mail izrezan u više komada i na kraju ga u korisnikovom inboxu spojiti skupa i prikazati kao jedan mail s ogromnim attachmentom.

Mail.app očito nije taj. No, koliko vidim googlanjem, uglavnom nije nijedan od meni poznatih mail clienta, bilo za macOS, bilo za windows...

Pitanje glasi, je li se slučajno netko već susreo s ovim problemom, postoji li the-mac-way rješenje? Nešto putem Apple script, bilo da ga se ručno pokreće, bilo da se pokreće sam kad naleti na takav mail?

Relevantni headeri maila izgledaju ovako:

X-Mailer: KONICA MINOLTA bizhub C224e
Message-Id: <5E9DF2C2.0EF.00206BA9672D.ime.prezime@nesto.hr>
MIME-Version: 1.0
Content-Type: message/partial; number=1; total=2;
        id="<5E9DF2C1.0EE.00206BA9672D.ime.prezime@nesto.hr>"
Content-Transfer-Encoding: 7bit

X-Mailer: KONICA MINOLTA bizhub C224e
Message-Id: <5E9DF2C1.0EE.00206BA9672D.ime.prezime@nesto.hr>
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="KONICA_MINOLTA_Internet_Fax_Boundary"
Content-Transfer-Encoding: 7bit

--KONICA_MINOLTA_Internet_Fax_Boundary
Content-Type: application/pdf; 
 name="SKM_C224e20042019050.pdf"
Content-Disposition: attachment; 
 filename="SKM_C224e20042019050.pdf"
Content-Transfer-Encoding: BASE64


nakon toga do kraja prvog maila slijedi base64 kodiran sadržaj koji završava naprasno, na kraju retka, bez odjavnog bloka

u idućem mailu (koji je u ovom slučaju i zadnji) relevantni headeri su

X-Mailer: KONICA MINOLTA bizhub C224e
Message-Id: <5E9DF2D8.0F0.00206BA9672D.ime.prezime@nesto.hr>
MIME-Version: 1.0
Content-Type: message/partial; number=2; total=2;
        id="<5E9DF2C1.0EE.00206BA9672D.ime.prezime@nesto.hr>"
Content-Transfer-Encoding: 7bit


nakon čega slijede base64 podaci bez uvodnog bloka, sve do kraja, i na samom kraju, zaključni blok


--KONICA_MINOLTA_Internet_Fax_Boundary--
21.04.2020 | 00:57
Dakle, skripta bi trebala (ako je moguće) reagirati na Content-Type "message/partial" iza čega slijedi podatak koji je to po redu dio, od ukupno koliko dijelova, a svi dijele isti ID (u ovom slučaju je to 5E9DF2C1.0EE.00206BA9672D.email.aderesa.posiljatelja).

U prvom (i samo u prvom) dijelu se može očitati ostale podatke:

- da je sadržaj na početku i na kraju omeđen markerom "--KONICA_MINOLTA_Internet_Fax_Boundary--"

- da je tipa (Content-Type) application/pdf i kojeg je imena datoteka

- da je sadržaj base64 kodiran

U svakom od mailova, prvi prazni redak nakon početka označava da slijedi sadržaj, koji se može protezati kroz više mailova, sve dok se ne naiđe na spomenuti marker.

Ručno, svaki od mailova se može snimiti na disk (File | Save as, Format: Raw Message Source), i onda svaki od tih mailova otvoriti BBEditom ili nečim sličnim, izbrisati headere na početku svakog od mailova, sadržaj pospajati skupa u jedan file i onda taj file base 64 dekodirati, na primjer u terminalu:

openssl base64 -d -in ulaznadatoteka.eml -out izlaznadatoteka.pdf


Još bolje, dalo bi se na disk snimljene raw mailove (.eml format) pospajati jednom terminal komandom

cat prvidio.eml drugidio.eml trecidio.eml itd.eml > sveskupa.eml


pa prije ili nakon cat-anja grep-nuti van sve headere i ostaviti samo base64 sadržaj

onda bi se dalo to sve složiti u pipe, tako da se jednom terminal komandom odradi sve to skupa (grep, cat, openssl base64) i dobije gotov PDF.

Ono što bi ja volio je - da to bude "mac way" rješenje za nenaprednog korisnika. U najgorem slučaju, da u Mail.app (ili Thunderbirdu, ako Mail.app ne može to) selektira sve pristigle mailove s komadima skeniranog dokumenta i onda uklika nešto da se pokrene skripta i nakon toga nađe kompletan skenirani PDF npr. u Downloads folderu. Idealno, da ne mora ni to, nego da inbox filter skuži da je stigao prvi takav mail, da pričeka i pokupi ostale i sve dalje odradi sam.

Može li se to, Lastane?
21.04.2020 | 10:53
Možda ovo može pomoći za prvu ruku:

addons.thunderbird.net/en-US/thunderbird/addon/join-ng/

?
21.04.2020 | 11:01
Našao sam to i ja. Veli: "This add-on has been marked as experimental by its developers"
Kolegica čiji stroj radi na 10.11 ima Thunderbird, probao sam, fakat je "experimental"
Ne radi stabilno, nažalost. A i nije baš da se netko tko nije informatički napredan lako snalazi.
A i problem je to što je zadnja verzija i zadnja zabilješka iz 2016. godine.
21.04.2020 | 17:38
Spominješ Thunderbird i Apple Mail kao moguća okruženja - Apple Mail rješenje je (iz Mac perspektive) jednostavnije jer Apple Mail omogućava pokretanje željenog Apple Scripta za svaki primljeni mail. Thunderbird ne podržava Apple Script, a ni njegov CLI nije od pomoći za ovaj slučaj što znači da bi trebao pokretati skriptu preko nekog postojećeg Thunderbird plugina ili riješiti cijeli svoj problem kroz custom Thunderbird plugin.

Bez obzira kojim putem kreneš, ako ciljaš "stabilno" rješenje za nenaprednog korisnika, zapravo ti treba nekakav queue manager koji rješava problem dijelova mailova koji ne dolaze nužno u inbox slijedom koji ti je potreban: možda treći dio stigne prije drugog, možda zadnji dio, s oznakom kraja, dođe prije prethodnih... možda neki dio ne dođe nikad... nastavi niz.

S obzirom da Apple Script podržava SQLite, to mi se čini najpraktičnije rješenje za u njemu trackati što se zbiva u maileru. Primjerice (pseudo):

za svaki prispjeli mail
  provjeri da li je relevantan (šalje ga Konica)
  ako je
    očitaj mail_id, id, number, part, filename i content
    // mail_id identificira prispjeli mail u Apple Mailu
    // id je identifikator tipa <5E9DF2C1.0EE.00206BA9672D.ime.prezime@nesto.hr>
    dodaj unique record s tim očitanjima u bazu
    // unique je za slučaj da stigne duplić u Mail
    pitaj bazu ima li zapisane sve potrebne dijelove (njih "number") za aktualni "id"
    ako ima
      pitaj bazu spojeni content svih mailova (sortiran uzlazno, prema "part")
      snimi rezultat u temp datoteku
      dekodiraj temp datoteku koristeći poznati "filename" i snimi u predviđeni folder
      obriši temp datoteku
      obriši sve recorde s aktualnim idom u bazi
      ako držiš mailove u maileru dok svi ne stignu i želiš ih tek tada obrisati
        pitaj bazu listu mail_idova prema mail_idu aktualnog maila
        obriši mailove s mail_idovima koje ti je vratila baza
    ako prebacuješ obrađeni mail u arhivu ili ga brišeš odmah po obradi
      prebaci aktualni mail u arhivu ili ga obriši
21.04.2020 | 19:10
Hvala ti na javljanju, Đipi. Znao sam da moram postati u forum "Programiranje", ako želim da mi se javiš.
Dakle, u Mail.app, u preferences, odem na rules i tamo stavim najprije "Edit header list" pa dodam headere koji me zanimaju (X-Mailer i Content-Type, na primjer), onda napravim novo pravilo na inboxu koje kaže, ako je X-Mailer KONICA MINOLTA i Content-Type message/partial, pozovi Apple Script taj-i-taj

Da? Ne?

Onda, dalje... SQLite je nešto što moram instalirati, zar ne? Na SQLite downloads page ima samo jedan link za Mac, kaže ovako:

A bundle of command-line tools for managing SQLite database files, including the command-line shell program, the sqldiff program, and the sqlite3_analyzer program.

To mi ne zvuči kao to što mi treba? Je li to to što mi treba?

Onda, ako je to - to, kako dalje? Kako koristim SQLite iz AppleScripta? Instalira se podrška za SQL u AppleScriptu?

Ako sam te dobro shvatio, SQLite mi samo služi da bi provjerio imam li sve dijelove u inboxu i koji im je redoslijed? A kad to utvrdim iz SQLite samo uzmem listu message-IDova i po njoj pomoću AppleScripta povučem mailove iz Mail.app van? Kamo? Na disk, pa dalje shell skriptom grep i base64 decode?

1000 zašto - 1000 zato...
21.04.2020 | 20:14
Dakle, u Mail.app, u preferences, odem na rules i tamo stavim najprije "Edit header list" pa dodam headere koji me zanimaju (X-Mailer i Content-Type, na primjer), onda napravim novo pravilo na inboxu koje kaže, ako je X-Mailer KONICA MINOLTA i Content-Type message/partial, pozovi Apple Script taj-i-taj


Nisam korisnik Apple Maila pa ne znam iz prve ruke možeš li kreirati takav filter (X-Mailer i Content-Type). Ako Konica ima neko upotrebljivo From polje, ja bih jednostavno filtrirao po njemu. U paketu s filterom (koji samo nacilja mail kojeg želiš obratiti) ide i postavljanje opcije "Run AppleScript" (i odabir odgovarajuće skripte koja radi konkretan posao).

Onda, dalje... SQLite je nešto što moram instalirati, zar ne?


Ne moraš, dio je sistema. Možeš ga koristiti kroz shell (kojeg triggaš kroz AppleScript, što je zaobilazno) ili izravno putem Database Events. Ja bih krenuo od potonjeg.

Kako koristim SQLite iz AppleScripta? Instalira se podrška za SQL u AppleScriptu?


Vidi gornji link, za Database Events.

Ako sam te dobro shvatio, SQLite mi samo služi da bi provjerio imam li sve dijelove u inboxu i koji im je redoslijed? A kad to utvrdim iz SQLite samo uzmem listu message-IDova i po njoj pomoću AppleScripta povučem mailove iz Mail.app van? Kamo? Na disk, pa dalje shell skriptom grep i base64 decode?


SQLite ti (kao baza) u ovom slučaju rješava ključni problem - "pamti što se zbiva" tako da tvoja skripta između dva izvršavanja bude svjesna što se prethodno dogodilo i što se sljedeće može dogoditi. Usputno ga koristiš i za pohranu sadržaja mailova (koje ćeš spojiti i dekodirati). I da, možeš oboje napraviti na neki "gluplji" način, koristeći txt fajlove za spremati u njih info "što se dogodilo", kao i za spremati dijelove mailova koje ćeš spojiti (kao što si predložio, s catom) - ali kad već imaš na raspolaganju bazu koja sve to može napraviti "sama", kemijanje s txt fajlovima bi bio mazohizam.

Pokušat ću pojasniti algoritam koji sam napisao: koristeći filter, u Apple Mailu testiraš koji mail je "relevantan" i samo takve prosljeđuješ dalje na obradu (runnaš skriptu). Skripta parsa (i tu ima najviše tipkanja konkretnog kôda), kako god želiš da to radi, source maila (raw) - sve potrebne informacije (osim mehanike parsanja, koju sam moraš osmisliti) imaš u Apple Mail dictionaryu (u Script Editoru). Bitno je samo da od AppleMaila preuzmeš id maila (zove se "message id"), a da iz sourca iščitaš id (koji dodjeljuje Konica), number, part, filename i content. I da, redundantno je zapisati N puta number i filename, ali u konkretnom slučaju nije bitno - jednostavnije je, a i tako brišeš recorde kad obaviš posao (pa se ne moramo baviti higijenom baze u svakom koraku). Najveći podatak je "content" (to je ono što u konačnici spajaš u jedan fajl i šalješ na dekodiranje). I sve to skupa, kao jedan record, snimiš u bazu. Nakon toga možeš, ali i ne moraš (odmah) obrisati mail koji si upravo obradio.

Kad obradiš prvi mail, ne znaš je li to ujedno i zadnji, a ako nije ne znaš još imaš li ih sve. To možeš saznati od baze (jer tamo sve zapisuješ). Pa zato NAKON što si zapisao record maila kojeg si upravo obradio, provjeriš imaš li u bazi SVE potrebno za dekodiranje. Ako imaš sve dijelove - imaš sve potrebno. Ako nemaš sve dijelove, ne radiš dalje ništa, čekaš da "stignu".

U nekom trenutku (kad budeš obrađivao enti mail) će ti baza vratiti info da imaš sve potrebno za dekodirati sadržaj koji dijeli id (onaj kojeg Konica definira) tog maila. I tada krećeš u pripremu za dekodiranje: tražiš od baze sve dijelove koje moraš spojiti (jer su tamo zapisani i možeš ih dobiti ispravnim redom), spojiš ih (odnosno pitaš bazu da ih spoji kad ti ih vraća) i snimiš to što si dobio na disk. Nakon toga pozoveš (iz AppleScripta, kroz shell) dekodiranje (openssl ...) sa pathom koji se sastoji od predefiniranog foldera i filenamea koji ti je poznat (jer je, redundantno, zapisan u bazi). Nakon dekodiranja radiš housekeeping: brišeš temp datoteku (jer ti više ne treba, samo troši mjesto na disku), purgaš recorde iz baze (jer ti ni oni ne trebaju) i opciono brišeš same mailove u Apple Mailu (jer znaš i njihov id, to je onaj "message id", pa ih nije problem naciljati).
21.04.2020 | 22:29
Hvala ti. Idem se igrati pa se vratim pitanjima.
21.04.2020 | 22:54
Evo jednog. Ja bi, dakle, trebao najprije kreirati bazu i strukturu podataka u njoj, da bi je kasnije koristio kroz apple script, zar ne? Pretpostavljam da je to jednokratan posao i da za to imam neki interaktivni alat. Ima li nešto već instalirano? Ili moram kroz apple script?
21.04.2020 | 22:57
aha, sorry, evo našao sam command line alat
21.04.2020 | 23:06
Ja bi, dakle, trebao najprije kreirati bazu i strukturu podataka u njoj, da bi je kasnije koristio kroz apple script, zar ne?


Tako je.

Pretpostavljam da je to jednokratan posao i da za to imam neki interaktivni alat.


Jednokratan je, a postoje i "interaktivni" (zapravo "vizualni") alati tipa DB Browser for SQLite.

Ima li nešto već instalirano? Ili moram kroz apple script?


Nema ("vizualno", u sistemu), ali možeš kroz shell. Možeš i kroz AppleScript, ali bit će ti lakše s ovim kojeg spominjem.
21.04.2020 | 23:09
Ha! Našao sam i RazorSQL!
21.04.2020 | 23:12
Ha, gle, DB Browser for SQLite imam još od tko zna kad...!
Moderatori: Bertone
  • Stranica:
  • 1

Vikalica™

Zadnja poruka: pred 20 sati, 37 minuta
  • drlovric: Ma ide to bez problema. Ja sam uvijek azurirao sve strojeve prvi dan. Nisam imao problema, ali generalno nije pametno :)
  • drpongrac23: [link]
  • drpongrac23: Izgleda da izlazi oko 19.00 sati po našem vremenu. Očekuje ze velika gužva prilikom downloada
  • dpasaric: Možda za neki nebitni stroj za početak...
  • dpasaric: Ne znam, ja ne bih žurio. :)
  • drpongrac23: Sutra macOS Tahoe!
  • dpasaric: Osvrt je na naslovnici...
  • dpasaric: Ja bih samo Siri koja radi kako treba.
  • stefanjos: pa nije da ikome treba, ali radije bi to nego iakkav AI image generator haha
  • drlovric: Top je stvar. Razmazi oci i plus dobijes par sat i baterije usput.
  • dpasaric: Kome to uopće treba? :)
  • drlovric: Slazem se. Natjerala ih AI blamaza a ne dobra volja :)
  • stefanjos: 120hz na obicnom iphoneu. Napokon!
  • stefanjos: Drpongrac. Nema uvrede. Autoagnostik sam ali volim svoj polo :)
  • drpongrac23: Bez uvrede, isprika svakome, imao san bekutanera kockici m3, golfa 4 i polo sdi - sve redom šrot!!!!
  • drpongrac23: @stefanjos - fauwe = krampwagen! Hyundai rulez!!!!
  • drpongrac23: Uskoro event! Euforija počinje!!!! Gemišti na hlađenju!!!!
  • stefanjos: @yonkis, a stvarno je tino haha. samo fauve :P
  • Borisone: [link]
  • Borisone: Kao i svake godine u rujnu, nova generacija iPhona, te eventualno AirPodsi, Apple TV, i sl.
  • Yonkis: A što se predstavlja?
  • dpasaric: Danas Appleov Keynote u 19 sati po našem vremenu!
  • Yonkis: tino1 mora pješke jer ga izdao Bayerische Motoren Werke :)
  • stefanjos: ?
  • Yonkis: [link] tužno
  • smayoo: Rijeka je treći grad u Europi po godišnjoj precipitaciji. Prva je Genova u Italiji, a drugi je Nikšić u Crnoj Gori
  • smayoo: Nije istina. London ima više kišnih dana godišnje, ali Rijeka ima veću godišnju precipitaciju (kumulativnu količinu padalina u mm po m2)
  • hal9000: @yonkis • Navodno je.
  • Yonkis: Jel' ovo istina za Rijeku? [link]
  • smayoo: Riječani i ostali zainteresirani, kavica i ćakula ovu subotu (30.08.) ujutro u 10h u gradskoj kavani Renard
  • drlovric: @vanjus: Barem si imao mogucnost izbora. Odaberes banku koja ima Apple Pay i cao :) biH je doslovce prije tjedan-dva dobila Apple Pay, nije uopce bilo dostupno u drzavi.
  • VanjusOS: pa znam da je Apple pay bio dostupan preko PBZ-a već godinama, ali tek od jučer je to moguće i preko HPB.
  • Yonkis: @smayoo - mogli bi subotu ujutro. Ima li još zainteresiranih, gdje je tino1?
  • Yonkis: @VanjusOS - to misliš kao "napokon" tj sarkastično?
  • smayoo: @yonkis - ja mogu u subotu ujutro. U nedjelju popodne-navečer možda također, ali nisam siguran.
  • VanjusOS: ljudi, tehnološka revolucija! od danas Apple Pay i preko HPB-a!!
  • Yonkis: Jel netko za kakvu kavu ovaj vikend? U Ri mislim :)
  • Yonkis: Glede Tita.. u Splitu: [link]
  • smayoo: @drlovric, nema na čemu, drago mi je. :)
  • mbp2009: Titini kriteriji: onaj koji je bio protiv njega. Kao i kriteriji svakog drugog kriminalca i diktatora :)
  • drlovric: @Smayoo: Isli u plavo bijeli. Sasvim pristojna hrana. Nismo uopce razocarani. Hvala :)
  • jura22: Da, tocno tako. Sakupljao po ulici! Zene, djecu, starce. Po redu. Bez kriterija.
  • smayoo: U samom Osijeku, nažalost, po mom iskustvu ništa nije baš trajno na visokom nivou. Ako bih morao preporučiti bar jedno mjesto, to bi bio "Plavo-bijeli". Klasični restoran, kad vidiš kako su konobari odjeveni, izgleda kao da su još osamdesete, ali hrana je konzistentno vrlo dobra. Ali to je nekakav standardni restoranski jelovnik, nema nekih baš tradicionalno slavonskih jela
  • smayoo: Varga u Bilju, pojeli smo zbilja dobar čobanac prije koju godinu. Još je bolji u Sokaku u Đakovu, kod ergele, ali to ti nije blizu Osijeka
  • drlovric: Sutra sam u Osijeku. Molim lokalce za preporuku za dobru slavonsku hranu.
  • Air: U protivnom je imao vanzemaljsku sreću da je baš smaknuo one koji su mu smetali.
  • Air: @jura22 ja sam nekoj logici siguran da je Tito imao kriterije po kojima je to činio.
  • smayoo: Kako misliš - da je nekog dao smaknuti bez kriterija? Skupljao je nasumično ljude po ulici pa ih vodio na smaknuće?
  • Yonkis: Što je kriterij?
  • jura22: “kriterija”

Za vikanje moraš biti prijavljen.

Prijava

Prisutni jabučari

Novo na Jabučnjaku

Teme

Poruke

Oglasi

Komentari

Anketa

Koji Mac koristite?

Page Speed 1.00 Seconds

Provided by iJoomla SEO