imapsync: датите не се запазиха? Как да ги поправите

4 min

Обещанието на --syncinternaldates (и защо не се изпълнява)

Стартирахте командата imapsync. Включихте --syncinternaldates, защото прочетохте документацията и сте внимателни. Миграцията завърши, логът казва, че всичко е прехвърлено, нула грешки. След това отваряте пощенската кутия в Outlook и всеки имейл показва вчерашната дата.

Това е една от най-честите фрустрации с imapsync и обърква системните администратори поне от 2017 година. Флагът --syncinternaldates трябва да запазва IMAP INTERNALDATE по време на миграция. Технически опитва. Но "опитва" върши прекалено много работа в това изречение.

imapsync е инструмент с отворен код на Perl, написан от Gilles Lamiral, и наистина е добър в това, което прави. Но запазването на дати не зависи изцяло от imapsync, и тук нещата се усложняват.

Как всъщност работят IMAP датите

Има три различни "дати" във всеки имейл:

  • Заглавие Date: (RFC 2822) - датата, която имейл клиентът на подателя е поставил при създаването на съобщението.
  • Заглавия Received: - всеки пощенски сървър добавя едно със собственото си времево клеймо.
  • INTERNALDATE - сървърно времево клеймо на IMAP, контролиращо реда на сортиране на съобщенията.

Когато imapsync мигрира съобщение, чете го от сървъра-източник (включително INTERNALDATE) и го записва на целевия сървър чрез IMAP APPEND. Флагът --syncinternaldates казва на imapsync да предаде INTERNALDATE на източника.

Проблемът: целевият сървър не е задължен да приеме тази дата.

Защо целевите сървъри игнорират INTERNALDATE

IMAP спецификацията (RFC 3501) казва, че ако с командата APPEND е предоставена дата-час, сървърът ТРЯБВА да я използва. "SHOULD" на езика на RFC означава "правете това, освен ако нямате добра причина да не". Няколко големи имейл платформи решиха, че имат добра причина.

Microsoft 365 е най-големият нарушител. Exchange pipeline добавя ново Received заглавие с текущата дата, след което задава INTERNALDATE по това клеймо.

Google Workspace (Gmail) се държи различно, но също може да предизвика проблеми.

Чести грешки в командния ред на imapsync

Пропускане на --syncinternaldates изобщо

Флагът не е включен по подразбиране.

Използване на --syncinternaldates с --addheader

Добавянето на заглавия модифицира съобщението.

Объркване на --minage и --maxage със запазване на дати

Тези флагове филтрират съобщенията за миграция по възраст, не влияят на обработката на дати.

SSL забавяния, причиняващи дрифт на времеви клейма

При миграция през TLS забавянето на свързването се натрупва при големи миграции.

Четене на логове на imapsync

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

И двете дати съвпадат. imapsync докладва какво е поискал, не какво е приел сървърът.

Мащабни миграции с imapsync

Миграцията на единична пощенска кутия с imapsync е досадна, когато датите се развалят. Но MSP-та и ИТ отделите, стартиращи imapsync на стотици кутии, се сблъскват с напълно различен мащаб на проблема.

Ръчни поправки и техните граници

Всички подходи от форумите споделят едни и същи фундаментални проблеми: S/MIME, вложени MIME, RFC 2047, PGP. Скрипт, работещ на 50 тестови имейла, няма да издържи производствена кутия с 30 000 съобщения.

Как Redate.io поправя дати след imapsync

Оригиналното заглавие Date: винаги е непокътнато след миграция с imapsync. imapsync вярно прехвърля суровото съобщение; обработката на метаданни от целевия сървър причинява проблема с показването.

Redate.io се свързва директно с пощенската кутия (Google Workspace, Microsoft 365 или всякакъв IMAP сървър), сканира за имейли с аномалии в датите и прилага насочена корекция на метаданни чрез патентован двигател за анализ на верига заглавия и реконструкция на дати.

Всеки коригиран имейл преминава индивидуална верификация. Оригиналите се пазят във видима папка Redate.io - Originals за 30 дни.

Redate.io работи и за миграции, извършени преди месеци или години. Заглавието Date: не изтича.

Мигрирахте с imapsync и останахте с грешни дати? Стартирайте безплатно сканиране, за да видите колко имейла са засегнати.

Свързани статии