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

如何利用Sieve脚本实现基于正则匹配的邮件自动归类到对应邮箱?

如何利用Sieve脚本实现基于正则匹配的邮件自动归类到对应邮箱?

我完全懂你现在的困扰——想让邮件根据主题里的三位数字自动归档到对应名称的邮箱,结果发现fileinto和mailboxexists都不支持:regex参数,报错提示未知的标签参数,确实挺让人挠头的!

其实Sieve本身确实没有直接支持用正则匹配目标邮箱的命令,不过我们可以换个思路,通过枚举邮箱列表+匹配变量的方式来实现需求,下面是具体的解决方案:

核心思路

  1. 先从邮件主题里捕获目标三位数字,存到变量里
  2. 获取所有符合条件的邮箱列表(比如INBOX下的所有子邮箱)
  3. 遍历每个邮箱,检查名称是否包含我们捕获的数字
  4. 找到匹配的邮箱就归档进去,没找到就留在收件箱

完整Sieve脚本示例

require ["fileinto", "regex", "mailbox", "variables", "loop", "string"];

# 从主题中捕获1开头的三位数字,并存到变量$id中
if header :regex "Subject" "([1-9][0-9]{2})" {
    set "id" "${1}";
    # 获取INBOX下的所有子邮箱(如果你的邮箱都是Foobar开头,可以改成"INBOX.Foobar*"缩小范围)
    list_mailboxes "INBOX.*" "mailboxes";
    # 遍历每个获取到的邮箱
    foreach "mailbox" :list "mailboxes" {
        # 检查当前邮箱名是否包含我们捕获的数字ID
        if string :contains "${mailbox}" "${id}" {
            # 归档到匹配的邮箱
            fileinto "${mailbox}";
            # 找到匹配项后立即停止脚本,避免重复操作
            stop;
        }
    }
    # 若遍历完所有邮箱都没找到匹配项,邮件会默认留在收件箱,无需额外操作
}

关键细节说明

  • 扩展支持:要确保你的邮件服务器支持loop、string和mailbox扩展,比如Dovecot默认是支持这些扩展的,其他服务器可能需要手动开启相关配置
  • 缩小邮箱范围:如果你的目标邮箱都是以特定前缀命名(比如你提到的Foobar 123),可以把list_mailboxes的第一个参数改成"INBOX.Foobar*",这样只会获取符合该前缀的邮箱,减少遍历次数,提高效率
  • 替代mailboxexists的方案:因为mailboxexists不支持正则,我们通过遍历邮箱列表+string :contains的方式来检查是否存在匹配的邮箱,完美解决了无法批量正则检查邮箱的问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 15:12:36