Я использую два разных почтовых сервера, используя Postfix и Dovecot. Некоторые из моих пользователей имеют учетные записи на обоих серверах и иногда передают электронные письма с одного на другой через свой почтовый клиент. Когда они это сделают, электронное письмо появляется на новом сервере с отметкой времени, когда оно было передано, вместо исходного времени.
Я предполагаю, что это связано с тем, что электронное письмо возвращается в очередь Postfix, как будто это новое сообщение. Есть ли способ сохранить исходную метку времени?
Это использует IMAP, и электронные письма хранятся в формате Maildir на обоих серверах.
Вот сценарий Perl, который устанавливает дату файла равной значению в строке Date: заголовка сообщения. http://www.athensfbc.com/public/fix_msg_dates
Использование: fix_msg_dates.pl <путь к каталогу сообщений>
-Рик
Вы используете хранилище Maildir с IMAP? Если это так, должно быть возможно просто переместить сообщения в новые папки. Также должна быть возможность использовать почтовый клиент для копирования между двумя папками IMAP.
Важно, чтобы сообщения имели заголовок Date, так как это обычно предпочтительная дата. Некоторые клиенты предпочтут вместо этого дату доставки. Если ничего не помогает, они могут использовать дату появления сообщения в папке. Пока сообщения имеют заголовок Date, даты должны оставаться прежними.
Электронная почта между двумя серверами повторно вставит сообщения в почтовый поток и приведет к замене заголовков Date.
РЕДАКТИРОВАТЬ: Мой опыт работы с Dovecot и Thuderbird показывает, что, пока существуют заголовки Date, дата не меняется при перемещении файла с использованием IMAP. Если заголовки Date отсутствуют, тогда дата устанавливается на дату, когда файл появляется в Thunderbird. Значение внутренней даты IMap указано в разделе 2.3.3 протокола доступа к Интернет-сообщениям RFC-3501. Основываясь на моем чтении RFC, я ожидал, что заголовок Delivery-date будет значимым заголовком.
Если вы перемещаете файлы с помощью IMap, Postfix не имеет значения, так как он не задействован. Postfix будет задействован только в том случае, если сообщения пересылаются между серверами.
Я нашел здесь свой ответ: http://www.dovecot.org/list/dovecot/2008-July/032165.html
При передаче электронной почты с одного сервера на другой клиент IMAP должен использовать ДОБАВИТЬ команду. Эта команда имеет необязательный параметр даты, который сообщает новому серверу "внутреннее" или "полученное". Однако, поскольку это необязательный параметр, клиенты не обязаны отправлять его, и, если он не указан, в спецификации указано, что по умолчанию он должен использовать текущее время. Так и случилось в моем случае, почтовый клиент не сообщил исходное внутреннее время.
В ходе обсуждения также выясняется, что Dovecot использует временную метку в файле для сообщения внутреннего времени. Поэтому, если я хочу исправить полученное время постфактум, я могу установить метку времени в файле, а затем удалить файлы кеша.