IMAP INTERNALDATE: Γιατί χαλάνε οι ημερομηνίες

8 min

Οι τρεις ημερομηνίες μέσα σε κάθε email

Κάθε email που αποθηκεύεται σε server IMAP φέρει τουλάχιστον τρεις διαφορετικές τιμές ημερομηνίας. Η κατανόηση του τρόπου λειτουργίας αυτών των ημερομηνιών, και του τρόπου με τον οποίο οι πελάτες email επιλέγουν ποια θα εμφανίσουν, είναι το κλειδί για να κατανοήσετε γιατί η μεταφορά χαλάει τις ημερομηνίες. Αυτό το άρθρο αποτελεί μια τεχνική ανάλυση του συστήματος ημερομηνιών του IMAP, απευθυνόμενη σε διαχειριστές IT και σε όποιον θέλει να κατανοήσει τη βασική αιτία των προβλημάτων ημερομηνίας μετά τη μεταφορά.

1. Η κεφαλίδα "Date" του RFC 2822

Η κεφαλίδα "Date" ορίζεται στο RFC 2822 (Internet Message Format). Ορίζεται από τον πελάτη email του αποστολέα τη στιγμή που συντάσσεται και αποστέλλεται το μήνυμα. Αυτή η κεφαλίδα αποτελεί μέρος του ίδιου του σώματος του μηνύματος email, ταξιδεύει μαζί με το μήνυμα και δεν τροποποιείται ποτέ από τους mail server κατά τη διαδρομή παράδοσης. Μια τυπική κεφαλίδα Date έχει την εξής μορφή:

Date: Mon, 15 Jan 2024 09:32:17 +0100

Η κεφαλίδα Date αντιπροσωπεύει την "ημερομηνία αποστολής" του μηνύματος. Είναι η πιο αξιόπιστη ημερομηνία επειδή ορίζεται μία φορά και δεν αλλάζει ποτέ. Ωστόσο, αντικατοπτρίζει το ρολόι του αποστολέα, το οποίο μπορεί να είναι λανθασμένα ρυθμισμένο. Σε σπάνιες περιπτώσεις, η κεφαλίδα Date μπορεί να απουσιάζει εντελώς (ιδίως σε αυτοματοποιημένες ειδοποιήσεις συστήματος ή σε κακοσχηματισμένα μηνύματα).

2. Το IMAP INTERNALDATE

Το INTERNALDATE ορίζεται στο RFC 3501 (πρωτόκολλο IMAP4rev1). Είναι μια τιμή μεταδεδομένων στην πλευρά του server που αντιπροσωπεύει την ημερομηνία και ώρα κατά την οποία το μήνυμα παραδόθηκε στον server. Σε αντίθεση με την κεφαλίδα Date, το INTERNALDATE δεν αποτελεί μέρος του ίδιου του email. Αποθηκεύεται ξεχωριστά από τον server IMAP ως μεταδεδομένα.

Όταν ένα email παραδίδεται κανονικά (χωρίς μεταφορά), ο server IMAP ορίζει το INTERNALDATE στην τρέχουσα ώρα τη στιγμή της παράδοσης. Αυτό συμπίπτει σχεδόν πάντα με την κεφαλίδα Date, συνήθως με απόκλιση δευτερολέπτων ή λεπτών. Οι πελάτες email συχνά χρησιμοποιούν το INTERNALDATE ως "ημερομηνία λήψης" επειδή αντικατοπτρίζει τη στιγμή που ο server πράγματι έλαβε το μήνυμα.

Εδώ γίνεται ενδιαφέρον. Όταν ένα μήνυμα εισάγεται μέσω της εντολής IMAP APPEND (αυτή που χρησιμοποιούν τα εργαλεία μεταφοράς), η εντολή APPEND επιτρέπει στον πελάτη να ορίσει ρητά το INTERNALDATE. Τα καλά σχεδιασμένα εργαλεία μεταφοράς χρησιμοποιούν αυτή τη δυνατότητα για να διατηρήσουν το αρχικό INTERNALDATE από τον server προέλευσης. Ωστόσο, ακόμα και όταν το INTERNALDATE έχει οριστεί σωστά, το πρόβλημα της κεφαλίδας "Received" (που περιγράφεται παρακάτω) μπορεί και πάλι να υπερισχύσει της εμφανιζόμενης ημερομηνίας σε πολλούς πελάτες email.

3. Η αλυσίδα κεφαλίδων "Received"

Κάθε φορά που ένα email διαπερνά έναν mail server, αυτός ο server προσθέτει μπροστά μια κεφαλίδα "Received" στο μήνυμα. Έτσι δημιουργείται μια αλυσίδα κεφαλίδων Received που καταγράφει τη διαδρομή που ακολούθησε το email από τον αποστολέα ως τον παραλήπτη. Η πιο πρόσφατη (ανώτερη) κεφαλίδα Received δείχνει τον τελευταίο server που επεξεργάστηκε το μήνυμα, ενώ η παλαιότερη (κατώτερη) δείχνει τον πρώτο.

Ένα κανονικό email μπορεί να έχει από 3 έως 6 κεφαλίδες Received, που καταγράφουν τη διαδρομή από τον εξωτερικό server του αποστολέα, μέσω τυχόν server αναμετάδοσης, έως τον εισερχόμενο server του παραλήπτη. Κάθε κεφαλίδα Received περιλαμβάνει μια χρονοσήμανση. Ακολουθεί ένα απλοποιημένο παράδειγμα:

Received: from mx.recipient.com; Mon, 15 Jan 2024 09:32:22 +0000
Received: from relay.sender.com; Mon, 15 Jan 2024 09:32:20 +0000
Received: from smtp.sender.com; Mon, 15 Jan 2024 09:32:18 +0000
Date: Mon, 15 Jan 2024 09:32:17 +0100

Πώς οι πελάτες email επιλέγουν ποια ημερομηνία θα εμφανίσουν

Outlook (Desktop, Web, Mobile)

Το Microsoft Outlook χρησιμοποιεί συνδυασμό του INTERNALDATE και της ανώτερης κεφαλίδας "Received" για να καθορίσει την ημερομηνία "Λήψης" που εμφανίζεται στα εισερχόμενα. Στην πράξη, το Outlook τείνει να δίνει προτεραιότητα στη χρονοσήμανση της πιο πρόσφατης κεφαλίδας Received για τη στήλη "Λήψη". Η στήλη "Αποστολή" χρησιμοποιεί την κεφαλίδα Date. Καθώς το Outlook ταξινομεί εξ ορισμού βάσει της στήλης "Λήψη", η χρονοσήμανση της κεφαλίδας Received είναι αυτό που βλέπουν πρώτα οι χρήστες.

Apple Mail

Το Apple Mail σε macOS και iOS χρησιμοποιεί κυρίως το IMAP INTERNALDATE για την εμφάνιση ημερομηνιών. Εάν το INTERNALDATE διατηρήθηκε σωστά κατά τη μεταφορά, το Apple Mail μπορεί να εμφανίσει τη σωστή ημερομηνία, αλλά μόνο εάν το INTERNALDATE ορίστηκε ρητά κατά τη λειτουργία APPEND. Εάν το εργαλείο μεταφοράς δεν όρισε το INTERNALDATE, ο server χρησιμοποιεί εξ ορισμού τη στιγμή εισαγωγής (την ημερομηνία μεταφοράς). Για λεπτομέρειες σχετικά με τον τρόπο που αυτό επηρεάζει τους χρήστες του Apple Mail, δείτε λανθασμένη ημερομηνία στο Apple Mail μετά τη μεταφορά.

Thunderbird

Το Mozilla Thunderbird προσφέρει τη μεγαλύτερη ευελιξία. Μπορεί να εμφανίσει τόσο το "Date" (από την κεφαλίδα Date) όσο και το "Received" (από τις κεφαλίδες Received). Εξ ορισμού, το Thunderbird εμφανίζει την τιμή της κεφαλίδας Date, πράγμα που σημαίνει ότι οι ημερομηνίες μπορεί να φαίνονται σωστές στο Thunderbird ακόμη και όταν είναι λάθος στο Outlook. Η στήλη "Λήψη" στο Thunderbird, όμως, εξακολουθεί να δείχνει την ημερομηνία μεταφοράς. Δείτε λανθασμένη ημερομηνία στο Thunderbird μετά τη μεταφορά για περισσότερες λεπτομέρειες.

Διεπαφή web του Gmail

Ο web πελάτης του Gmail χρησιμοποιεί την κεφαλίδα Date για την κύρια εμφάνιση ημερομηνίας. Αυτό σημαίνει ότι το Gmail web συχνά εμφανίζει σωστές ημερομηνίες ακόμη και μετά τη μεταφορά. Ωστόσο, το IMAP INTERNALDATE στον server του Gmail παραμένει λάθος, πράγμα που επηρεάζει κάθε πελάτη IMAP που συνδέεται σε αυτόν τον λογαριασμό Gmail. Η απόκλιση ανάμεσα στο Gmail web και το Outlook ή το Apple Mail είναι μια συνηθισμένη πηγή σύγχυσης, που σπαταλά πολύ χρόνο των διαχειριστών σε αντιμετώπιση προβλημάτων.

Γιατί το IMAP APPEND χαλάει τις ημερομηνίες

Τι συμβαίνει κατά τη μεταφορά

Όταν ένα εργαλείο μεταφοράς μετακινεί ένα email από τον Server A στον Server B, το εργαλείο συνδέεται στον Server A μέσω IMAP και κατεβάζει το ανεπεξέργαστο μήνυμα, στη συνέχεια συνδέεται στον Server B και χρησιμοποιεί την εντολή APPEND για να το εισάγει. Κατά την εισαγωγή, ο Server B επεξεργάζεται το εισερχόμενο μήνυμα και προσθέτει μια νέα κεφαλίδα Received με την τρέχουσα χρονοσήμανση, δηλαδή την ημερομηνία μεταφοράς. Πολλοί server IMAP ακολουθούν αυτή τη συνήθη πρακτική, αν και το πρωτόκολλο δεν την επιβάλλει ρητά. Ο server αντιμετωπίζει κάθε APPEND ως νέα παράδοση μηνύματος.

Το αποτέλεσμα: μια μολυσμένη αλυσίδα κεφαλίδων

Μετά τη μεταφορά, οι κεφαλίδες Received του email μοιάζουν έτσι:

Received: from migration-tool; Fri, 11 Apr 2025 14:22:08 +0000
Received: from mx.recipient.com; Mon, 15 Jan 2024 09:32:22 +0000
Received: from relay.sender.com; Mon, 15 Jan 2024 09:32:20 +0000
Date: Mon, 15 Jan 2024 09:32:17 +0100

Η κεφαλίδα Received του εργαλείου μεταφοράς είναι πλέον η ανώτερη καταχώρηση. Κάθε πελάτης email που χρησιμοποιεί την ανώτερη κεφαλίδα Received για να καθορίσει την εμφανιζόμενη ημερομηνία (ιδίως το Outlook) θα εμφανίσει "11 Απριλίου 2025" αντί για "15 Ιανουαρίου 2024". Η αρχική κεφαλίδα Date και οι αρχικές κεφαλίδες Received παραμένουν ανέπαφες από κάτω, αλλά δεν βρίσκονται πλέον στη θέση που δίνουν προτεραιότητα οι πελάτες email.

Ούτε η καλή διαχείριση του INTERNALDATE το αποτρέπει

Ορισμένα εργαλεία μεταφοράς ορίζουν σωστά το INTERNALDATE κατά το APPEND. Για παράδειγμα, το imapsync διατηρεί ρητά το INTERNALDATE του server προέλευσης. Ωστόσο, η κεφαλίδα Received προστίθεται από τον server προορισμού, όχι από το εργαλείο μεταφοράς. Το εργαλείο μεταφοράς δεν έχει κανέναν έλεγχο σε αυτή τη συμπεριφορά. Ακόμη και με τέλεια διατήρηση του INTERNALDATE, η ανώτερη κεφαλίδα Received εξακολουθεί να περιέχει την ημερομηνία μεταφοράς, και πελάτες όπως το Outlook εξακολουθούν να εμφανίζουν τη λάθος ημερομηνία.

Τι μπορείτε λοιπόν να κάνετε πραγματικά για αυτό;

Ποια εργαλεία μεταφοράς προσθέτουν κεφαλίδες Received

Κάθε εργαλείο μεταφοράς IMAP προκαλεί αυτό το πρόβλημα, επειδή η κεφαλίδα Received προστίθεται από τον server προορισμού, όχι από το ίδιο το εργαλείο μεταφοράς. Το περιεχόμενο της προστιθέμενης κεφαλίδας διαφέρει ωστόσο ανάλογα με το εργαλείο και τον server.

Το BitTitan MigrationWiz προσθέτει μια κεφαλίδα Received που περιέχει "mx.migrationwiz.com". Το CloudM Migrate προσθέτει κεφαλίδες που αναφέρονται στο "cloudm.io". Το imapsync προκαλεί μια γενική κεφαλίδα Received από τον server προορισμού. Το GSMMO προσθέτει κεφαλίδες με αναφορές στο "gmailapi.google.com".

Η λύση: επαναφορά των σωστών ημερομηνιών

Τα καλά νέα είναι ότι η σωστή πληροφορία ημερομηνίας εξακολουθεί να υπάρχει μέσα σε κάθε email. Η αρχική κεφαλίδα Date είναι ανέπαφη. Οι αρχικές κεφαλίδες Received είναι ανέπαφες. Το πρόβλημα είναι ότι μια μολυσματική κεφαλίδα βρίσκεται από πάνω τους.

Η ιδιόκτητη μηχανή διόρθωσης του Redate.io αναλύει την πλήρη αλυσίδα κεφαλίδων κάθε επηρεαζόμενου email, εντοπίζοντας ανωμαλίες ημερομηνιών για να προσδιορίσει ακριβώς ποιες κεφαλίδες χρειάζονται διόρθωση, χωρίς να εξαρτάται από το συγκεκριμένο εργαλείο μεταφοράς που χρησιμοποιήθηκε. Το pipeline ανάλυσης πολλαπλών σταδίων διαχειρίζεται ειδικές περιπτώσεις που μπερδεύουν απλούστερες προσεγγίσεις: μηνύματα υπογεγραμμένα με S/MIME, περιεχόμενο κρυπτογραφημένο με PGP, δομές multipart/alternative, ζητήματα Content-Transfer-Encoding, κεφαλίδες μη-ASCII (RFC 2047), υπερμεγέθη συνημμένα και κατεστραμμένα MIME boundaries.

Μετά τη διόρθωση, κάθε email περνάει από μια διαδικασία επαλήθευσης ακεραιότητας για να επιβεβαιωθεί ότι η δομή του μηνύματος, το περιεχόμενο και τα συνημμένα διατηρούνται ακριβώς όπως ήταν. Τα πρωτότυπα μετακινούνται σε έναν ορατό φάκελο αντιγράφων ασφαλείας μέσα στο γραμματοκιβώτιο και παραμένουν εκεί έως ότου ο πελάτης τα αφαιρέσει.

Θα μπορούσατε να γράψετε ένα δικό σας script για να το επιχειρήσετε; Τεχνικά, ναι. Όμως η διαφορά ανάμεσα σε "λειτουργεί στο 95% των email" και "λειτουργεί στο 100% των email χωρίς να καταστρέψει ούτε ένα" είναι εκεί που επενδύονται μήνες μηχανικής ανάπτυξης. Και όταν μιλάμε για ολόκληρο το γραμματοκιβώτιο κάποιου, αυτό το ποσοστό αποτυχίας 5% σημαίνει εκατοντάδες μηνύματα που καταστράφηκαν σιωπηλά, χωρίς κανέναν τρόπο επαλήθευσης του τι πήγε στραβά.

Θέλετε να δείτε πόσα email στο γραμματοκιβώτιό σας έχουν λάθος ημερομηνίες; Εκτελέστε μια δωρεάν ανάλυση με το Redate.io για να λάβετε άμεση καταμέτρηση των επηρεαζόμενων email, χωρίς να απαιτείται πληρωμή.

Σχετικά άρθρα