如何设置procmail记录的方式

时间:2014-04-15 20:42:16

标签: procmail

现在,在非详细日志中,procmail没有记录收件人是谁。 它只是记录发件人是谁,主题,日期和交付。

From info@essegisistemi.it  Tue Apr 15 20:33:19 2014
 Subject: ***** SPAM 7.3 ***** Foto
  Folder: /usr/lib/dovecot/deliver -d christian -m Junk                  132417

在哪里可以配置将To和CC包含在日志文件中?

1 个答案:

答案 0 :(得分:2)

您只需将要记录的字符串分配给LOG伪变量。

通常您要显式添加换行符。像这样:

NL="
"
TO=`formail -zxTo:`
Cc=`formail -zxCc:`
LOG=" To: $TO$NL Cc: $CC$NL"

这些通常会在" log abstract"之前结束。 (你在问题中有什么)。如果您需要完全控制记录的内容,可以设置LOGABSTRACT=no并实现您自己的日志摘要。 (但这非常棘手。)

另请注意,日志记录可能是异步的。日志摘要一次全部写入,但是如果有大量同时到达的消息,您可能希望在日志条目中添加消歧信息,或者(在绝望中)在日志记录期间强制锁定,这样就不会有两条消息可以执行同时记录。

LOCKFILE=procmail.lock
# Critical section -- only one Procmail instance at a time can execute these recipes
LOG="fnord$NL"
:0w
| /usr/lib/dovecot/deliver -d "$USER" -m "$FOLDER"
# delivery succeeded, lockfile will be released

消除歧义的信息可能只是进程ID。为了将它也包含在日志摘要中,您需要以某种方式对其进行走私。不确定如何使用Dovecot,是否有一个可以传递的选项,只会被忽略但由Procmail记录?

TO=`formail -zxTo:`
LOG="[$$] To: $TO$NL"
CC=`formail -zxCc:`
LOG="[$$] Cc: $CC$NL"
:
:
# deliver
:0w
| deliver -d "$USER" -m "$FOLDER" -o ignore=$$

...最终应记录类似Folder: deliver -d you -m INBOX -o ignore=1742的内容,其中1742将是进程ID,以便您可以在以前的日志条目中找到相同的PID。