使用 Dovecot 时,我在清理收件箱时遇到了一个相当令人困扰的问题。这是我的设置:
- Dovecot 将其用户/邮箱存储在 MySQL 后端。
- Postfix 处理电子邮件传输,并依靠 Dovecot 进行身份验证。
- 收件箱存储在 中
/var/mail/domain/user
。
这是非常基本的设置。现在想象一下以下场景:
- 我在数据库中创建一个用户(假设[电子邮件保护]),然后开始发送和接收电子邮件。没有问题,一切顺利。
- 我不再需要我的用户,我只是将其从数据库中删除,不再有用户。
但问题是……目前,/var/mail/mydomain.tld/johndoe
)仍然存在。现在想象一下:
- 又出现了一个 John Doe,他想要一个收件箱。我补充道[电子邮件保护]到数据库,太好了,它起作用了!
现在有一件有趣的事情:之前的 John Doe 在离开之前没有删除他的电子邮件,而新的 John Doe 已经获得了之前邮箱内容的访问权限(由于地址相同,因此他获得了相同的收件箱位置)。希望 John Doe 1 号没有在他的收件箱中留下凭证、信用卡信息或类似的东西……
所以我的问题是:删除 Dovecot 用户时是否有正确的方法来删除实际的收件箱?在我的示例中,我希望/var/mail/mydomain.tld/johndoe
在第一个 John Doe 消失时删除我(步骤 2,也许在服务重启时?)。现在,我可以使用我的前端应用程序(填充 MySQL 后端的 PHP 应用程序)以编程方式执行此操作,但这会造成权限混乱(允许 Web 用户访问邮箱,不,谢谢!)
答案1
在我们的设置中,我们使用postgres
后端来存储user
信息。我们在 DB 中设置了account_status
to DELETED
,并有一个 cron 来备份整个帐户并将其从文件系统中删除。这个问题在 dovecot 中进行了讨论邮件列表并且建议的解决方案是使用rm
rm -rf `doveadm user -f home $username`