Dovecot 从 mbox 迁移到 mdbox

Dovecot 从 mbox 迁移到 mdbox

我正在新磁盘上将 mbox 迁移到 mdbox。从 /mnt/mail/$user 迁移到 /mnt/mail2/$user

当前 mail_location = mbox:~/mail:INBOX=/mnt/mail/%u/mail/Inbox

新的 mail_location = mdbox:/mnt/mail2/$user/mdbox

我的主要用户数据库是 passwd,并且我使用另一个用户数据库覆盖了所有用户:

userdb {
  driver = passwd
  result_success = continue-ok
}

userdb {
  driver = passwd-file
  args = username_format=%u /etc/dovecot/passwd.override
  skip = notfound
}

第一步,覆盖该用户的 mail_location:

$user:::::::userdb_mail_location=/mnt/mail2/%u/mdbox

开始迁移:

doveadm sync -f -u $user mbox:/mnt/mail/$user/mail:INBOX=/mnt/mail/$user/mail/Inbox

同步顺利,所有文件夹和邮件都位于 /mnt/mail2/$user/mdbox 的 mdbox 位置。

然后将该用户的主目录从 /mnt/mail/$user 更改为 /mnt/mail2/$user,并设置权限。

/etc/passwd 显示用户的主目录是 /mnt/mail2/$user。

/etc/dovecot/passwd.override 包含该用户的新 mdbox mail_location。

不幸的是,当新邮件到达时,它仍然会转到旧的 mbox。

Postfix 使用 dovecot-lda 作为传送代理:

mailbox_command = /usr/lib/dovecot/dovecot-lda -f "$SENDER" -a "$RECIPIENT"

有可能 dovecot-lda 无法理解覆盖吗?为什么它仍然为该用户提供旧的 $HOME,而不管它是否已更改?

答案1

问题是dovecot-lda不进行用户数据库查找,并且我的覆盖mail_location没有生效。在文档,答案就是添加-d "$USER"到参数中。

在 Postfix 中,配置mailbox_command应为:

mailbox_command = /usr/lib/dovecot/dovecot-lda -d "$USER" -f "$SENDER" -a "$RECIPIENT"

答案2

你调查过吗https://wiki2.dovecot.org/Migration/MailFormat? 按照那里的说明,使用 dsync 通常可以很容易地完成此操作。

相关内容