将电子邮件文本从procmail重定向到bash脚本

时间:2013-07-31 17:08:55

标签: bash redirect input procmail

我正在尝试将与特定模式匹配的电子邮件重定向到shell脚本,该脚本将创建包含文本的文件,并带有日期戳文件名。

首先,这是来自.procmailrc的例程,它将电子邮件发送到脚本:

:0c:
* Subject: ^Ingest_q.*
| /home/myname/procmail/process

这是脚本'process':

#!/bin/bash

DATE=`date +%F_%N`
FILE=/home/myname/procmail/${DATE}_email.txt

while read line
        do
            echo "$line" 1>>"$FILE";
        done

我对此感到非常沮丧,因为我可以在命令行上将文本管道传输到此脚本,并且工作正常:

mybox-248: echo 'foo' | process
mybox-249: ls
2013-07-31_856743000_email.txt  process

该文件包含单词'foo。'

我一直在尝试获取一个电子邮件文本,以便将输出作为带有日期戳的文件输出几个小时,但没有任何效果。

(我也开始在我的.procmailrc中登录,但这也没有用 - 我不是想提出第二个问题,只是想知道这是否可能提供一些暗示我是什么意思可能做错了......)。

谢谢,

GB

1 个答案:

答案 0 :(得分:2)

引用您的尝试:

:0c:
* Subject: ^Ingest_q.*
| /home/myname/procmail/process

正则表达式错误,^仅在行首处匹配,因此在Subject:之后不会发生。试试这个。

:0c:process.lock
* ^Subject: Ingest_q
| /home/myname/procmail/process

我还指定了一个命名的锁文件;我不相信Procmail可以仅从脚本名称推断锁文件名。由于您可能同时传递多封电子邮件,并且您不希望他们的日志记录混合在日志文件中,因此此处需要使用锁定文件。

最后,正则表达式中的尾随.*完全是多余的,所以我删除了它。

(olde Procmail mini-FAQ也解决了这些both中的issues。)

我意识到你的食谱可能只是一个快速的测试,然后你开始做更大的事情,但调用process脚本的整个食谱可以完全取代像

MAILDIR=/home/myname/procmail
DATE=`date +%F_%N`
:0c:
${DATE}_email.txt

这将生成Berkeley mbox格式,即每个消息在真实标题之前应该有一个From_伪标头;如果你不确定是否已经是这种情况,你应该使用procmail -Yf-来确保这样做(否则实际上没有办法告诉一条消息的结束和另一条消息的开始;这适用于你的原始解决方案,这个替代品。)

因为Procmail会看到您要传递的文件名,所以它现在可以推断出一个锁定文件名,作为次要奖励。

使用MAILDIR指定目录是执行此操作的常规方法,但是,如果您愿意,可以指定mbox文件的完整路径。