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

如何在不同磁盘上拆分Exim邮箱存储

如何在不同磁盘上拆分Exim邮箱存储

嘿,这个需求完全可以实现!Exim的配置灵活性很强,刚好能满足你把不同邮箱拆分到不同磁盘的需求。我之前帮人处理过类似的场景,给你分享几个实用的方案:

方案一:按用户列表匹配对应磁盘

这种方式适合需要精准指定每个邮箱存储位置的场景,你可以通过维护用户列表来绑定磁盘:

  1. 创建用户列表文件
    在/etc/exim/目录下创建两个文件,分别记录对应磁盘的用户:

    • /etc/exim/disk1_users:每行一个用户名,比如alice、bob
    • /etc/exim/disk2_users:存放另一组用户,比如charlie、diana
  2. 配置专属传输器
    在Exim的主配置文件中添加两个传输器,分别对应不同的磁盘挂载点:

    disk1_delivery:
      driver = appendfile
      directory = /mnt/disk1/mail/$local_part/Maildir
      maildir_format
      delivery_date_add
      envelope_to_add
      return_path_add
    
    disk2_delivery:
      driver = appendfile
      directory = /mnt/disk2/mail/$local_part/Maildir
      maildir_format
      delivery_date_add
      envelope_to_add
      return_path_add
    
  3. 添加路由规则
    在路由器部分添加规则,让Exim根据用户列表匹配对应的传输器:

    disk1_router:
      driver = accept
      local_parts = lsearch;/etc/exim/disk1_users
      transport = disk1_delivery
    
    disk2_router:
      driver = accept
      local_parts = lsearch;/etc/exim/disk2_users
      transport = disk2_delivery
    

    记得把这两个路由器放在默认本地路由的前面,确保优先匹配。

方案二:动态规则自动分配磁盘

如果你的邮箱地址有规律(比如按首字母、域名拆分),可以用正则或哈希实现自动分配,不用手动维护用户列表:

修改默认的local_delivery传输器的directory配置,比如按用户名首字母拆分:

local_delivery:
  driver = appendfile
  # 把a-f开头的用户放到disk1,其余放到disk2
  directory = /mnt/disk${lookup{$local_part}{regex{^[a-f]}{1}{2}}}/mail/$local_part/Maildir
  maildir_format
  delivery_date_add
  envelope_to_add
  return_path_add

你可以根据自己的需求调整正则逻辑,比如按域名拆分、按用户ID范围拆分都可以,甚至调用外部脚本返回对应的磁盘编号。

重要注意事项

  • 权限配置:确保Exim进程对目标磁盘的邮箱目录有读写权限,迁移已有邮箱时,记得手动移动Maildir目录并修改权限(比如chown -R user:user /mnt/disk1/mail/user)。
  • 配置测试:修改配置后先用exim -bV检查语法是否正确,再用exim -bt user@yourdomain.com测试路由是否匹配到了对应磁盘的传输器。
  • 数据备份:操作前最好备份所有邮箱数据,避免迁移过程中出现意外。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 09:17:59