我在 SMTP 服务器上的.procmailrc中有以下行:
BODY=`formail -I ""`
后来我将此正文回显到本地文件:
echo "$BODY" >> $HOME/$FILENAME; \
我也试过prinf(但我得到了同样的效果):
printf "$BODY" >> $HOME/$FILENAME; \
当我阅读此文件时,我可以看到编码已更改。这是我得到的:
Administrator System=C3=B3w
虽然应该是(波兰语):
Administrator Systemów
如何直接在.procmailrc或更高版本(bash/python)中解码/编码正文以获得正确的字符串?
我的另一行.procmailrc
正常工作,但它需要带有 perl 编码器的额外管道:
SUBJECT=`formail -xSubject: | tr -d '\n' | sed -e 's/^ //' | /usr/bin/perl -MEncode -ne 'print encode ("utf8",decode ("MIME-Header",$_ )) '`
SUBJECT 包含 UTF8 字符,一切正常。也许有一种方法可以对邮件正文使用类似的解决方案?
好的。我终于把一切都搞定了。这是我所做的:
首先是.procmailrc文件:
VERBOSE=yes
LOGFILE=$HOME/procmail.log
:0f
* ^From.*(some_address@somedomain.com)
| $HOME/python_script.py
现在到python_script.py:
#!/usr/bin/python
from email.parser import Parser
import sys
temp_file = open("/home/(user)/file.txt","w")
temp_file.write("START\n")
if not message.is_multipart():
temp_file.write(message.get_payload(decode=True))
else:
for part in message.get_payload():
if part.get_content_type() == 'text/plain':
temp_file.write(part.get_payload(decode=True))
temp_file.close()
调试最困难的部分是.procmailrc配方,我必须在其中测试 :0、:0f、:0fbW 等的许多选项……最后找到最适合的选项。
下一个有问题的步骤是直接在.procmailrc中解码的 $BODY 部分。不过,我通过摆脱所有东西并将所有内容移至 Python 脚本找到了解决方案。正如三人所建议的那样。