[Dovecot] changing INTERNALDATE or similar
I have a question which others must have encountered. I switched from uw-imap to dovecot-imap a few months ago and moved my fairly large mail archive (~15 yrs) by simply mounting both accounts in a mail app and simply copying my folders over. This worked well, and all my mail is in order when I view it in evolution or thunderbird on any number of machines. However, since our company uses MS Exchange Server, when I add my dovecot imap account to outlook, everything is great except the received dates - it looks like the date I made the transition, but in all instances it's not simply the time stamp in the Maildir folder. I googled around on this and have gathered that this date is coming somewhere from within the dovecot index file. Is there a utility for scanning that so I can ascertain where the date shown in Outlook is coming from? Is there also a utility which would just reset the INTERNALDATE (or whatever it is that Outlook is keying on) to the date in the message on the "Date: ..." line?
This issue is not life threatening as I don't use Outlook much, but when I do, it is confusing to not have the "Received" column be meaningful, especially for sorting.
Thanks for any help - Karl
On Wed, 2008-07-16 at 16:56 -0700, Karl Rudnick wrote:
I have a question which others must have encountered. I switched from uw-imap to dovecot-imap a few months ago and moved my fairly large mail archive (~15 yrs) by simply mounting both accounts in a mail app and simply copying my folders over. This worked well, and all my mail is in order when I view it in evolution or thunderbird on any number of machines. However, since our company uses MS Exchange Server, when I add my dovecot imap account to outlook, everything is great except the received dates - it looks like the date I made the transition, but in all instances it's not simply the time stamp in the Maildir folder. I googled around on this and have gathered that this date is coming somewhere from within the dovecot index file.
INTERNALDATE comes from the maildir files' mtimes. So you can use whatever utility/script you want to modify the mtime (I don't have any suggestions). Then delete dovecot.index.cache file to make sure the old value wasn't cached. You might also have to recreate the account in your clients to make sure they haven't cached the old values.
Terrific - I'll just write a script to:
- cd to all Maildir folders
- remove dovecot.index* in each folder
- For each mail file in each Mailder folder: a. grep/ask "Date:" b. pipe the output of a into "touch --date" for that file
On my windows side, all the imap info is save in one pst file in
"C:\Documents and Settings\
Thanks again for the clarification.
- Karl
-----Original Message----- From: Timo Sirainen [mailto:tss@iki.fi] Sent: Thursday, July 17, 2008 4:58 AM To: Rudnick, Karl; Dovecot Mailing List Subject: Re: [Dovecot] changing INTERNALDATE or similar
On Wed, 2008-07-16 at 16:56 -0700, Karl Rudnick wrote:
I have a question which others must have encountered. I switched from uw-imap to dovecot-imap a few months ago and moved my fairly large mail archive (~15 yrs) by simply mounting both accounts in a mail app and simply copying my folders over. This worked well, and all my mail is in order when I view it in evolution or thunderbird on any number of machines. However, since our company uses MS Exchange Server, when I add my dovecot imap account to outlook, everything is great except the received dates - it looks like the date I made the transition, but in all instances it's not simply the time stamp in the Maildir folder. I googled around on this and have gathered that this date is coming somewhere from within the dovecot index file.
INTERNALDATE comes from the maildir files' mtimes. So you can use whatever utility/script you want to modify the mtime (I don't have any suggestions). Then delete dovecot.index.cache file to make sure the old value wasn't cached. You might also have to recreate the account in your clients to make sure they haven't cached the old values.
I believe it's still true that any mail files that are IMAP STORE'd (uploaded) to Dovecot by a client will have a current mtime, rather than the "Date" in the message. That means might need to compare mtime's to "Date" headers for new files that appear too.
Here we just patched Dovecot to treat "INTERNALDATE" the same as the "Date" header. Constantly verifying mtime's became too much of a chore for those clients that rely on it (although this technically is against the RFC).
Rich
Rudnick, Karl wrote:
Terrific - I'll just write a script to:
- cd to all Maildir folders
- remove dovecot.index* in each folder
- For each mail file in each Mailder folder: a. grep/ask "Date:" b. pipe the output of a into "touch --date" for that file
On my windows side, all the imap info is save in one pst file in "C:\Documents and Settings\
\Local Settings\Application Data\Microsoft\Outlook\Outlook*imap*.pst" and if I blow it away it gets correctly rebuilt - I just tested it and the blown away index files get rebuilt so that Outlook then has the correct Received date displayed. Pretty easy to do, but surprised a script wasn't openly available - or at least my googling skills weren't good enough. Since I have ~35,000 emails in about 450 folders, this needs to be scripted. I'll make it available when I get it smoothed out. Thanks again for the clarification.
- Karl
-----Original Message----- From: Timo Sirainen [mailto:tss@iki.fi] Sent: Thursday, July 17, 2008 4:58 AM To: Rudnick, Karl; Dovecot Mailing List Subject: Re: [Dovecot] changing INTERNALDATE or similar
On Wed, 2008-07-16 at 16:56 -0700, Karl Rudnick wrote:
I have a question which others must have encountered. I switched from uw-imap to dovecot-imap a few months ago and moved my fairly large mail archive (~15 yrs) by simply mounting both accounts in a mail app and simply copying my folders over. This worked well, and all my mail is in order when I view it in evolution or thunderbird on any number of machines. However, since our company uses MS Exchange Server, when I add my dovecot imap account to outlook, everything is great except the received dates - it looks like the date I made the transition, but in all instances it's not simply the time stamp in the Maildir folder. I googled around on this and have gathered that this date is coming somewhere from within the dovecot index file.
INTERNALDATE comes from the maildir files' mtimes. So you can use whatever utility/script you want to modify the mtime (I don't have any suggestions). Then delete dovecot.index.cache file to make sure the old value wasn't cached. You might also have to recreate the account in your clients to make sure they haven't cached the old values.
On Thu, 2008-07-17 at 13:04 -0700, richs@whidbey.net wrote:
I believe it's still true that any mail files that are IMAP STORE'd (uploaded)
You mean IMAP APPENDed.
to Dovecot by a client will have a current mtime, rather than the "Date" in the message. That means might need to compare mtime's to "Date" headers for new files that appear too.
This is only because the client doesn't specify the date to APPEND command.
Here we just patched Dovecot to treat "INTERNALDATE" the same as the "Date" header. Constantly verifying mtime's became too much of a chore for those clients that rely on it (although this technically is against the RFC).
Would probably have been better to set the default INTERNALDATE based on the Date: header in APPEND command. Should be pretty easy to do with Maildir I think.
static int maildir_save_finish_real(struct mail_save_context *_ctx) .. if (ctx->received_date == (time_t)-1 && ctx->cur_dest_mail != NULL) mail_get_date(ctx->cur_dest_mail, &ctx->received_date);
And probably move:
if (ctx->cur_dest_mail != NULL) {
index_mail_cache_parse_deinit(ctx->cur_dest_mail,
ctx->received_date, !ctx->failed);
}
higher up in the code so it gets executed before the mail_get_date() call.
participants (4)
-
Karl Rudnick
-
richs@whidbey.net
-
Rudnick, Karl
-
Timo Sirainen