Outlook dodatak za automatsko arhiviranje pošte u PDF

Pregled projekta

Razvio sam VSTO dodatak za Microsoft Outlook koji nadgleda jedan izabrani nalog i svaku pristiglu poruku automatski pretvara u jedinstven PDF dokument, zajedno sa svim prilozima, a zatim ga šalje u poslovni sistem klijenta. Korisnik ne radi ništa: pošta stiže kao i do tada, a arhiviranje se dešava u pozadini, u programu koji zaposleni ionako drže otvoren ceo dan.

Programerski izazov

Najteži deo nije bilo pravljenje PDF-a nego pouzdano hvatanje poruke. Outlook događaj za novu poštu ume da javi više poruka odjednom, da se javi pre nego što je poruka do kraja preuzeta sa servera i da se, u nesrećnim slučajevima, javi dvaput za istu poruku. Uz to, rad sa Outlook objektima mora da ostane na glavnoj niti, dok pravljenje PDF-a i slanje traju predugo da bi se tu obavljali — inače bi se program zaledio korisniku dok kuca odgovor.

Drugi izazov bili su prilozi. PDF datoteke koje stižu mejlom često su oštećene ili nastale u alatima koji ne poštuju standard, pa ih biblioteka za spajanje odbija. Rešenje je moralo da ih prihvati, a ne da stane na prvom neispravnom dokumentu.

Kako je rešenje organizovano

  • Nadzor jednog naloga – dodatak prati tačno onaj poštanski sandučić koji je izabran u podešavanjima, a poruke iz ostalih naloga u istom Outlook profilu ne dira.
  • Jedinstven ključ poruke – prepoznavanje se oslanja na standardni identifikator poruke pročitan direktno iz MAPI svojstava. Kada identifikator još nije stigao, dodatak sačeka i pokuša ponovo, a u krajnjem slučaju izračuna otisak iz pošiljaoca, naslova i vremena prijema. Time se ista poruka nikada ne obradi dvaput.
  • Podela posla po nitima – čitanje poruke i priloga ostaje na glavnoj niti, gde Outlook to zahteva, a pravljenje PDF-a i slanje idu asinhrono. Broj istovremenih poslova je ograničen, pa dodatak ne opterećuje računar ni kada odjednom stigne više poruka.
  • Jedan dokument umesto gomile datoteka – telo poruke se pretvara u HTML sa zaglavljem (pošiljalac, primaoci, vreme, naslov), ugrađenim slikama iz same poruke i prikazanim prilozima, pa se sve zajedno štampa u PDF. Priloženi PDF dokumenti se spajaju u isti dokument, a formati koji se ne mogu prikazati navode se poimenično, da se zna da su postojali.
  • Popravka neispravnih PDF priloga – pre spajanja se svaki priloženi PDF propušta kroz alat za popravku, u dva pokušaja sa različitim podešavanjima. Ako ni to ne uspe, koristi se original, a posao se ne prekida.
  • Prekidač u traci Outlook-a – sopstvena kartica sa poljem za uključivanje i dugmetom za podešavanja. Gašenje prekidača zaustavlja i poslove koji su već u toku, preko tokena za otkazivanje.
  • Podešavanja sa objašnjenjima – svako podešavanje ima svoj opis u zasebnoj datoteci, pa dijalog sam ispisuje šta koje polje znači, bez posebnog uputstva.

Pouzdanost i granični slučajevi

Pažnja je otišla na sitnice koje se vide tek u svakodnevnom radu: uredno oslobađanje COM objekata da Outlook ne ostane da visi u memoriji, vremensko ograničenje za spoljne alate, brisanje privremenih datoteka posle svakog posla, i zapis u dnevnik za svaku fazu — od preuzimanja poruke do potvrde da je dokument primljen. Kada slanje ne uspe, greška se zabeleži i vidi se koja poruka nije prošla, umesto da nestane u tišini.

Nadogradnja verzije zadržava ranije unesena podešavanja, tako da korisnik posle ažuriranja ne podešava ništa iznova.

Korišćene tehnologije

C#, .NET Framework 4.8, VSTO dodatak za Outlook, Outlook Interop i MAPI svojstva, prilagođena traka (Ribbon XML), asinhrono programiranje sa ograničenjem paralelnih poslova i tokenima za otkazivanje, generisanje PDF-a iz HTML-a, spajanje i popravka PDF dokumenata, HTTP/JSON komunikacija sa pozadinskim sistemom.

Rezultat

Klijent je dobio arhiviranje koje se ne oslanja na disciplinu zaposlenih. Poruka i njeni prilozi završe kao jedan dokument u poslovnom sistemu, u trenutku kada stignu, bez preuzimanja, štampanja u PDF i ručnog prilaganja. Dodatak radi tiho, može da se isključi jednim klikom i ne menja način na koji ljudi koriste Outlook.

Povratne informacije klijenta

★★★★★5/5

“Saradnja sa Dejanom bila je odlična. Profesionalan je, pouzdan i vrlo stručan, i dosledno isporučuje kvalitetan rad na vreme. Jasno komunicira, brzo reaguje na primedbe i pokazuje da dobro razume zahteve projekta. Rado bih nastavio da radim sa njim i toplo ga preporučujem drugim klijentima.”

Za sličan dodatak u Excel-u, Word-u ili Outlook-u pogledajte uslugu izrade programa po meri.