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脚本的步骤
- 登录Mailcow后台,进入Configuration > Dovecot > Sieve
- 若要全局生效(所有用户),在**Global sieve script (before user scripts)**中粘贴上述脚本;若仅针对特定用户,进入对应邮箱的设置页面,找到Sieve选项添加脚本
- 保存后,Dovecot会自动重载配置,无需手动重启服务
三、邮件入库前清理的优化方案
除了Sieve脚本,还可以结合Mailcow内置的工具实现更全面的防护:
- ClamAV杀毒:启用后自动查杀带病毒的附件,与Sieve脚本形成双重过滤
- Dovecot附件限制:在Mailcow配置中调整最大附件大小,或直接禁止特定扩展名的文件
- Rspamd规则扩展:利用Mailcow集成的Rspamd,添加自定义附件类型过滤规则,实现更灵活的邮件预处理
四、常见排查要点
- 脚本不生效时,查看Dovecot日志:
docker logs -f mailcowdockerized_dovecot_1,排查语法错误或扩展启用问题 - 确认
foreverypart扩展已启用:检查Dovecot的sieve_extensions配置项,默认已包含该扩展
内容的提问来源于stack exchange,提问作者cottton
相关产品推荐
相关产品推荐

