Simptom koji svi poznaju
Upravo ste završili IMAP migraciju na Microsoft 365 ili Google Workspace. U ponedeljak ujutro, tiketi počinju da pristižu: "Svi moji emailovi imaju isti datum", "Istorija mi je pokvarena", "Ne mogu da nađem ništa u sandučetu". Otvorite Outlook i zaista, hiljade emailova prikazuje datum od prošlog vikenda. Ne datum kada su poslati. Datum kada je migracija obavljena.
Ovo nije Outlook bug. To je direktna posledica načina na koji funkcionišu IMAP protokol i alati za migraciju. Ali da bismo razumeli zašto, moramo da otvorimo haubu.
Tri datuma u jednom emailu
Email je složeniji nego što izgleda. Zaglavlje, telo poruke, prilozi... i nekoliko posebnih vremenskih oznaka koje koegzistiraju. (Inače, ako ste ikad pokušali da čitate sirova zaglavlja emaila, znate da to nije baš lagano štivo za plažu.)
Zaglavlje Date: (RFC 2822)
To je datum koji je pošiljalac upisao u poruku u trenutku slanja. Definisan RFC 2822 standardom, izgleda ovako:
Date: Tue, 14 Mar 2023 09:42:17 +0100
Ovo zaglavlje je utkano u samu masu poruke. Nikada se ne menja, osim ako neko ne izmeni sirovi sadržaj poruke. To je "datum slanja" u pravom smislu te reči.
Zaglavlje Received: (dodaje se na svakom mrežnom skoku)
Svaki server koji se dotakne emaila u tranzitu dodaje zaglavlje Received: na vrh poruke, sa sopstvenim datumom. Email koji prođe kroz tri servera akumulira tri zaglavlja Received:. Najnovije je uvek prvo. Izgleda otprilike ovako:
Received: from mail.example.com ([93.184.216.34])
by mx.google.com with ESMTPS
id x1234abcd.2024.06.15.08.31.02;
Sat, 15 Jun 2024 08:31:02 +0000 (UTC)
Rezultat: kada alat za migraciju kao što su BitTitan MigrationWiz, CloudM, imapsync ili GSMMO premesti email sa izvornog na odredišni server, i sam se ponaša kao "mrežni skok". Ubacuje novo zaglavlje Received: na vrh steka, sa datumom i vremenom migracije.
IMAP INTERNALDATE
To je treći datum, i upravo on pravi problem. INTERNALDATE je metapodatak koji se čuva na strani IMAP servera, nezavisno od sadržaja poruke. Predstavlja datum kada je email isporučen (ili umetnut) u poštansko sanduče. Kada alat za migraciju umetne email putem IMAP komande, on bira koju vrednost da dodeli INTERNALDATE-u. I u mnogim slučajevima, alati koriste datum samog trenutka migracije. Ne originalni datum.
Tu se sve zaglavi.
Zašto Outlook prikazuje datum migracije
Outlook koristi INTERNALDATE za prikaz kolone "Primljeno". To je njegovo podrazumevano ponašanje, konzistentno sa IMAP specifikacijom: INTERNALDATE treba da predstavlja datum prijema u sandučetu. U normalnom toku (pravi email koji pristigne), INTERNALDATE je blizak datumu u zaglavlju Date:. Oba su konzistentna.
Nakon neuspešne migracije, INTERNALDATE svih uvezenih emailova pokazuje na noć između 14. i 15. juna 2024. (ili koji god da je bio datum migracije). Outlook čita tu vrednost, prikazuje je u koloni "Primljeno", i rezultat je katastrofalan: 45.000 emailova izgleda kao da su primljeni iste večeri.
Da budemo precizni, prvo zaglavlje Received: (najnovije u steku) takođe utiče na prikaz u nekim konfiguracijama. Ali INTERNALDATE ostaje glavni faktor za kolonu "Primljeno" u Outlooku u režimu sinhronizovanog IMAP-a.
Zaobilazno rešenje "Dodaj kolonu Poslato" u Outlooku
Prva stvar koju većina IT admina uradi kada otkrije problem je da potraži zaobilazno rešenje na strani klijenta. I zaista postoji jedno.
U Outlooku se može izmeniti prikaz kolona u folderu tako da se zameni (ili dopuni) kolona "Primljeno" kolonom "Datum" ili "Poslato". Kolona "Datum" direktno čita zaglavlje Date: poruke, ne INTERNALDATE. Pošto zaglavlje Date: nije dirnutu tokom migracije, originalni datumi se ponovo pojavljuju.
Da biste to uradili u Outlooku (desktop, verzija Microsoft 365): desni klik na zaglavlje kolone u listi poruka, "Podešavanja prikaza", pa izmenite kolone tako da uklonite "Primljeno" i dodate "Datum". Može se rasporediti putem GPO za masovnu primenu.
U teoriji, to rešava vizuelni problem. U praksi, to je flaster na arteriji.
Konkretna ograničenja ovog zaobilaznog rešenja
Mobilni i web klijenti
Outlook na iOS-u, Androidu i Outlook Web App (OWA) nemaju iste opcije prilagođavanja. Izmena prikaza koju ste rasporedili na Windows računarima se ne prenosi. Vaši korisnici koji čitaju emailove na telefonima nastavljaju da vide datum migracije. A u kompaniji srednje veličine, to je verovatno polovina korisnika.
Pretraga
Outlook pretraga koristi Windows Search indeks (ili Exchange/Microsoft 365 indeks na strani servera). Taj indeks se gradi na osnovu INTERNALDATE-a, ne zaglavlja Date:. Ako korisnik traži "emailovi iz januara 2022.", pretraga vraća emailove čiji je INTERNALDATE u januaru 2022. Ne one čije je zaglavlje Date: iz januara 2022. Rezultat: stari emailovi više ne iskaču u filterima po datumu. Promena kolone prikaza ne menja apsolutno ništa u vezi sa tim.
Pravila poruka
Outlook pravila ("ako je email primljen pre...", "ako je email primljen posle...") takođe koriste INTERNALDATE. Pravilo sortiranja ili arhiviranja zasnovano na opsezima datuma neće ispravno funkcionisati nakon migracije ako INTERNALDATE nije ispravljen.
Usklađenost i eDiscovery
Ovo je možda najozbiljnija tačka. Alati za usklađenost, pravno arhiviranje i eDiscovery (Microsoft Purview, na primer) koriste INTERNALDATE kao datumsku referencu za pravne upite. Ako Vaša kompanija podleže obavezama čuvanja podataka ili mora da odgovori na zahteve za otkrivanje, oštećeni INTERNALDATE može izazvati ozbiljne pravne probleme. Revizija koja zatraži "sve emailove između takvog i takvog datuma" neće vratiti ispravne rezultate.
Alati trećih strana
CRM sistemi, alati za tiketing, arhivatori... sve što se konektuje na Vaš mail server putem IMAP-a ili Microsoft 365/Google Workspace API-ja čita INTERNALDATE. Promena Outlook prikaza ne ispravlja ništa za ove sisteme.
Jedino pravo rešenje: ispravka na nivou servera
Sortiranje po datumu slanja u Outlooku nije rešenje. To je flaster. Prava ispravka mora se obaviti na nivou metapodataka servera, ne prikaza klijenta.
Konkretno, to znači ispraviti INTERNALDATE svakog emaila tako da odgovara originalnom datumu iz zaglavlja Date:. Originalno zaglavlje Date: je uvek prisutno u poruci (migracija ga nije izbrisala), što čini ispravku mogućom. Tu se nalazi informacija o stvarnom datumu.
Na Google Workspace-u, Gmail API izlaže parametar internalDate koji omogućava direktno delovanje na ovaj metapodatak. Na Microsoft 365-u, mehanizam je drugačiji ali očekivani rezultat je isti. Na standardnom IMAP serveru, standard predviđa da datum može biti specificiran pri umetanju poruke.
U praksi, izvršiti ovu operaciju na desetinama hiljada emailova u produkciji, bez gubitka podataka, bez duplikata, bez kvarenja niti razgovora ili labela, uz upravljanje graničnim slučajevima (S/MIME potpisane poruke, složene MIME strukture, non-ASCII enkodiranja prema RFC 2047, veliki prilozi)... to je sasvim druga priča. Skript koji radi na 50 test emailova neće izdržati na sandučetu sa 40.000 poruka. Upravljanje 429 greškama (prekoračen API kvota), mrežnim timeoutima u 2 ujutro, porukama čija je MIME struktura već delimično oštećena nakon migracije... sve to zahteva ozbiljno inženjerstvo.
Upravo to radi Redate.io. Vlasnički motor za ispravku analizira lanac zaglavlja svakog emaila, identifikuje pouzdan originalni datum i primenjuje ciljanu ispravku metapodataka bez dodirivanja sadržaja poruke. Svaki ispravljen email se proverava pojedinačno. Originali se čuvaju u backup folderu 30 dana, što u svakom trenutku omogućava povratak na prethodno stanje. Nešto što domaći skript nikada ne nudi.
Identifikacija alata za migraciju koji je odgovoran
Problem se manifestuje na isti način bez obzira na poreklo migracije, ali detalji variraju prema korišćenom alatu. BitTitan MigrationWiz, CloudM, imapsync i GSMMO imaju svaki svoju potpis u zaglavljima Received: koja ubacuju. Analitički pipeline Redate.io-a održava bazu sa stotinama potpisa poznatih alata za migraciju kako bi razlikovao zaglavlje migracije od ostatka legitimnog tranzitnog lanca.
Ako ne znate koji je alat korišćen za Vašu migraciju (to se dešava, posebno kada preuzimate infrastrukturu od drugog MSP-a), besplatni sken Redate.io-a identifikuje pogođena sandučeta i daje procenu obima ispravke pre bilo kakvog angažovanja.
Za specifične kontekste, dostupni su detaljni vodiči: ispravka datuma imapsync u Outlooku, ispravka datuma BitTitan u Outlooku, ili ispravka datuma CloudM u Outlooku.
Šta uraditi sada
Ako čitate ovaj članak posle migracije, dobra vest je da je originalno zaglavlje Date: netaknuto u svakom Vašem emailu. Informacije o stvarnom datumu su tu, prisutne u svakoj poruci. Problem je u metapodacima, ne u sadržaju. A metapodaci se mogu ispraviti.
Možete pogledati i članak IMAP INTERNALDATE: zašto se datumi kvare za dublji uvid u mehaniku problema, ili kompletan vodič za pogrešne datume u Outlooku posle migracije ako želite sveobuhvatan pregled svih scenarija.
Spremni da ispravite datume u Vašim sandučetima? Pokrenite besplatan sken na Redate.io da identifikujete pogođene emailove i procenite obim pre bilo kakve ispravke.