Чому imapsync популярний (і чому дати все одно ламаються)
imapsync - це еталонний інструмент міграції електронної пошти для системних адміністраторів Linux, хостинг-провайдерів та всіх, хто надає перевагу рішенням з відкритим вихідним кодом. Створений Жілем Ламіралем, imapsync активно підтримується з 2001 року і був використаний для мільйонів міграцій поштових скриньок по всьому світу. Він підтримує практично всі IMAP-сервери: Dovecot, Courier, Cyrus, Zimbra, Exchange, Gmail та десятки інших.
imapsync має репутацію повного та налаштовуваного інструмента. Адміністратори цінують його детальний контроль над теками для міграції, обробку дублікатів та відображення імен тек між різними IMAP-серверами. Але попри весь цей контроль, одна проблема залишається: дати листів часто не зберігаються після міграції imapsync. Користувачі відкривають свою поштову скриньку після міграції і виявляють, що кожний лист показує дату міграції. Це дратує, особливо тому, що imapsync начебто має правильно обробляти дати.
Як imapsync обробляє INTERNALDATE
Спроба збереження INTERNALDATE
imapsync дійсно намагається зберегти INTERNALDATE кожного листа під час міграції. INTERNALDATE - це часовий штамп, який IMAP-сервер зберігає як метадані для кожного повідомлення, окремо від заголовків листа. Коли imapsync копіює повідомлення з джерела на призначення, він зчитує INTERNALDATE сервера-джерела та передає його серверу призначення у команді IMAP APPEND.
Теоретично це має зберігати оригінальну дату. На практиці результат залежить від поведінки сервера призначення та від того, як поштові клієнти інтерпретують різні поля, пов'язані з датами, у повідомленні.
Проблема заголовка "Received"
Навіть коли imapsync успішно зберігає INTERNALDATE, поштовий сервер призначення додає новий заголовок "Received" до кожного повідомлення під час операції APPEND. Цей заголовок "Received" містить поточний часовий штамп - дату міграції. Поштові клієнти, такі як Outlook, Apple Mail та Thunderbird, визначають відображувану дату "отримання", зчитуючи найвищий заголовок "Received", а не INTERNALDATE. Тому попри зусилля imapsync зберегти INTERNALDATE, видима дата у більшості клієнтів все одно хибна.
Насправді саме це фундаментальне розходження спричиняє плутанину. imapsync зберігає одне значення дати (INTERNALDATE), але поштові клієнти відображають інше (часовий штамп заголовка "Received"). Для глибшого технічного занурення у цей механізм див. чому листи показують хибну дату після міграції IMAP.
Хибне уявлення з FAQ imapsync
Документація та FAQ imapsync розглядають проблему дат, але подають її як вроджене обмеження. FAQ припускає, що "дати можуть не зберегтися" під час міграції IMAP та натякає, що так просто працює протокол IMAP. Хоча це правда, що протокол IMAP вимагає від серверів додавати заголовки "Received" при вставці повідомлень, FAQ створює враження, що проблема є постійною та невиправною.
Це не так. Заголовки "Received", додані під час міграції, можна ідентифікувати та видалити постфактум, відновлюючи відображення оригінальної дати у поштових клієнтах. Оригінальний заголовок "Date" (який фіксує, коли лист був оригінально відправлений) завжди зберігається imapsync та слугує орієнтиром для правильної дати.
Ідентифікація заголовка міграції imapsync
Як виглядає заголовок
imapsync сам по собі не додає заголовок "Received" - це робить IMAP-сервер призначення. Заголовок, доданий під час міграції imapsync, зазвичай виглядає як стандартний заголовок вставки IMAP сервера призначення. Наприклад, при міграції на сервер Dovecot заголовок може виглядати так:
Received: from localhost by mail.example.com;
Wed, 15 Jan 2025 09:14:22 +0100
Ключовий ідентифікатор полягає у тому, що цей заголовок "Received" є найвищим у ланцюжку, його часовий штамп відповідає даті запуску міграції imapsync, і він зазвичай посилається на "localhost" або ім'я хоста сервера призначення, а не на зовнішній поштовий сервер.
Порівняння дат
Для підтвердження проблеми порівняйте часовий штамп найвищого заголовка "Received" із заголовком "Date" листа. Якщо заголовок "Received" вказує на січень 2025, а заголовок "Date" - на березень 2020, заголовок "Received" міграції є причиною хибного відображення дати. Це порівняння можна зробити, переглянувши необроблене джерело повідомлення у будь-якому поштовому клієнті.
Чому поширені опції imapsync не вирішують проблему
Прапорець --syncinternaldates
imapsync пропонує прапорець --syncinternaldates, який встановлює INTERNALDATE на сервері призначення відповідно до заголовка "Date" листа. Це корисно, коли INTERNALDATE сервера-джерела вже хибний, але це не запобігає додаванню заголовка "Received" сервером призначення. Видима дата в Outlook та інших клієнтах залишається датою міграції незалежно від значення INTERNALDATE.
Опція --addheader
imapsync може додавати користувацькі заголовки до повідомлень під час міграції, але не може завадити серверу призначення додавати власний заголовок "Received". Протокол IMAP вимагає від серверів фіксувати часовий штамп вставки, і жодна опція imapsync не може перевизначити цю поведінку на рівні сервера.
Скрипти після міграції
Деякі адміністратори пишуть власні скрипти після міграції для видалення небажаних заголовків "Received". Це здається розумним, особливо для типу людей, які обрали imapsync (людей, що комфортно працюють з командним рядком). Але реальність значно складніша за пошук-і-заміну в тексті заголовків. Що відбувається, коли скрипт натрапляє на лист з підписом S/MIME? Або повідомлення multipart з вкладеними межами MIME та вкладеннями у кодуванні base64? Або заголовок з символами non-ASCII у кодуванні RFC 2047? Один неправильний байт у межі MIME може непомітно пошкодити все повідомлення, знищивши вкладення або зробивши лист нечитабельним. А як підтвердити, що 10 000 виправлених листів усі залишились цілими? Для тисяч листів на кількох скриньках саморобний скрипт становить суттєвий ризик.
Виправлення дат imapsync з Redate.io
Як Redate.io обробляє міграції imapsync
Пропрієтарний рушій корекції Redate.io спеціально розроблено для цієї категорії проблем. Після підключення до поштової скриньки Redate.io аналізує кожний лист та пропускає кожне повідомлення через багатоступеневий процес аналізу. Для міграцій imapsync Redate.io виявляє заголовок "Received", вставлений сервером, застосовуючи зіставлення сигнатур з сотнями відомих профілів міграції, аналізуючи повний ланцюжок заголовків та порівнюючи часові штампи з оригінальним заголовком "Date".
Це не просте редагування заголовків. Рушій корекції обробляє перевірку відповідності RFC, збереження структури повідомлення (включаючи структури multipart/alternative, вбудовані вкладення та варіації Content-Transfer-Encoding) та виявлення цифрових підписів. Листи з підписами S/MIME або PGP автоматично ідентифікуються та обробляються належним чином для збереження цілісності підписів.
Що Ви отримуєте після виправлення
Кожний виправлений лист відображає свою оригінальну дату отримання у всіх поштових клієнтах. Хронологічний порядок відновлено. Кожне виправлення проходить перевірку цілісності перед завершенням. Оригінальне повідомлення переміщується до теки "Redate.io - Originals" та зберігається протягом 30 днів як запобіжна сітка.
Сумісність з усіма серверами призначення
Оскільки imapsync використовується для міграції практично на будь-який IMAP-сервер, Redate.io підтримує такий самий спектр платформ призначення. Незалежно від того, чи міграція imapsync була спрямована на Dovecot, Courier, Cyrus, Zimbra, Google Workspace, Microsoft 365 або будь-який інший IMAP-сервер, Redate.io підключається та виправляє дати.
Як виправити дати після міграції imapsync
Підключити поштову скриньку
Увійдіть до Redate.io та додайте поштову скриньку. Для Google Workspace або Microsoft 365 використовуйте опцію делегування адміністратора. Для інших IMAP-серверів (типових для сценаріїв imapsync) введіть адресу сервера, ім'я користувача та пароль. Redate.io підключається через стандартний IMAP.
Безкоштовний аналіз
Запустіть безкоштовний аналіз для виявлення уражених листів. Звіт аналізу показує загальну кількість листів, скільки мають хибну дату та яку дату міграції виявлено. Цей аналіз безкоштовний та дає чітку картину до будь-яких зобов'язань.
Виправити та перевірити
Оберіть тарифний план відповідно до кількості уражених листів та запустіть виправлення. Прогрес видно у реальному часі. Після завершення перевірте результати, переглянувши дати листів у Вашому клієнті. Дати мають повернутися на свої місця.
Посібники з виправлення imapsync за платформами
Поширені запитання
Чи потрібно використовувати --syncinternaldates imapsync перед Redate.io?
Це не потрібно. Redate.io встановлює правильний INTERNALDATE під час процесу виправлення, незалежно від поточного значення. Чи зберіг imapsync оригінальний INTERNALDATE чи ні, Redate.io визначає правильне значення з оригінального заголовка "Date".
Чи можна виправити дати на сервері-джерелі перед міграцією imapsync?
Якщо сервер-джерело вже має хибні дати (внаслідок попередньої міграції), Redate.io може виправити їх до або після міграції imapsync. Але виправлення дат на сервері призначення після міграції є найбільш поширеним та практичним підходом.
Скільки листів може обробити Redate.io?
Redate.io обробляє поштові скриньки будь-якого розміру. Тарифні плани доступні для до 100 000 листів на скриньку. Для організацій з багатьма скриньками Redate.io пропонує тарифи за обсягом.
Міграція imapsync зламала дати? Запустіть безкоштовний аналіз, щоб побачити, скільки листів уражено, та виправте їх з Redate.io.