如何在转发前存储电子邮件的本地副本(在 procmail 中)

How to store local copy of email before forwarding (in procmail)

这会将电子邮件转发到存储在变量 EMAIL_ADDR

中的地址
:0 
* ^From
! $EMAIL_ADDR

我想保存之前电子邮件的本地副本 它被转发了。不确定这样做的语法。 我知道这不行:

:0 
* ^From
| tee $FILE
! $EMAIL_ADDR 

试试下面的脚本(它基于 man procmailex)。

:0 
* ^From
{
   # use lock file to prevent simultaneous deliveries 
   :0 c:tee.lock
   | tee $FILE

   :0
   ! $EMAIL_ADDR
 }

您可以直接使用邮箱文件的名称而不是| tee $FILE

常用方法是使用 "clone" 标志。

:0c
! $EMAIL_ADDR

# Whatever else you want to do with the message
:0:
$FILE

由于每条消息都有一个 ^From 我假设您根本不知道该条件是可选的;要无条件地做某事,只需完全省略条件正则表达式行。如果不是这种情况,您可以在一个条件下用大括号中的食谱块对多个操作进行分组:

:0
* common condition
{
   :0c
   ! $EMAIL_ADDR

   :0:
   $FILE
}

这是一个古老的常见问题解答; http://www.iki.fi/era/procmail/mini-faq.html#c-flag

您可以有多个条件,但只能有一个动作。如果愿意,您可以使用 tee 将副本保存到文件,然后通过管道传输到 $SENDMAIL;但我不建议这样做,因为 tee 输出文件需要有一个锁定文件,以防止多个 Procmail 进程同时将多个消息的交错片段传递到同一个文件;例如,参见 http://www.iki.fi/era/procmail/mini-faq.html#locking