--syncinternaldates의 약속 (그리고 그 약속이 멈추는 곳)
imapsync 명령을 실행했어요. 문서를 읽고 신중하게 --syncinternaldates를 포함했어요. 마이그레이션이 완료되고, 로그에는 모두 전송됨, 오류 0이라고 나와요. 그런데 Outlook에서 메일함을 열면 모든 이메일이 어제 날짜를 표시하고 있어요.
이것은 imapsync에서 가장 흔한 불만 중 하나이며, 최소 2017년부터 시스템 관리자들을 혼란스럽게 해왔어요. --syncinternaldates 플래그는 마이그레이션 중 IMAP INTERNALDATE를 보존하도록 되어 있어요. 그리고 실제로 그렇게 해요: 각 사본에 소스 서버가 가지고 있는 내부 날짜를 그대로 부여해요. 함정은 바로 거기에 있어요.
imapsync는 Gilles Lamiral이 작성한 오픈소스 Perl 도구이며, 그 기능에서 정말 뛰어나요. 대부분의 상용 도구가 부러워할 수준의 신뢰성으로 IMAP 간 메일함 전송을 처리해요. 하지만 imapsync는 자신이 찾은 날짜만 복사할 수 있고, 여기서 상황이 복잡해져요.
IMAP 날짜가 실제로 작동하는 방식
모든 이메일에는 세 가지 다른 "날짜"가 관여하며, 대부분의 사람들(일부 IT 관리자 포함)이 이를 혼동해요:
- Date: 헤더 (RFC 2822) - 발신자의 이메일 클라이언트가 메시지를 작성할 때 찍은 날짜예요. 메시지 본문 안에 존재하며 메일 서버가 절대 수정하지 않아요.
- Received: 헤더 - 메시지를 처리하는 각 메일 서버가 자체 타임스탬프와 함께 추가해요. 발신자에서 수신자까지의 체인을 형성해요. 가장 최신 Received 헤더가 일부 이메일 클라이언트가 표시에 사용하는 것이에요.
- INTERNALDATE - 메일함에서 메시지 정렬 순서를 제어하는 IMAP 서버 측 타임스탬프예요. IMAP APPEND로 메시지가 처음 저장될 때 설정돼요.
imapsync가 메시지를 마이그레이션할 때, 소스 서버에서 (INTERNALDATE 포함) 읽어서 IMAP APPEND를 사용해 대상 서버에 써요. --syncinternaldates 플래그는 APPEND 중 소스 INTERNALDATE를 대상 서버에 전달하도록 imapsync에 지시해요.
좋은 소식이 있어요: Microsoft 365, Outlook.com, Gmail은 전달받은 날짜를 그대로 유지해요. 그러니 날짜가 잘못 나온다면 문제는 다른 곳에 있어요.
날짜가 여전히 잘못될 수 있는 이유
다른 IMAP 서버들도 APPEND의 날짜를 마찬가지로 존중해요. 그러니 대상이 무엇이든 질문은 같아요: 소스가 어떤 날짜를 가지고 있었는가예요. Microsoft 365, Outlook.com, Gmail은 그래요: 원래 날짜를 담은 사본은 그 날짜를 그대로 유지해요.
다만 imapsync가 전달하는 것은 각 메시지에 대해 소스 서버가 가지고 있는 날짜이며, 이메일이 실제로 발송된 날짜가 아니에요. 정상적인 메일함에서는 둘이 일치해요. 이미 한 번 마이그레이션되었거나 백업에서 복원된 메일함에서는, 소스가 그 이전 작업의 날짜를 이미 가지고 있을 수 있고, imapsync는 그것을 그대로 복사해요.
Gmail이 예외가 되는 경우는 복사가 IMAP이 아니라 Gmail 자체의 가져오기 API를 통할 때뿐이에요: 그 API는 복사한 날의 Received: 줄을 추가하고, Outlook은 그 날짜를 표시할 수 있어요. imapsync는 IMAP을 사용하므로 이 영향을 받지 않아요.
소스 날짜를 넘어, 흔한 imapsync 명령줄 실수와 잘못된 탓
이미 날짜가 잘못된 소스에서 복사하기
--syncinternaldates는 기본적으로 켜져 있어요: imapsync는 각 사본에 소스 서버가 가지고 있는 내부 날짜를 그대로 부여해요(공식 문서: "host2의 내부 날짜를 host1과 동일하게 설정합니다"). 소스 메일함이 이전 마이그레이션이나 복원의 결과라면 내부 날짜가 이미 그 작업 당시의 날짜일 수 있고, imapsync는 그 잘못된 날짜를 충실하게 복사해요. 이것이 가장 흔한 원인이며, 로그에 동일한 날짜 두 개가 나타나기 때문에 가장 놓치기 쉬워요.
--syncinternaldates와 --addheader 함께 사용
일부 가이드에서 마이그레이션 중 사용자 정의 헤더를 삽입하기 위해 --addheader 사용을 권장해요. 헤더를 추가하면 메시지가 수정되지만(맨 위에 줄 하나가 추가될 뿐) imapsync가 전달하는 날짜는 바뀌지 않으므로, 잘못된 날짜의 원인이 되지는 않아요. 다만 사본이 원본과 더 이상 완전히 동일하지 않게 되며, 둘을 비교할 때는 이 점이 중요해요.
--minage와 --maxage를 날짜 보존과 혼동
--minage와 --maxage 플래그는 나이에 따라 마이그레이션할 메시지를 필터링해요. 대상에서의 날짜 처리에는 영향을 주지 않아요.
TLS를 날짜 밀림의 탓으로 돌리기
TLS(--ssl1, --ssl2)를 통할 때는 연결 설정에 지연이 추가되고, 대규모 마이그레이션(50,000통 이상)에서는 이 지연이 누적되어 몇 시간에 이를 수 있어요. 하지만 날짜에는 영향이 없어요: 실제로 도착하는 시각이 무엇이든, 각 사본은 imapsync가 전달한 날짜를 그대로 가져요.
imapsync 로그 읽기: 출력이 실제로 말하는 것
imapsync는 상세한 로그를 생성하는데, 날짜에 관해서는 로그 출력이 오해를 불러일으킬 수 있어요.
msg source stratemind/42 {5765} D:2019-01-15 13:22:07 -> dest stratemind/42 {5765} D:2019-01-15 13:22:07
양쪽 날짜가 일치해요. 반환된 날짜가 이메일이 실제로 발송된 날짜와 다르다면, 소스 쪽의 같은 메시지를 확인해 보세요: 거기에도 같은 잘못된 날짜가 있을 거예요. 로그는 거짓말을 한 게 아니라, 받은 것을 그대로 복사했을 뿐이에요. 그리고 Microsoft 365, Outlook.com, Gmail은 모두 전달받은 날짜를 그대로 유지해요. 하지만 두 날짜가 같다는 것은 사본이 소스에 충실하다는 것만 증명해요: 소스 날짜가 이미 잘못되었다면 양쪽에 같은 잘못된 날짜가 나타나요. 이것이 날짜 문제를 디버깅할 때 가장 답답한 부분 중 하나예요: 로그는 깨끗하고 양쪽 날짜가 같은데도, Outlook에는 여전히 잘못된 날짜가 나와요. 오류는 imapsync가 실행되기 전부터 이미 있었기 때문이에요.
대규모 imapsync 마이그레이션: 날짜 문제가 증폭되는 곳
imapsync를 다시 실행하면 고칠 수 있는지 궁금할 수 있지만, 소스 날짜가 문제였다면 다시 실행해도 같은 잘못된 날짜가 복사되며 dry 옵션도 전송을 시뮬레이션할 뿐 소스 날짜가 이미 잘못되었다는 것은 알려주지 않아요.
자체 수정과 그 한계
포럼과 메일링 리스트(SourceForge의 imapsync-devel 리스트는 2026년 초 기준 아직 활발해요)를 검색하면 창의적인 것부터 위험한 것까지 다양한 제안을 찾을 수 있어요.
대상 서버에서 직접 INTERNALDATE를 수정하기 위한 Perl 한 줄짜리를 제안하는 사람도 있어요. 모든 메시지를 mbox 형식으로 내보내 날짜를 조작하고 다시 가져오기를 권장하는 사람도 있어요. imaplib를 사용해 메시지를 가져와서 수정하고 다시 삽입하는 Python 스크립트를 작성한 사람도 있어요.
이러한 접근 방식은 모두 같은 근본적인 문제를 공유해요. S/MIME 서명된 메시지를 서명을 깨뜨리지 않고 어떻게 처리하나요? 중첩된 경계가 있는 멀티파트 MIME 구조는요? RFC 2047로 인코딩된 비ASCII 헤더는요?
Redate.io가 imapsync 날짜 문제를 수정하는 방법
원본 Date: 헤더는 imapsync 마이그레이션 후에도 항상 그대로 남아있어요. imapsync는 원시 메시지를 충실히 전송해요. 잘못된 날짜는 사본이 받은 메타데이터에 있는 것이지, 메시지 자체에 있는 것이 아니에요. 그 원본 헤더가 수정을 가능하게 만들어요.
Redate.io는 메일함(Google Workspace, Microsoft 365 또는 모든 IMAP 서버)에 직접 연결하여 날짜 이상이 있는 이메일을 스캔하고, 어떤 도구가 마이그레이션을 했는지 알 필요 없이, 표시된 날짜가 원래 날짜와 일치하지 않는 이메일을 찾아내요.
수정된 각 이메일은 개별적으로 검증돼요: 메시지 무결성, 첨부파일 보존, 폴더 배치, 스레드, 라벨. 원본은 보이는 Redate.io - Originals 백업 폴더에 보관되며, 직접 삭제하기 전까지 사라지지 않아요.
- Outlook에서 imapsync 날짜 수정
- Gmail에서 imapsync 날짜 수정
- Microsoft 365에서 imapsync 날짜 수정
- Google Workspace에서 imapsync 날짜 수정
Redate.io는 몇 달 전이나 몇 년 전에 수행된 마이그레이션에도 작동해요. Date: 헤더는 만료되지 않으며, 잘못된 것을 수정하는 능력도 마찬가지예요.
imapsync로 마이그레이션하고 잘못된 날짜가 남았나요? 무료 스캔을 실행하여 영향받은 이메일 수를 정확히 확인하세요.