You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何配置Procmail实现邮件转发并同时设置密送(BCC)?

问题分析与解决方案

你的问题核心在于对sendmail处理邮件头的逻辑理解有误——sendmail不会自动解析邮件头中的Bcc字段来添加信封收件人。邮件头里的Bcc只是一个显示用的元数据(通常最终会被投递系统移除),真正决定邮件发送到哪个地址的是信封收件人列表,也就是你传给sendmail的命令行参数。

为什么当前配置不生效?

看你的.procmailrc和日志:

  1. 前两个规则确实用formail给邮件添加了Bcc头,但这只是修改了邮件内容本身;
  2. 第三个规则执行! $DEST时,只把$DEST里的地址传给了sendmail作为信封收件人,$BCCS里的地址根本不在sendmail的收件人列表里,所以自然收不到邮件。

修正后的配置方案

推荐两种简单可靠的实现方式:

方案一:合并收件人到sendmail命令行

直接把密送地址和转发地址一起传给sendmail,这样所有收件人都在信封列表里,同时可以避免在邮件头暴露密送地址(符合BCC的隐私要求):

:0
* ^From.*@example.com
* ! ^X-Loop: test
{
  # 添加X-Loop防止邮件循环
  :0fhw
  | formail -A "X-Loop: test"
  # 同时发送给转发地址和密送地址
  ! $DEST $BCCS
}

方案二:用Procmail抄送规则单独处理密送

如果你想分开管理转发和密送逻辑,可以用:0c(抄送副本)规则,它会保留原邮件继续处理,同时发送一份独立副本:

:0
* ^From.*@example.com
* ! ^X-Loop: test
{
  :0fhw
  | formail -A "X-Loop: test"
  # 转发给目标地址
  :0
  ! $DEST
  # 密送给指定地址(:0c表示发送副本,不消耗原邮件)
  :0c
  ! $BCCS
}

额外优化建议

你原来的配置把相同匹配条件拆成了三个独立规则,不仅重复执行匹配逻辑,还容易出错。合并成一个规则块后,逻辑更清晰,执行效率也更高。

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

火山引擎 最新活动