请求编写规范的最小Sieve脚本实现特定邮件复制逻辑
请求编写规范的最小Sieve脚本实现特定邮件复制逻辑
没问题,结合你提到的Delivered-To头信息以及对地址匹配准确性的要求,我给你写一个符合RFC规范的最小Sieve脚本,完美满足你的需求:
require ["redirect", "address", "lowercase"]; if address :lowercase "delivered-to" "foo@mydomain.fr" { if not anyof( address :lowercase "to" "bar@mydomain.fr", address :lowercase "cc" "bar@mydomain.fr" ) { redirect "bar@mydomain.fr"; # 如果你的服务商默认会移除原邮件,添加下面这行明确保留到收件箱;否则可省略 # keep; } }
脚本细节说明:
require语句:声明脚本依赖的Sieve标准扩展——address用于精准解析邮件地址(自动忽略显示名称,比如"Foo Alias" <foo@mydomain.fr>这种格式),lowercase实现大小写不敏感匹配,redirect用于发送邮件副本。- 外层条件判断:
address :lowercase "delivered-to" "foo@mydomain.fr"确保只触发那些最终投递到foo@mydomain.fr的邮件,不管是直接发送、Bcc还是通过其他地址转发过来的,都能准确识别。 - 内层排除逻辑:
not anyof(...)用来过滤掉已经把bar@mydomain.fr列为收件人(To/Cc)的邮件,避免重复发送。这里同样用address :lowercase做匹配,完全不用担心显示名称、大小写或者字符串误匹配的问题。 redirect命令:发送邮件副本到bar@mydomain.fr,原邮件默认会保留在你的收件箱;如果你的服务商有特殊处理逻辑,可以取消注释keep语句强制保留。
额外注意事项:
- 先确认你的邮件服务商支持
address和lowercase这两个Sieve扩展(它们都是标准扩展,绝大多数支持Sieve的服务商都会提供)。 - 测试时可以分场景验证:比如用Bcc发送到
foo@mydomain.fr,检查是否触发副本;再发送一封To:foo+Cc:bar的邮件,确认不会重复发送给bar。 - 如果后续需要添加更多别名规则,只需要在外层
if里用or扩展条件即可,比如:if anyof( address :lowercase "delivered-to" "foo@mydomain.fr", address :lowercase "delivered-to" "baz@mydomain.fr" ) { # 后续逻辑不变 }
备注:内容来源于stack exchange,提问作者fgrieu
相关产品推荐
相关产品推荐

