Postfix传输 - 在接收邮件后调用脚本

时间:2012-07-28 13:06:54

标签: linux postfix-mta

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”将被执行,但收到​​的邮件将不会被发送到邮箱,收到邮件后会立即删除。

那么 - 如何避免这种情况?我需要执行脚本,但是传入的邮件也应该发送到我的邮箱。

1 个答案:

答案 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"