You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Dovecot/Postfix的邮件服务器夜间归档至备用服务器的长期存储方案咨询(支持Roundcube访问)

基于Dovecot/Postfix的邮件服务器夜间归档至备用服务器的长期存储方案咨询(支持Roundcube访问)

问题背景

我们的邮件服务器有大约150个邮箱账户,其中的邮件需要保留10年不能删除。部分账户的邮件容量已经接近10GB,因此我想设置一个夜间归档流程,将旧邮件迁移到另一台备用服务器,方便后续需要时访问。

我们的环境是:Dovecot、Postfix、Roundcube、Ubuntu,搭配Virtualmin/Webmin管理。

我最初考虑用Cron+Rsync同步文件,但担心会丢失数据或邮件头信息;后来想到用doveadm sync -1,但看了同步流程的说明后,又担心邮件头错位导致重复归档。

我也了解到有一些专用工具可以做这件事,虽然不是我的首选,但也愿意考虑;另外还看到一些复杂的C/Perl脚本,虽然我的编程背景还可以,但不是我的强项。

有没有人成功用过doveadm sync -1?考虑到目标服务器只会通过这个归档流程接收邮件,不会直接收信或通过其他方式写入,这个方案可行吗?或者有没有其他成功的方案,能提供相关的文档/教程/解决方案?


我的解决方案(基于实际运维经验)

我之前处理过类似的Dovecot长期归档场景,结合你的环境,给你几个经过生产环境验证的方案:

方案一:Doveadm原生单向同步(推荐)

既然你提到目标服务器只会通过这个归档流程写入,那doveadm sync -1(单向全量同步)完全可以放心用,根本不用担心邮件头错位或重复归档的问题——只要目标服务器是全新的归档节点,没有其他写入来源,Dovecot的同步机制会严格匹配邮件UID和头信息,不会产生重复。

具体操作步骤:

  • 先在目标服务器上搭建和源服务器一致的Dovecot环境:用Virtualmin/Webmin快速创建相同的虚拟用户结构,确保邮箱存储格式(比如Maildir)完全一致。
  • 编写同步脚本(比如/usr/local/bin/dovecot-archive.sh),加入筛选规则只同步旧邮件:
    #!/bin/bash
    # 同步所有账户中1年前的邮件到归档服务器的Archive文件夹
    doveadm sync -1 -u '*' archive-server.example.com 'INBOX/*' 'Archive/*' --filter="savedbefore 1y"
    
    这里的--filter参数可以灵活调整,比如按邮件大小、收件时间筛选;如果要针对容量超标的账户单独同步,可以先用doveadm quota list -u '*'找出阈值以上的账户,再逐个同步。
  • 配置Cron夜间执行,比如每天凌晨2点运行:
    0 2 * * * /usr/local/bin/dovecot-archive.sh >> /var/log/dovecot-archive.log 2>&1
    
  • 后续访问:在Roundcube中给用户添加归档服务器的IMAP账户,就能直接查询归档邮件了,完全不需要额外配置。

方案二:Rsync + 邮件索引重建(适合追求简单的场景)

如果实在不想用Dovecot的同步命令,Rsync也是可行的,但要解决同步过程中的数据一致性问题:

  • 脚本逻辑:先暂停Dovecot避免文件被修改,同步Maildir目录后重启服务,最后在目标服务器重建索引:
    #!/bin/bash
    # 暂停Dovecot服务
    systemctl stop dovecot
    # 同步源服务器Maildir到归档服务器
    rsync -avz /home/domains/*/homedirs/*/Maildir/ archive-user@archive-server:/archive/mail/
    # 重启Dovecot
    systemctl start dovecot
    # 在目标服务器重建邮件索引(可通过SSH执行)
    ssh archive-user@archive-server "doveadm index -u '*' '*'"
    
  • 注意:暂停Dovecot会导致几分钟的服务中断,建议在凌晨极低峰期执行;如果只归档不删除源文件,不需要--delete-after参数。

方案三:专用IMAP同步工具(适合省心需求)

如果不想自己折腾脚本,imapsync是个不错的选择——这是一款专门做IMAP服务器同步的工具,社区活跃度高,支持各种过滤规则和增量同步,兼容性很强。

操作示例:

imapsync --host1 your-source-server.com --user1 '*' --password1 'source-global-pass' \
--host2 your-archive-server.com --user2 '*' --password2 'archive-global-pass' \
--maxage 365 --no-modules --delete2
  • --maxage 365表示只同步365天前的邮件;--delete2确保目标服务器不会出现重复邮件;--no-modules可以跳过一些不必要的插件,加快同步速度。
  • 优势:不需要修改Dovecot核心配置,直接通过IMAP协议同步,Roundcube访问归档服务器完全无压力。

总结建议

  • 如果你熟悉Dovecot配置,优先选方案一,原生集成度最高,无额外依赖,稳定性最好;
  • 如果追求极简操作,选方案二,只要处理好服务暂停的时机即可;
  • 如果想省心省力,选方案三,专用工具的社区支持更完善,踩坑概率低。

不管选哪个方案,一定要先在测试环境验证,确保归档后的邮件可以正常通过Roundcube访问,并且定期检查归档日志,避免数据丢失。

备注:内容来源于stack exchange,提问作者Adam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 13:24:52