I had some old MH mail that I recovered from backup that I wanted to import into my dovecot server. This is personal mail so I will only describe how to do it for my account. The MH file paths were of the form:
from/alice/1
from/alice/2
from/bob/1
from/carol/1
I wanted to import the alice mail into the logical dovecot mail folder Archives/from/alice and similarly for the others. (Archives is a Thunderbird standard.) In my dovecot setup however, the corresponding maildir directory is ~/Mail/.Archives.from.alice
First I shut down Thunderbird so that it wouldn't interfere during the second step later. This script does the job (backslash continuation inserted for clarity):
for d in from/*
do
for f in $d/[0-9]*
do
/usr/lib/dovecot/deliver -s -m \
Archives.${d/\//.} -p $f
done
done
See the documentation of deliver for the meanings of the -s -m and -p options.
You can track the progress of the import by following the syslog file for mail. Any failed imports go into INBOX.
This second step is not required, but I am obsessive. I wanted each imported file to have the same timestamp as the old one. This script uses findup from the fslint toolkit to collect the duplicates (backslash continuation inserted for clarity):
/usr/local/src/fslint-2.42/fslint/findup \
from ~/Mail/.Archives.*.* > /tmp/dups
This generates pairs of duplicates in /tmp/dups separated by a blank line. This script then applies the old timestamp to each new file.
while read a
do
read b
touch -r $a $b
read c
done < /tmp/dups
I still have to figure out how to mark all the old mail read from the CLI. I just went into Thunderbird and marked each folder read. If you have a good solution, please do comment.