搭配cPanel的Exim如何仅过滤被转发的邮件
搭配cPanel的Exim如何仅过滤被转发的邮件
嘿,我完全懂你的需求——只想对通过转发规则过来的邮件做过滤,直接发送到forward@example.com这类目标地址的邮件完全不动对吧?结合cPanel+Exim的环境,给你几个靠谱的解决方案:
核心思路:区分原始收件人与当前收件人
Exim在处理转发邮件时,会记录两个关键的收件人信息:
$original_recipient:邮件最初被投递到的地址(也就是你设置转发的源地址,比如email@example.com)$local_part@$domain:当前正在处理的最终收件人地址(也就是转发目标,比如forward@example.com)
当这两个地址不一致时,就说明这是一封被转发过来的邮件,而非直接发送到目标地址的。
具体实现(系统级sysfilter)
你已经创建了/usr/local/cpanel/etc/exim/sysfilter/options/forward_filter文件,现在只需要在里面添加过滤逻辑:
通用过滤所有转发邮件
如果想对所有被转发的邮件生效,用这个条件:
if $original_recipient ne $local_part@$domain then # 这里写你的过滤操作,比如添加标记头部、修改内容、转发到其他地址等 add_header X-Forwarded-Filtered: "This email was forwarded and filtered" # 举个例子:如果是转发到forward@example.com的邮件,自动重定向到另一个地址 if $local_part@$domain is "forward@example.com" then redirect filtered-forward@example.com endif endif
针对特定转发对过滤
如果只想处理email@example.com→forward@example.com和email2@example.com→forward2@example.com这两组转发,条件可以更精准:
# 处理第一组转发 if $original_recipient is "email@example.com" and $local_part@$domain is "forward@example.com" then # 这里写针对这组的过滤操作 add_header X-Filtered-From-Example: Yes endif # 处理第二组转发 if $original_recipient is "email2@example.com" and $local_part@$domain is "forward2@example.com" then # 这里写针对这组的过滤操作 add_header X-Filtered-From-Example2: Yes endif
注意事项
- 修改完sysfilter文件后,记得重启Exim服务才能生效:
也可以在WHM面板的「服务管理」里找到Exim重启。service exim restart - 之前尝试的
.forward文件在cPanel环境下可能不生效,因为cPanel默认用自己的过滤器系统管理用户级转发,系统级的sysfilter更适合你的需求。 - 可以根据实际需求调整过滤操作,比如自动回复、丢弃邮件、修改主题等,Exim的sysfilter支持很多操作,你可以按需编写。
备注:内容来源于stack exchange,提问作者mm1234
相关产品推荐
相关产品推荐

