A resposta do wbob é útil e detalhada. No entanto, eu tinha usado uma solução diferente antes do wbob sugerir a conversão dovecot. Além disso, acabei com pouco armazenamento. Eu tenho que aceitar minha própria resposta porque é isso que se acostumou depois de tudo.
Eu usei um script Python simples usando a biblioteca mailbox
. (Graças ao canal notmuch
IRC no freenode.)
#!/usr/bin/python3
import mailbox
import sys
import os
mbox_filename = sys.argv[1]
maildir_root_dir_name = sys.argv[2]
mbox = mailbox.mbox(mbox_filename, create=False)
mailbox_name = os.path.basename(mbox_filename)
maildir_dir_name = "/".join((maildir_root_dir_name, mailbox_name))
os.mkdir(maildir_dir_name, mode=0o750)
mdir = mailbox.Maildir(maildir_dir_name, create=True)
os.mkdir("/".join((maildir_dir_name, "cur")), mode=0o750)
os.mkdir("/".join((maildir_dir_name, "new")), mode=0o750)
os.mkdir("/".join((maildir_dir_name, "tmp")), mode=0o750)
count = 0
for x in mbox:
print(x.get_from())
count += 1
if count % 1000 == 0:
print(count)
mdir.add(x)
Algumas mensagens foram quebradas; o script parou com erro e um número de linha, então eu tive que usar o emacs (com vlf para abrir arquivos grandes, acredito) para corrigir as mensagens problemáticas no arquivo mbox.
A questão merece uma resposta mais elaborada, já que é bastante problemático realizar a tarefa para a maioria dos usuários. Espero que eu expanda isso no futuro.