如果从某个地址转发,请不要转发

时间:2012-11-13 11:39:20

标签: procmail

我有一个procmail配方,用于存储电子邮件并在更改标题后转发它:

:0c
${DEFAULT}

:0fhw
| formail -i "From: changedemail@address.com"

:0
* !^From:.*\<donforward@domain\.com\>
{
 ! other@recipient.net    # That's exclamation mark, address to forward to
}

现在我只想转发来自某个地址的,但我无法让它工作,不知何故它似乎永远不会匹配。

我需要添加什么才能让它发挥作用,同时也不会将电子邮件存储两次(这也是在尝试使用解决方案时发生的情况,我认为因为配方继续存在某种默认行为)

1 个答案:

答案 0 :(得分:1)

操作周围的大括号是语法错误。

:0  # is the address spelled correctly?  not don_T_forward?
* !^From:.*\<donforward@domain\.com\>
! other@recipient.net

(或者,或者多余,

:0
* !^From:.*\<donforward@domain\.com\>
{
 :0
 ! other@recipient.net
}

另见下文。)

但是,这可以永远不会匹配,因为您更改了上一个食谱中的From:地址。也许添加一些逻辑来保留原始的From:,或者毕竟在大括号中组合动作:

:0c
${DEFAULT}

:0
* !^From:.*\<donforward@domain\.com\>
{
  :0fhw
  | formail -i "From: changedemail@address.com"
  :0
  ! other@recipient.net
}

是的,如果任何食谱未成功传递消息,则默认操作是传递到$DEFAULT。您可能希望反转:0c逻辑,以便将原始文件传送到常规收件箱(前提是您没有任何后续配方将其传送到其他地方)并且副本将被转发。

# Drop the $DEFAULT delivery from above
:0c
* !^From:.*\<donforward@domain\.com\>
{
  :0fhw
  | formail -i "From: changedemail@address.com"
  :0
  ! other@recipient.net
}

对于疑难解答,使用VERBOSE=yes运行是有意义的。在有问题的配方之前添加此指令,然后在消息到达时检查日志输出。 (更多)请参阅http://porkmail.org/era/mail/procmail-debug.html