【问题标题】:procmail not piping e-mail content to a fileprocmail 没有将电子邮件内容传送到文件
【发布时间】:2013-07-17 23:05:47
【问题描述】:

我有一个 postfix 服务器和 procmail 安装并工作。 问题是当我尝试将电子邮件的内容输出到文件时。

我有以下脚本: /var/log/user1/fooscript.sh

#!/bin/bash
echo "Trying to get e-mail" > success.txt
echo $1 >> success.txt

/var/log/user1/.procmailrc

VERBOSE=off
PMDIR=$HOME/.procmail
LOGFILE=$PMDIR/procmail.log
INCLUDERC=$PMDIR/rc.filters

/var/log/user1/.procmail/rc.filters

:0
* ^From:(.*\<)?(test@gmail\.com)\>
| /var/log/user1/fooscript.sh

发送电子邮件后,/var/log/user1/.procmail/rc.filters 包含:

From test@gmail.com  Thu Jul 18 05:08:13 2013
  Folder: /var/log/user1/fooscript.sh                       513

但成功文件只显示:

Trying to get e-mail  
(empty line)

我已经 chmod 777 所有文件和目录,所以不要认为这是权限问题。

任何帮助将不胜感激。

【问题讨论】:

  • 你为什么要把不是日志文件的文件放在/var/log
  • chmod 777 几乎不是任何事情的正确答案。您应该立即消除损坏或重新安装操作系统。

标签: email procmail


【解决方案1】:

您的脚本通过标准输入 (STDIN) 获取消息。试试:

 #!/bin/bash
 echo "Trying to get e-mail" > success.txt
 # append data read from STDIN to success.txt file
 cat >> success.txt

顺便说一句,对于更复杂的脚本,使用自定义锁来避免并行运行两个脚本:

:0 w :fooscript.lock
* ^From:(.*\<)?(test@gmail\.com)\>
| /var/log/user1/fooscript.sh

【讨论】:

  • 非常感谢!我认为您没有更改原始脚本,stdin 提示非常有用,并且现在可以使用。您介意在答案中编辑脚本吗?顺便说一句,也许您有一个想法,如果我要将电子邮件通过管道传输到 c++ 可执行文件中...我应该立即在代码中 cin > 还是将其作为参数传输?
  • @Stasv AFAIK 您的c++ 程序将打开标准输入。只是在阅读您想要的内容之前不要关闭它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-09
  • 2011-05-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多