imapsync: datumi nisu sačuvani? Kako ih ispraviti

8 min čitanja Posljednje ažuriranje:

Obećanje --syncinternaldates (i gdje prestaje vrijediti)

Pokrenuli ste naredbu imapsync. Uključili ste --syncinternaldates jer ste pročitali dokumentaciju i pažljivo pristupate ovakvim stvarima. Migracija je završila, zapisnik kaže da je sve preneseno, nula pogrešaka. Zatim otvorite poštanski sandučić u Outlooku i svaka e-poruka prikazuje jučerašnji datum.

Ovo je jedna od najčešćih frustracija s imapsync-om i zbunjuje administratore sustava barem od 2017. Zastavica --syncinternaldates trebala bi sačuvati IMAP INTERNALDATE tijekom migracije. I zaista to radi: daje svakoj kopiji interni datum koji čuva izvorni poslužitelj. Baš tu je zamka.

imapsync je otvoreni alat napisan u Perlu, autora Gillesa Lamirala, i zaista je dobar u onome što radi. Nosi se s prijenosom poštanskih sandučića između IMAP poslužitelja s pouzdanošću kojoj zavidi većina komercijalnih alata. Ali imapsync može kopirati samo datume koje pronađe, i tu stvari postaju komplicirane.

Kako zapravo rade IMAP datumi

U svakoj e-poruci postoje tri različita "datuma", i većina ljudi (uključujući neke IT administratore) ih miješa:

  • Zaglavlje Date: (RFC 2822) - datum koji je pošiljateljev e-mail klijent stavio na poruku prilikom sastavljanja. Ovo se nalazi unutar tijela poruke i mail poslužitelji ga nikad ne mijenjaju.
  • Zaglavlja Received: - svaki mail poslužitelj koji obradi poruku dodaje jedno sa svojom vremenskom oznakom. Ona čine lanac od pošiljatelja do primatelja. Najgornje (najnovije) zaglavlje Received neki e-mail klijenti koriste za prikaz.
  • INTERNALDATE - vremenska oznaka na strani IMAP poslužitelja koja određuje redoslijed poruka u poštanskom sandučiću. Postavlja se kad se poruka prvi put pohrani putem naredbe IMAP APPEND.

Kad imapsync migrira poruku, čita je s izvornog poslužitelja (uključujući njezin INTERNALDATE) i piše je na odredišni poslužitelj koristeći IMAP APPEND. Zastavica --syncinternaldates govori imapsync-u da odredišnom poslužitelju prilikom APPEND-a proslijedi izvorni INTERNALDATE.

Dobra vijest: Microsoft 365, Outlook.com i Gmail čuvaju datum koji im je dan. Dakle, kad su datumi pogrešni, problem je negdje drugdje.

Zašto datumi ipak mogu biti pogrešni

IMAP specifikacija (RFC 3501) kaže da bi poslužitelj, ako se datum-vrijeme dostavi uz naredbu APPEND, TREBAO ga koristiti. "SHOULD" u jeziku RFC-a znači "učinite to osim ako imate dobar razlog da ne". Microsoft 365, Outlook.com i Gmail to i čine: kopija koja nosi svoj izvorni datum ga zadržava.

Ono što imapsync prosljeđuje je, međutim, datum koji IZVORNI poslužitelj čuva za svaku poruku, ne datum kad je e-poruka poslana. Na zdravom poštanskom sandučiću ta dva se poklapaju. Na sandučiću koji je već jednom migriran ili vraćen iz sigurnosne kopije, izvornik može čuvati datum te ranije operacije, a imapsync ga kopira takvog kakav je.

Gmail je iznimka samo kad kopiranje ide kroz Gmailov vlastiti API za uvoz umjesto putem IMAP-a: taj API dodaje redak Received: s datumom dana kopiranja, i Outlook taj datum može prikazati. imapsync govori IMAP-om, tako da na njega to ne utječe.

Dovecot i Cyrus, dva najčešća otvorena IMAP poslužitelja, također čuvaju datum iz APPEND-a. Dakle, bez obzira na odredište, pitanje je isto: koji je datum čuvao izvornik?

Česte pogreške u naredbenom retku imapsync-a koje kvare datume

Osim izvornih datuma, administratori se često spetljaju s opcijama naredbenog retka imapsync-a, ili okrive pogrešnu opciju. Evo pogrešaka koje najčešće viđam:

Kopiranje s izvornika čiji su datumi već bili pogrešni

--syncinternaldates je uključena po zadanome: imapsync svakoj kopiji daje interni datum koji čuva izvorni poslužitelj (iz njegove dokumentacije: "Sets the internal dates on host2 as the same as host1"). Ako je izvorni poštanski sandučić sam rezultat ranije migracije ili vraćanja iz sigurnosne kopije, njegovi interni datumi mogu već biti datumi te operacije, a imapsync vjerno kopira pogrešan datum. Ovo je najčešći uzrok, i najlakše ga je propustiti, jer zapisnik pokazuje dva identična datuma.

Korištenje --syncinternaldates zajedno s --addheader

Neki vodiči preporučuju korištenje --addheader za umetanje prilagođenog zaglavlja tijekom migracije. Dodavanje zaglavlja mijenja poruku (jedan redak više na vrhu), ali ne datum koji imapsync prosljeđuje, tako da to neće objasniti pogrešne datume. Kopija jednostavno više nije identična izvorniku, što je važno ako ta dva uspoređujete.

Zamjenjivanje --minage i --maxage s očuvanjem datuma

Zastavice --minage i --maxage filtriraju koje se poruke migriraju prema njihovoj starosti. Ne utječu na to kako se datumi obrađuju na odredištu. Vidio sam administratore koji su satima podešavali te zastavice misleći da će tako riješiti problem s datumima. Neće.

Okrivljavanje TLS-a za pomaknute datume

Preko TLS-a (--ssl1, --ssl2) uspostava veze dodaje kašnjenje, a na velikoj migraciji (50.000+ poruka) to se zbroji u sate. To ne dotiče datume: svaka kopija nosi datum koji imapsync prosljeđuje, bez obzira u koje se stvarno vrijeme prenese.

Čitanje zapisnika imapsync-a: što izlaz zapravo govori

imapsync stvara detaljne zapisnike, što je odlično. Ali izlaz zapisnika može biti zbunjujuć kad je riječ o datumima.

Tipičan redak uspješnog prijenosa izgleda ovako:

msg source stratemind/42 {5765} D:2019-01-15 13:22:07 -> dest stratemind/42 {5765} D:2019-01-15 13:22:07

Oba datuma se podudaraju. To znači da je imapsync odredišnom poslužitelju poslao ispravan INTERNALDATE. A Microsoft 365, Outlook.com i Gmail svi čuvaju datum koji im je dan. Ali dva identična datuma dokazuju samo da je kopija vjerna IZVORNIKU: ako je izvorni datum već bio pogrešan, oba stupca prikazuju isti pogrešan datum.

Želite provjeriti što se zapravo dogodilo? Nakon migracije povežite se na odredište IMAP klijentom i izravno provjerite INTERNALDATE:

a1 SELECT INBOX
a2 FETCH 42 (INTERNALDATE)

Ako vraćeni datum nije datum kad je e-poruka poslana, pogledajte istu poruku na izvorniku: pronaći ćete isti pogrešan datum i tamo. Zapisnik nije lagao, kopirao je ono što mu je dano.

Ovo je jedan od najfrustrirajućih dijelova otklanjanja problema s datumima: čist zapisnik, dva identična datuma, a ipak pogrešan datum u Outlooku, jer je pogreška postojala prije nego što je imapsync pokrenut.

Migracije imapsync-a velikih razmjera: gdje se problemi s datumima množe

Migracija jednog poštanskog sandučića imapsync-om je neugodna kad se datumi pokvare. Ali MSP-ovi i IT odjeli koji pokreću imapsync na stotinama sandučića suočavaju se s posve drugom razinom problema.

Zamislite tipičan scenarij migracije u poduzeću. Premještate 200 poštanskih sandučića sa Zimbra poslužitelja na Microsoft 365. Napišete skriptu koja prolazi kroz CSV popis korisnika i za svakog poziva imapsync. Migracija traje cijeli vikend. U ponedjeljak ujutro imate 200 poštanskih sandučića s pogrešnim datumima, i oko 1,2 milijuna e-poruka ukupno koje prikazuju vremensku oznaku migracije.

Možete li ponovno pokrenuti imapsync da to ispravite? Tehnički da, ali imapsync će preskočiti poruke koje već postoje na odredištu (osmišljen je da bude idempotentan). Trebala bi Vam zastavica --delete2 za uklanjanje odredišnih poruka i njihov ponovni prijenos, što je rizično na produkcijskom sandučiću. A ako su izvorni datumi bili problem, drugo pokretanje ponovno kopira iste pogrešne datume.

Neki administratori pokušavaju hibridni pristup: prvo pokrenu imapsync s --dry radi testiranja, zatim pravu migraciju. Ali --dry samo simulira prijenos: pokazuje datume koje bi imapsync proslijedio, ne to jesu li to datumi kad su e-poruke stvarno poslane. Ništa Vas ne upozorava da su izvorni datumi već pogrešni.

Samostalni ispravci i njihove granice

Ako pretražite forume i mailing liste (imapsync-devel lista na SourceForgeu još je aktivna početkom 2026.), naći ćete prijedloge u rasponu od kreativnih do opasnih.

Neki predlažu korištenje Perl "one-linera" za izravno mijenjanje INTERNALDATE na odredišnom poslužitelju. Drugi preporučuju izvoz svih poruka u mbox format, ručnu izmjenu datuma i ponovni uvoz. Nekolicina je napisala Python skripte koje pomoću imaplib dohvaćaju, mijenjaju i ponovno umeću poruke.

Svi ti pristupi dijele iste temeljne probleme. Kako postupiti sa S/MIME potpisanim porukama bez narušavanja potpisa? Što sa slojevitim MIME strukturama s ugniježđenim granicama? Ne-ASCII zaglavljima kodiranim po RFC 2047? PGP šifriranim porukama čiji sadržaj ne možete ni pregledati? Skripta koja podnese 50 testnih poruka u razvojnom okruženju zapet će na rubnim slučajevima u produkcijskom sandučiću od 30.000 poruka.

I najveće pitanje koje nitko ne postavi dok nije previše kasno: kako provjeriti da je svaka izmijenjena poruka i dalje netaknuta? Da privici nisu postali neispravni tijekom postupka, da razgovori (threading) i dalje funkcioniraju, da je tablica od 85 MB koju je netko poslao 2020. godine preživjela izmjenu?

(Ako ste ikad pokušali parsirati sirova zaglavlja e-poruka u Perlu, znate da to nije baš opuštajuća poslijepodnevna aktivnost.)

Kako Redate.io ispravlja probleme s datumima nakon imapsync-a

Izvorno zaglavlje Date: uvijek je netaknuto nakon migracije imapsync-om. imapsync vjerno prenosi sirovu poruku; pogrešan datum sjedi u metapodacima koje je kopija primila, ne u samoj poruci. Taj izvorni datum čini ispravak mogućim.

Redate.io se povezuje izravno s poštanskim sandučićem (Google Workspace, Microsoft 365 ili bilo koji IMAP poslužitelj), traži e-poruke s anomalijama datuma i primjenjuje ciljani ispravak metapodataka putem vlastitog postupka analize lanca zaglavlja i rekonstrukcije datuma. Ne treba znati koji je alat provodio migraciju: pronalazi e-poruke čiji prikazani datum ne odgovara njihovom izvornom datumu.

Svaka ispravljena e-poruka provjerava se pojedinačno: cjelovitost poruke, očuvanje privitaka, smještaj u mapu, razgovori (threading), oznake. Izvornici se čuvaju u vidljivoj mapi Redate.io - Originals i ostaju tamo dok ih sami ne obrišete. Ako nešto izgleda pogrešno, vraćanje unatrag udaljeno je jedan klik.

Besplatna analiza povezuje se s poštanskim sandučićem, prepoznaje svaku e-poruku s anomalijom datuma i prikazuje točan broj i cijenu. Bez potrebe za kreditnom karticom, bez instaliranja softvera. Za pojedinosti Vaše platforme:

Redate.io radi i na migracijama koje su se dogodile prije mjeseci ili godina. Zaglavlje Date: ne zastarijeva, a ni mogućnost ispravljanja onoga što je krenulo pogrešno.

Migrirali ste imapsync-om i ostali s pogrešnim datumima? Pokrenite besplatnu analizu da vidite točno koliko je e-poruka pogođeno.

Povezani članci