copying and renaming mailboxes to clean up directories

Andrew Morgan morgan at orst.edu
Wed May 2 17:24:30 EDT 2007


On Wed, 2 May 2007, Thorsten B=FCker wrote:

>> I bet the problem is that on a large mailbox, $imap->messages will retur=
n a =

>> really big list of UIDs (longer than the allowed MAXWORD of 32768).  You =

>> may be able to fix this by calling "$imap->Ranges(1);" earlier in the =

>> script.  According to the Mail::IMAPClient docs, with that enabled it wi=
ll =

>> try to generate a condensed list of UIDs when possible.
>
> Yes, it works fine. In case somebody likes to test, I added =

> "$imap1->Ranges(1);" to line 90.

Great, I added that to my local copy.

>> Did you set "allowusermoves: 1" in imapd.conf?
>
> I did, but it shows no effect. Indeed "man imapd.conf" doesn't list this =

> option -- is it already implemented in "2.1.18-1+sarge2"?

Hmm, I'm using v2.2.13 here.  Maybe that option/feature didn't exist in =

2.1.x.

>> If I understand you correctly, you want to get a list of "valid" UIDs fr=
om =

>> the folder listing, and then delete (from the filesystem) anything which=
 is =

>> not in that list of "valid" UIDs?
>>
>> Or do you intend to just copy the mailbox to a new mailbox, delete the o=
ld =

>> mailbox, and copy it back?  That sounds pretty reasonable to me.  One =

>> problem you might have is the loss of the seen state for each mailbox =

>> because the mailbox unique ID will change with the copy.  The unique ID =
is =

>> stored in the cyrus.header file in each mailbox/folder, so you might be =

>> able to save those and copy them back as you go.
>
> I just hat some tries on the latter way.
>
> Beside the seen state the subscription list of a user needs to be transfe=
rred =

> in some way. Manually duplicating thorsten.sub to thorsten_neu.sub =

> (overwritten file of copied mailbox) and modifiying the file lead to a =

> restore of subscription on the new (temporary) mailbox. But, as you alrea=
dy =

> assumed, the seen state gets lost...
>
> Is there anything else in addition to the seen state and subscriptions, w=
hich =

> needs to be kept?

You should probably check if other message flags (Important, Answered, =

etc) are copied.  I can't remember.

> Furthermore I must admit, that I wasn't aware right now, that by copying =
a =

> mailbox the name/number of a mail in the filesystem changes, too. I just =
had =

> the idea to copy a mailbox, execute "find" in both directories, "diff" th=
e =

> differences and create some kind of remove loop on filesystem level outsi=
de =

> of Cyrus. But oviously this stays an idea :-/
>
> Is this name/number the key, which you are refering to by "mailbox unique =

> ID"?

Have a look at any cyrus.header file and you'll see something like:

----------------------------------
Cyrus mailbox header
"The best thing about this system was that it had lots of goals."
         --Jim Morris on Andrew
user.morgan     3e671c013f511626
morgan  lrswipcda
----------------------------------

The string "3e671c013f511626" is the unique mailbox ID for this particular =

mailbox.  It is the key value used in the seen files to track which =

message UIDs have been seen for each mailbox.

> Another attempt:
> Are there any reasons, why something like
>
> ORIG=3D`grep -R -e '^Message-ID:' $originalmbox | awk '{print $2}' | sort`
> KOPIE=3D`grep -R -e '^Message-ID:' $copyofmbox | awk '{print $2}' | sort`
>
> some diff and some improved awking (spaces won't work in case of spaces i=
n =

> folder names) is not a sufficient way to create a list of files, which mi=
ght =

> be deleted in the original mailbox?

That sounds like a reasonable approach, but obviously you should be =

careful anytime you modify the cyrus files directly.  :)

 	Andy


More information about the Info-cyrus mailing list