【问题标题】:redirecting email text from procmail into bash script将电子邮件文本从 procmail 重定向到 bash 脚本
【发布时间】:2013-07-31 17:08:54
【问题描述】:

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

首先,这是 .procmailrc 中将电子邮件交给脚本的例程:

:0c:
* Subject: ^Ingest_q.*
| /home/myname/procmail/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

【问题讨论】:

  • 如果您无法打开日志记录,我怀疑您的 .procmailrc 永远不会被读取,因此配方永远不会被触发。试试 debugging 你的 procmail 设置。
  • 谢谢你,Ansgar——这是一个有用的页面。我正在处理它。

标签: bash redirect input procmail


【解决方案1】:

引用您的尝试:

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

正则表达式错误,^ 只匹配行首,所以它不能出现在Subject: 之后。试试这个吧。

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

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

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

(旧的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 文件的完整路径。

【讨论】:

    猜你喜欢
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-11
    • 2014-11-27
    • 2020-03-22
    相关资源
    最近更新 更多