#python-3.x #email #mbox
#python-3.x #Адрес электронной почты #mbox
Вопрос:
У меня есть простая программа фильтрации электронной почты, которая удовлетворительно работает на Python 2 в течение многих лет, и я пытаюсь преобразовать ее в Python 3. В Python 3 все работает нормально, если в сообщении нет «расширенных» (т. Е. Не ASCII) символов, но если есть, мой вызов mbx.add () завершается ошибкой с этой ошибкой:-
Traceback (most recent call last):
File "/home/chris/.mutt/bin/filter.py", line 102, in <module>
mailLib.deliverMboxMsg(dest, msg, log)
File "/home/chris/.mutt/bin/mailLib.py", line 52, in deliverMboxMsg
mbx.add(msg)
File "/usr/lib/python3.8/mailbox.py", line 603, in add
self._toc[self._next_key] = self._append_message(message)
File "/usr/lib/python3.8/mailbox.py", line 758, in _append_message
offsets = self._install_message(message)
File "/usr/lib/python3.8/mailbox.py", line 830, in _install_message
self._dump_message(message, self._file, self._mangle_from_)
File "/usr/lib/python3.8/mailbox.py", line 215, in _dump_message
gen.flatten(message)
File "/usr/lib/python3.8/email/generator.py", line 116, in flatten
self._write(msg)
File "/usr/lib/python3.8/email/generator.py", line 181, in _write
self._dispatch(msg)
File "/usr/lib/python3.8/email/generator.py", line 214, in _dispatch
meth(msg)
File "/usr/lib/python3.8/email/generator.py", line 432, in _handle_text
super(BytesGenerator,self)._handle_text(msg)
File "/usr/lib/python3.8/email/generator.py", line 249, in _handle_text
self._write_lines(payload)
File "/usr/lib/python3.8/email/generator.py", line 155, in _write_lines
self.write(line)
File "/usr/lib/python3.8/email/generator.py", line 406, in write
self._fp.write(s.encode('ascii', 'surrogateescape'))
UnicodeEncodeError: 'ascii' codec can't encode characters in position 30-32: ordinal not in range(128)
Основная программа просто считывает входящее сообщение из стандартного ввода (через .forward) и преобразует его в сообщение с:-
msg = mailbox.mboxMessage(sys.stdin.read())
Затем он доставляется в локальный файл mbox с:-
mbx.add(msg)
где mbx
находится экземпляр mailbox.mbox
Итак, что я должен делать, чтобы заставить это работать в Python 3, нужно ли мне где-то явно кодировать и декодировать или что?