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スクリプトに移動することで、解決策を見つけました。トリプルが示唆したように。