-1

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 - nn - - pipe user=michal flags=FR argv=/home/michal/test.sh

  • 重新加载后缀

有什么问题?如果我这样配置,收到邮件后会执行脚本“test.sh”,但收到的邮件不会投递到邮箱,收到后会立即删除。

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

4

1 回答 1

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"
于 2012-07-28T15:18:18.543 回答