imapsync datumi nisu sačuvani? Kako ih ispraviti

8 min čitanja Poslednji put ažurirano:

Obećanje --syncinternaldates (i gde se zaustavlja)

Pokrenuli ste imapsync komandu. Uključili ste --syncinternaldates jer ste pročitali dokumentaciju i pažljivi ste. Migracija se završava, log kaže da je sve preneto, nula grešaka. Onda otvorite sanduče u Outlook-u i svaki mejl prikazuje jučerašnji datum.

Ovo je jedna od najčešćih frustracija sa imapsync-om i zbunjuje sistem administratore od najmanje 2017. godine. Zastavica --syncinternaldates bi trebalo da sačuva IMAP INTERNALDATE tokom migracije. I zaista to radi: svakoj kopiji dodeljuje interni datum koji čuva izvorni server. Baš tu je zamka.

imapsync je alat otvorenog koda napisan u Perl-u od strane Gilles-a Lamiral-a i zaista je dobar u onome što radi. Obrađuje IMAP-na-IMAP prenose sandučića sa nivoom pouzdanosti koji većina komercijalnih alata zavidi. Ali imapsync može samo da kopira datume koje pronađe, i tu stvari postaju komplikovane.

Kako IMAP datumi zapravo funkcionišu

Postoje tri različita "datuma" uključena u svaki mejl, i većina ljudi (uključujući neke IT administratore) ih meša:

  • Date: zaglavlje (RFC 2822) - datum koji je klijent pošiljaoca stavio na poruku kada je sastavljena. Ovo živi unutar tela poruke i mejl serveri ga nikada ne menjaju.
  • Received: zaglavlja - svaki mejl server koji obradi poruku dodaje jedno sa sopstvenim vremenskim pečatom. Formiraju lanac od pošiljaoca do primaoca. Najnovije Received zaglavlje je ono što neki mejl klijenti koriste za prikaz.
  • INTERNALDATE - vremenski pečat na strani IMAP servera koji kontroliše kako se poruke sortiraju u sandučetu. Postavlja se kada se poruka prvi put sačuva preko IMAP APPEND.

Kada imapsync migrira poruku, čita je sa izvornog servera (uključujući njen INTERNALDATE) i upisuje je na odredišni server koristeći IMAP APPEND. Zastavica --syncinternaldates govori imapsync-u da prosledi izvorni INTERNALDATE odredišnom serveru tokom APPEND.

Dobra vest je sledeća: Microsoft 365, Outlook.com i Gmail čuvaju datum koji im se prosledi. Kada datumi ispadnu pogrešni, problem je negde drugde.

Zašto datumi i dalje mogu biti pogrešni

IMAP specifikacija (RFC 3501) kaže da ako je datum-vreme obezbeđen sa APPEND komandom, server BI TREBALO da ga koristi. "BI TREBALO" u RFC jeziku znači "uradite ovo osim ako nemate dobar razlog da ne uradite." Microsoft 365, Outlook.com i Gmail to i čine: kopija koja nosi svoj originalni datum ga i čuva.

Ono što imapsync prosleđuje je datum koji IZVORNI server čuva za svaku poruku, a ne datum kada je mejl poslat. Na zdravom sandučetu ta dva datuma se poklapaju. Na sandučetu koje je već jednom migrirano ili vraćeno iz rezervne kopije, izvor može čuvati datum te ranije operacije, i imapsync ga verno kopira takvog kakav je.

Gmail je posebno slučaj samo kada kopija ide preko Gmail-ovog sopstvenog API-ja za uvoz umesto preko IMAP-a: taj API dodaje Received: liniju sa datumom dana kopiranja, i Outlook može prikazati taj datum. imapsync komunicira preko IMAP-a, pa na njega to ne utiče.

Dovecot i Cyrus, dva najčešća IMAP servera otvorenog koda, takođe čuvaju datum iz APPEND. Dakle, bez obzira na odredište, pitanje je isto: koji je datum čuvao izvor?

Česte greške u imapsync komandnoj liniji koje kvare datume

Osim izvornih datuma, administratori često pogreše sa imapsync opcijama komandne linije, ili okrive pogrešne od njih. Evo grešaka koje najčešće viđam:

Kopiranje sa izvora čiji su datumi već bili pogrešni

--syncinternaldates je podrazumevano uključena: imapsync dodeljuje svakoj kopiji interni datum koji čuva izvorni server (njegova dokumentacija: "Postavlja interne datume na host2 iste kao na host1"). Ako je izvorno sanduče samo rezultat ranije migracije ili vraćanja iz rezervne kopije, njegovi interni datumi već mogu biti datumi te operacije, i imapsync verno kopira pogrešan datum. Ovo je najčešći uzrok i najlakše se previdi, jer log prikazuje dva identična datuma.

Korišćenje --syncinternaldates sa --addheader

Neki vodiči preporučuju korišćenje --addheader za ubacivanje prilagođenog zaglavlja tokom migracije. Dodavanje zaglavlja modifikuje poruku (jedna linija više na vrhu), ali ne menja datum koji imapsync prosleđuje, tako da to ne objašnjava pogrešne datume. Kopija jednostavno više nije identična originalu, što je važno ako upoređujete ta dva.

Mešanje --minage i --maxage sa očuvanjem datuma

Zastavice --minage i --maxage filtriraju koje poruke da se migriraju na osnovu starosti. Ne utiču na to kako se datumi obrađuju na odredištu. Video sam administratore koji provode sate podešavajući ove zastavice misleći da će popraviti problem sa datumima. Neće.

Okrivljavanje TLS-a za pomerene datume

Preko TLS-a (--ssl1, --ssl2), uspostavljanje konekcija dodaje kašnjenje, i kod velike migracije (50.000+ poruka) ono se nagomila na satove. To ne dotiče datume: svaka kopija nosi datum koji imapsync prosledi, bez obzira kada zaista stigne.

Čitanje imapsync logova: šta izlaz zaista govori

imapsync proizvodi detaljne logove, što je odlično. Ali izlaz loga može biti obmanjujući kada su datumi u pitanju.

Tipična linija uspešnog prenosa 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 poklapaju. Microsoft 365, Outlook.com i Gmail svi čuvaju datum koji im se prosledi. Ali dva identična datuma dokazuju samo da je kopija verna IZVORU: ako je izvorni datum već bio pogrešan, obe kolone prikazuju isti pogrešan datum.

Želite da proverite šta se zaista desilo? Nakon migracije, povežite se na odredište sa IMAP klijentom i proverite INTERNALDATE direktno:

a1 SELECT INBOX
a2 FETCH 42 (INTERNALDATE)

Ako vraćeni datum nije datum kada je mejl poslat, pogledajte istu poruku na izvoru: pronaći ćete tamo isti pogrešan datum. Log vas nije lagao, samo je kopirao ono što mu je dato.

Ovo je jedan od najfrustrirajućih aspekata debagovanja problema sa datumima: čist log fajl, dva identična datuma, a u Outlook-u i dalje pogrešan datum, jer greška je postojala i pre nego što je imapsync pokrenut.

Velike imapsync migracije: gde se problemi sa datumima umnožavaju

Migracija jednog sandučeta sa imapsync-om je frustrirajuća kada se datumi pokvare. Ali MSP-ovi i IT odeljenja koja pokreću imapsync kroz stotine sandučića suočavaju se sa potpuno drugačijim obimom problema.

Razmotrimo tipični scenario enterprise migracije. Prebacujete 200 sandučića sa Zimbra servera na Microsoft 365. Pišete wrapper skriptu koja prolazi kroz CSV fajl korisnika, pozivajući imapsync za svakog. Migracija traje tokom vikenda. U ponedeljak ujutru imate 200 sandučića sa pokvarenim datumima i oko 1,2 miliona mejlova koji prikazuju vremenski pečat migracije.

Možete li ponovo pokrenuti imapsync da to popravite? Tehnički da, ali imapsync će preskočiti poruke koje već postoje na odredištu (dizajniran je da bude idempotent). Trebalo bi vam --delete2 da uklonite odredišne poruke i ponovo ih prenesete, što je rizično na produkcijskom sandučetu. A ako su izvorni datumi bili problem, drugo pokretanje ponovo kopira iste pogrešne datume.

Neki administratori pokušavaju hibridni pristup: prvo pokrenu imapsync sa --dry za test, pa onda pravu migraciju. Ali --dry samo simulira prenos: prikazuje datume koje bi imapsync preneo, a ne da li su to datumi kada su mejlovi zaista poslati. Ništa vas ne upozorava da su izvorni datumi već pogrešni.

Samostalne popravke i njihova ograničenja

Ako pretražujete forume i mailing liste (imapsync-devel lista na SourceForge-u je još uvek aktivna od početka 2026), naći ćete predloge koji se kreću od kreativnih do opasnih.

Neki ljudi predlažu korišćenje Perl jednolinjskog rešenja za modifikaciju INTERNALDATE na odredišnom serveru direktno. Drugi preporučuju izvoz svih poruka u mbox format, manipulaciju datumima i ponovni uvoz. Neki su napisali Python skripte koje koriste imaplib za preuzimanje, modifikaciju i ponovno umetanje poruka.

Svi ovi pristupi dele iste fundamentalne probleme. Kako obrađujete S/MIME potpisane poruke bez kvarenja potpisa? Šta sa višedelnim MIME strukturama sa ugnežđenim granicama? Ne-ASCII zaglavljima kodiranim sa RFC 2047? PGP enkriptovanim porukama gde ne možete ni da pregledate sadržaj? Skripta koja obradi 50 testnih poruka u razvojnom okruženju će se zaglaviti na graničnim slučajevima u produkcijskom sandučetu od 30.000 poruka.

I najveće pitanje koje niko ne postavlja dok nije prekasno: kako verifikujete da je svaka modifikovana poruka i dalje netaknuta? Da su prilozi netaknuti, da niti i dalje funkcionišu, da tabela od 85 MB koju je neko poslao mejlom 2020. preživela manipulaciju?

(Ako ste ikada pokušavali da parsirate sirova zaglavlja mejlova u Perl-u, znate da to nije baš opuštajuća aktivnost za popodne.)

Kako Redate.io ispravlja imapsync probleme sa datumima

Originalno Date: zaglavlje je uvek netaknuto nakon imapsync migracije. imapsync verno prenosi sirovu poruku; pogrešan datum se nalazi u metapodacima koje je kopija dobila, a ne u samoj poruci. To originalno zaglavlje je ono što čini korekciju mogućom.

Redate.io se direktno povezuje sa sandučetom (Google Workspace, Microsoft 365 ili bilo koji IMAP server), skenira mejlove sa anomalijama datuma i primenjuje ciljanu korekciju metapodataka kroz vlasnički pipeline za analizu lanca zaglavlja i rekonstrukciju datuma. Nije potrebno da zna koji je alat izvršio migraciju: pronalazi mejlove čiji prikazani datum ne odgovara njihovom originalnom datumu.

Svaki ispravljeni mejl se verifikuje pojedinačno: integritet poruke, očuvanje priloga, položaj u fascikli, niti, oznake. Originali se čuvaju u vidljivoj Redate.io - Originals rezervnoj fascikli, sve dok ih sami ne obrišete. Ako nešto izgleda pogrešno, vraćanje je na jedan klik.

Besplatno skeniranje se povezuje sa sandučetom, identifikuje svaki mejl sa anomalijom datuma i prijavljuje tačan broj i cenu. Bez kreditne kartice, bez softvera za instalaciju. Za specifičnosti vaše platforme:

Redate.io takođe radi na migracijama koje su se desile pre meseci ili godina. Date: zaglavlje ne ističe, i ni mogućnost da se ispravi ono što je pošlo naopako.

Migrirali ste sa imapsync-om i ostali sa pogrešnim datumima? Pokrenite besplatno skeniranje da vidite tačno koliko mejlova je pogođeno.

Povezani članci