У меня возникают проблемы при попытке обработать почту с помощью procmail и Python.Я использую синтаксис примерно так:
:0
...[Filter] | (python3 script.py) >> file.txt
в качестве синтаксиса procmail.Мой скрипт Python извлекает почту из stdin, преобразует MIME в Unicode и выводит ее в файл следующим образом:
def main():
dataset = Data()
indata = (Parser().parse(sys.stdin)).as_string()
indata = (quopri.decodestring(indata)).decode('utf-8')
arrayofstrings = indata.split("\n")
for line in arrayofstrings:
[write some data to <dataset>]
filename = "outfile.txt"
file = open(filename, "w")
file.write(dataset.toString())
Data () - это структура, которая хранит серию строк Unicode и toString () объединяет их,
Если я запускаю этот скрипт в bash с сохраненной почтой, например:
cat test.txt | python3 script.py
, он корректно записывает данные в файл в формате Unicode.
Однако, если яполучить письмо и обработать его, procmail записывает в журнал следующую ошибку:
UnicodeEncodeError: кодек «ascii» не может кодировать символ «\ xdf» в позиции 83: порядковый номер не находится в диапазоне (128)
Если я изменю последнюю строку скрипта python на:
file.write(dataset.toString().encode('utf-8'))
, я получу правильно закодированную строку в файле.Я хочу это в Unicode, хотя.