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

Mailcow中用Sieve脚本移除非白名单附件并修改邮件正文

在Mailcow中实现非白名单附件移除及正文提示

一、基于foreverypart扩展的核心实现

Mailcow搭载的Dovecot默认已启用foreverypart扩展(对应RFC5703),无需额外安装,直接编写Sieve脚本即可满足需求。以下是完整的脚本示例,实现移除非白名单附件+正文添加移除提示:

require ["fileinto", "foreverypart", "variables", "regex", "addheader"];

# 定义允许的MIME类型白名单(正则匹配)
set "allowed_mime" "text/.*|application/json|image/.*";
# 初始化移除附件计数
set "removed_num" "0";

# 遍历所有MIME组件(正文+附件)
foreverypart {
    # 判断当前组件是否为附件(包含attachment标识,或非文本类内嵌内容)
    if anyof(
        header :contains "Content-Disposition" "attachment",
        not header :matches "Content-Type" "text/plain" "text/html"
    ) {
        # 检查是否在白名单内
        if not header :regex "Content-Type" "${allowed_mime}" {
            # 移除该附件
            replace "";
            # 更新计数
            set "removed_num" "${removed_num} + 1";
        }
    }
}

# 有附件被移除时,给正文添加提示
if "${removed_num}" > "0" {
    foreverypart {
        # 针对纯文本正文添加提示
        if header :matches "Content-Type" "text/plain" {
            replace text:
=== 安全提示 ===
您的邮件中有${removed_num}个不符合策略的附件已被移除。
允许的附件类型:文本类、图片类、JSON格式文件。
-----------------

${body}
;
        }
        # 针对HTML正文添加提示
        if header :matches "Content-Type" "text/html" {
            replace text:
<div style="padding:12px; background:#fff3cd; border:1px solid #ffeeba; border-radius:4px; color:#856404; margin-bottom:15px;">
  <p><strong>安全提示:</strong>您的邮件中有${removed_num}个不符合策略的附件已被移除。</p>
  <p>允许的附件类型:文本类、图片类、JSON格式文件。</p>
</div>
${body}
;
        }
    }
    # 可选:给主题添加标记
    addheader :last "Subject" "[附件已移除] ${original_subject}";
}

脚本关键点说明

  • foreverypart:遍历邮件的每个MIME片段,精准定位附件和正文
  • replace "":直接删除目标MIME组件(即非白名单附件)
  • 分格式处理正文:同时适配纯文本和HTML邮件,确保提示正常显示
  • 计数变量:直观告知用户移除的附件数量

二、Mailcow中配置Sieve脚本的步骤

  1. 登录Mailcow后台,进入Configuration > Dovecot > Sieve
  2. 若要全局生效(所有用户),在**Global sieve script (before user scripts)**中粘贴上述脚本;若仅针对特定用户,进入对应邮箱的设置页面,找到Sieve选项添加脚本
  3. 保存后,Dovecot会自动重载配置,无需手动重启服务

三、邮件入库前清理的优化方案

除了Sieve脚本,还可以结合Mailcow内置的工具实现更全面的防护:

  • ClamAV杀毒:启用后自动查杀带病毒的附件,与Sieve脚本形成双重过滤
  • Dovecot附件限制:在Mailcow配置中调整最大附件大小,或直接禁止特定扩展名的文件
  • Rspamd规则扩展:利用Mailcow集成的Rspamd,添加自定义附件类型过滤规则,实现更灵活的邮件预处理

四、常见排查要点

  • 脚本不生效时,查看Dovecot日志:docker logs -f mailcowdockerized_dovecot_1,排查语法错误或扩展启用问题
  • 确认foreverypart扩展已启用:检查Dovecot的sieve_extensions配置项,默认已包含该扩展

内容的提问来源于stack exchange,提问作者cottton

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 12:45:34