如何在Dovecot Sieve中配置移除邮件特定附件?
在Docker-Mailserver的Dovecot Sieve中移除特定附件的配置方案
问题原因
你使用的replace指令属于Dovecot Pigeonhole的sieve_replace扩展,默认情况下Docker-Mailserver的Dovecot并未启用该扩展,因此系统无法识别这个关键字。
必要准备:启用sieve_replace扩展
- 在宿主机创建自定义Dovecot配置文件(比如
99-sieve-replace.conf),内容如下:plugin { sieve_plugins = $sieve_plugins sieve_replace } - 通过Docker挂载将该文件加入容器:
- 若使用docker-compose,在
volumes段添加:- ./path/to/99-sieve-replace.conf:/etc/dovecot/conf.d/99-sieve-replace.conf:ro - 若使用docker run,添加参数:
-v ./path/to/99-sieve-replace.conf:/etc/dovecot/conf.d/99-sieve-replace.conf:ro
- 若使用docker-compose,在
- 重启Docker-Mailserver容器,使配置生效。
最简Sieve规则配置(以移除.exe附件为例)
- 创建全局Sieve规则文件
default.sieve,内容如下:require ["replace", "mime", "editheader"]; # 匹配包含.exe后缀的附件 if anyof( header :contains "Content-Type" "application/x-msdownload", header :matches "Content-Disposition" "*filename=*.exe*" ) { # 删除附件关联的MIME头信息 deleteheader :mime "Content-Type"; deleteheader :mime "Content-Disposition"; deleteheader :mime "Content-Transfer-Encoding"; # 替换正文内容提示用户附件已移除 replace :mime :contenttype "text/plain" "此邮件原本包含附件,已被移除。"; replace :mime :contenttype "text/html" "<p>此邮件原本包含附件,已被移除。</p>"; } - 编译Sieve文件(可进入容器执行):
sievec /etc/dovecot/sieve/default.sieve - 将编译后的
default.svbin和原default.sieve挂载到容器的/etc/dovecot/sieve/目录,或直接放入Docker-Mailserver的config/sieve/目录(根据你的挂载配置调整)。
验证配置
- 进入容器执行以下命令,确认
sieve_replace已加载:
输出结果中需包含dovecot -n | grep sieve_pluginssieve_replace。 - 发送携带.exe附件的测试邮件,检查收件箱是否收到提示信息且附件已被移除。
内容的提问来源于stack exchange,提问作者Janumar
相关产品推荐
相关产品推荐

