imapsync datumi nisu sačuvani? Kako ih ispraviti

8 min

Obećanje --syncinternaldates (i zašto ne radi)

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 tehnički, pokušava. Ali "pokušava" nosi mnogo tereta u toj rečenici.

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 očuvanje datuma nije u potpunosti u rukama imapsync-a, 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.

Problem je u sledećem: odredišni server nije obavezan da poštuje taj datum.

Zašto odredišni serveri ignorišu INTERNALDATE

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." Nekoliko velikih mejl platformi je odlučilo da imaju dobar razlog.

Microsoft 365 je najveći krivac. Kada poruka stigne preko IMAP APPEND, Exchange transportni pipeline je pečatira novim Received zaglavljem sa trenutnim datumom, zatim postavlja INTERNALDATE na osnovu tog vremenskog pečata isporuke. Nije bitno koji datum je imapsync tražio. M365 server ga prepisuje.

Google Workspace (Gmail) se ponaša drugačije ali i dalje može izazvati probleme. Gmail-ova IMAP implementacija u većini slučajeva poštuje INTERNALDATE iz APPEND, ali dodaje sopstveno Received zaglavlje. Ako mejl klijent koji čita sanduče daje prednost Received zaglavljima nad INTERNALDATE za prikaz (a Outlook to tačno radi), datumi i dalje izgledaju pogrešno.

Dovecot i Cyrus, dva najčešća IMAP servera otvorenog koda, generalno poštuju INTERNALDATE iz APPEND. Dakle, imapsync migracije između dva Dovecot servera obično ispravno čuvaju datume. Problemi počinju kada je odredište hostovana platforma sa sopstvenom transportnom obradom.

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

Čak i kada bi odredišni server sarađivao, administratori često pogreše sa imapsync opcijama komandne linije. Evo grešaka koje najčešće viđam:

Zaboravljanje --syncinternaldates u potpunosti

Zastavica nije omogućena podrazumevano. Ako pokrenete osnovni imapsync --host1 izvor --host2 odredište --user1 korisnik --user2 korisnik bez nje, imapsync uopšte ne pokušava da sačuva datume. Odredišni server koristi trenutni vremenski pečat za svaku poruku. Ovo je najčešći uzrok i najlakše se previdi jer imapsync vas ne upozorava.

Korišćenje --syncinternaldates sa --addheader

Neki vodiči preporučuju korišćenje --addheader za ubacivanje prilagođenog zaglavlja tokom migracije. Ako dodajete zaglavlja, modifikujete poruku, što može navesti odredišni server da je tretira kao "novu" poruku i da je odgovarajuće pečatira. Interakcija između ove dve zastavice je loše dokumentovana.

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.

SSL pregovori koji uzrokuju pomeranje vremenskog pečata

Prilikom migracije preko TLS sa --ssl1 i --ssl2, uspostavljanje konekcije dodaje kašnjenje. U velikim migracijama (50.000+ poruka), ovo kašnjenje se akumulira. Iako ne menja datume za dane, može dovesti do toga da poruke poslate u razmaku od minuta stignu sa identičnim vremenskim pečatima na odredište, gubeći relativni redosled.

Č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. To znači da je imapsync poslao ispravan INTERNALDATE odredištu. Ali to ne znači da je odredišni server zaista sačuvao taj datum. imapsync prijavljuje ono što je tražio, ne ono što je server prihvatio.

Ž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 je datum migracije umesto 2019-01-15, odredišni server je ignorisao zahtev imapsync-a. Log vam je lagao (pa, rekao vam je šta je tražio, ne šta je dobio).

Ovaj jaz između onoga što imapsync prijavljuje i onoga što se zaista dešava je jedan od najfrustrirajućih aspekata debagovanja problema sa datumima. Možete zuriti u čist log fajl satima i nikada ne shvatiti da su datumi pogrešni na drugoj strani.

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 sa --syncinternaldates ako ste ga prvi put zaboravili? 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. I čak i tada, ako odredišni server ignoriše INTERNALDATE, vraćate se na početak.

Neki administratori pokušavaju hibridni pristup: prvo pokrenu imapsync sa --dry za test, pa onda pravu migraciju. Ali --dry ne testira šta odredišni server radi sa INTERNALDATE. Samo simulira prenos. Problem sa datumima je nevidljiv dok se poruke zaista ne upišu na odredište.

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 prilozi nisu oštećeni, 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; to obrada metapodataka odredišnog servera uzrokuje problem prikaza. 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. Korekcija obrađuje specifične obrasce koje imapsync migracije ostavljaju iza sebe, uključujući karakteristične potpise Received zaglavlja od odredišnih servera koji su prepisali INTERNALDATE.

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 30 dana. 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.

Повезани чланци