gpt4 book ai didi

linux - procmail 处理后的电子邮件正文格式

转载 作者:太空宇宙 更新时间:2023-11-04 11:03:14 24 4
gpt4 key购买 nike

我有以下场景:

GNU/Linux 机器上的 SMTP 服务器正在接受邮件。已接受的邮件正在发送到 procmail 进行进一步处理。这是我的 .procmailrc:

VERBOSE=yes
LOGFILE=$HOME/procmail.log
SUBJECT=`formail -xSubject: | tr -d '\n' | sed -e 's/^ //' | /usr/bin/perl -MEncode -ne 'print encode ("utf8",decode ("MIME-Header",$_ )) '`
FROM=`formail -rt -xTo:`
DATE=`formail -xDate:`
BODY=`formail -I ""`
:0fbW
* ^From.*some_special_name@special_server.com
| echo "FROM:$FROM" > $HOME/res.txt; \
echo "DATE:$DATE" >> $HOME/res.txt; \
echo "SUB:$SUBJECT" >> $HOME/res.txt; \
echo "BODY:" >> $HOME/res.txt; \
echo $BODY >> $HOME/res.txt; process.py

这个小脚本首先创建一个本地文件 $HOME/res.txt,然后启动另一个名为 process.py 的脚本。现在,$HOME/res.txt 中填充了以下条目:

FROM:some_special_name@special_server.com
DATE:Mon, 06 Oct 2014 13:14:32 +0200
SUB:Some subject
BODY:
This is a multi-part message in MIME format. --------------030006020609010705060803 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Hello, Some kind of long tekst where I cannot see the line feed chars nor any other control chars...

主体包含没有主体原始格式的原始字符串。我的意思是过滤掉\n 或\t 字符。 process.py 脚本要求邮件的正文部分保持电子邮件的原始格式。

我怎样才能做到这一点?

最佳答案

与在 shell 脚本中一样,除非您特别要求 shell 对值执行标记拆分和通配符扩展,否则您需要正确地对变量进行双引号。参见例如this answer以获得详细的解释。

  echo "$BODY" >>$HOME/res.txt; \

另外,我不明白你为什么要这样混合多个 Action 。字里行间,我猜你的意思是 process.py 读取 res.txt 而不是它的标准输入;如果它正在读取标准输入,它会收到正确的、未损坏的消息。

在没有上下文的情况下,我会冒险推测 f 标志也是错误的。除非 process.py 在标准输出上打印一条新消息,它应该替换 Procmail 配方文件其余部分的传入消息,否则您应该简单地将其取出。

这里还有一个竞争条件:如果多个消息大致同时到达(如果您的系统负载很重,“同时”可能是一个相当宽的窗口),它们将覆盖 res.txt 并以不可预测的方式践踏彼此的结果。通常的解决方案是使用本地锁定文件;但更好的解决方案是消除对临时文件的需求,并更改 process.py 以便它读取标准输入。

既然您无论如何都在使用 Python,我会用 Python 进行所有的 header 解析,formail -rtzxTo: 可能是个异常(exception),它的重新实现相当复杂;这将显着简化您的 Procmail 配方,并可能改进 process.py(或您创建的包装器,如果您无法修改它)。

关于linux - procmail 处理后的电子邮件正文格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26216214/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com