如何使用procmail获取消息到一个variables

我试图将RANCID安装所logging的更改logging下来并发送到我们拥有的内部通信广播系统。 我可以通过netcat直接与之对话,例如这可以工作:

echo "Hello world" | netcat localhost 12345 

RANCID通过电子邮件发送更改,所以我试图使用procmail拦截这些电子邮件,并将它们发送到我们的本地pastebin,然后将响应(包含URL)传递给netcat。

我可以在命令行上复制整个stream程如下:

 testmail=$(cat testmail.txt) URL=$(curl --silent -d "text=$testmail" -d "title=Logged Activity" http://paste/api/create) && echo "RANCID logged some changes: $URL" | netcat localhost 12345 

这是我的.procmailrc目前:

 ## store the body in MESSAGE :0 b MESSAGE=| ##Send that message to Wirehive pastebin :0 | URL=$(curl -d "text=$MESSAGE" -d "title=Logged Activity" http://paste/api/create) && echo "RANCID logged some changes: $URL" | netcat localhost 12345 

检查邮件日志,邮件路由工作正常。 随着文件都注释掉,并检查mutt中的接收用户邮箱,我可以看到邮件进来。与文件取消注释邮件不会出现在邮箱中,所以.procmailrc正在处理,邮件传递给它。

这可能是值得注意的是在Ubuntu 12.04上。

MESSAGE分配与您编写的方式无关。 尝试这个:

 :0b MESSAGE=| cat 

此外, URL=...赋值不是一个有效的命令; 你必须将variables赋值重构到配方之外:

 URL=`curl --silent -d "text=$testmail" -d "title=Logged Activity" http://paste/api/create` :0 | echo "RANCID logged some changes: $URL" | netcat localhost 12345 

…或者你可以通过调用一个shell来使它工作,通常是通过添加一个SHELLMETAS

 :0 # notice semicolon at end | URL=$(curl -d "text=$MESSAGE" -d "title=Logged Activity" http://paste/api/create) \ && echo "RANCID logged some changes: $URL" | netcat localhost 12345 ; 

…但我实际上喜欢前者,更可读的select。

如果你能以某种方式重构curl命令行来读取标准input并写入标准输出,这可以变得更加优雅,至less可以避免单独的MESSAGEvariables,甚至可能被重构为一行。