Estou fazendo uma migração de mbox para mdbox em um novo disco. De /mnt/mail/$user para /mnt/mail2/$user
Local_correio atual = mbox:~/mail:INBOX=/mnt/mail/%u/mail/Inbox
O novo mail_location = mdbox:/mnt/mail2/$user/mdbox
Meu userdb principal é passwd, e eu tenho uma substituição para todos os usuários com outro userdb:
userdb {
driver = passwd
result_success = continue-ok
}
userdb {
driver = passwd-file
args = username_format=%u /etc/dovecot/passwd.override
skip = notfound
}
Primeira etapa, substituindo mail_location para esse usuário:
$user:::::::userdb_mail_location=/mnt/mail2/%u/mdbox
Iniciando a migração:
doveadm sync -f -u $user mbox:/mnt/mail/$user/mail:INBOX=/mnt/mail/$user/mail/Inbox
A sincronização vai bem, todas as pastas e e-mails estão no local do mdbox em /mnt/mail2/$user/mdbox.
O diretório inicial desse usuário é então alterado de /mnt/mail/$user para /mnt/mail2/$user, as permissões são definidas.
/etc/passwd mostra que o diretório inicial do usuário é /mnt/mail2/$user.
/etc/dovecot/passwd.override tem o novo mdbox mail_location para esse usuário.
Infelizmente, quando um novo e-mail chega, ele ainda vai para a mbox antiga.
Postfix usa dovecot-lda como agente de entrega:
mailbox_command = /usr/lib/dovecot/dovecot-lda -f "$SENDER" -a "$RECIPIENT"
É possível que a dovecot-lda não entenda a substituição? E por que ele ainda entrega para o antigo $HOME para esse usuário, não importa que tenha sido alterado?
O problema era que
dovecot-lda
não faz pesquisas de userdb, e minha substituiçãomail_location
não estava em vigor. Mencionado nos documentos e a resposta é adicionar-d "$USER"
aos parâmetros.No postfix a configuração para
mailbox_command
deve ser:mailbox_command = /usr/lib/dovecot/dovecot-lda -d "$USER" -f "$SENDER" -a "$RECIPIENT"
Você já olhou em https://wiki2.dovecot.org/Migration/MailFormat ? Isso geralmente é muito fácil de fazer com o dsync usando as instruções lá.