Debian Sid,来自Sid的最新后缀。
我需要在用户收到邮件后调用bash脚本。那么,我做了什么:
创建文件/ etc / postfix / transport,例如: mail@domain.com myscript
运行命令来创建数据库:postmap transport
添加到main.cf:transport_maps = hash:/ etc / postfix / transport
添加到master.cf:myscript unix - n n - - pipe user = michal flags = FR argv = / home / michal / test.sh
重新加载后缀
有什么问题?如果我这样配置,收到邮件后,脚本“test.sh”将被执行,但收到的邮件将不会被发送到邮箱,收到邮件后会立即删除。
那么 - 如何避免这种情况?我需要执行脚本,但是传入的邮件也应该发送到我的邮箱。
答案 0 :(得分:1)
使用Procmail。
:0c
| $HOME/test.sh
脚本接收标准输入的完整消息,但如果您不想自己解析消息,则有标准技术可将标头值提取到Procmail变量中。你可以管道到formail
:
SUBJECT=`formail -zcxSubject:`
或者你可以进入MATCH,这可以避免产生外部过程,但对于更复杂的任务来说有点棘手;
:0
* ^Subject:[ ]*\/.+
{ SUBJECT=$MATCH }
([]内的空格应该是空格和制表符);无论哪种方式,您现在都可以在$SUBJECT
命令行中传递test.sh
作为参数。显然,其他标题值可以以类似的方式提取到变量中。
PS。您无法像这样内联formail调用,因为它将使用管道中的标准输入。
:0c
| $HOME/test.sh "`formail -zcxSubject:`" # erroneous!
相反,您需要将其拆分,如下所示:
:0
* ^Subject:[ ]*\/.+
{ SUBJECT=$MATCH }
:0c
| $HOME/test.sh "$SUBJECT"