Как вы декодируете почтовое сообщение в двоичном коде на Python?

#python #google-app-engine #email #encoding #binary

#python #google-app-engine #Адрес электронной почты #кодирование #двоичный

Вопрос:

Я пишу приложение Google App engine, которое обрабатывает входящую почту, и вот код, который я в настоящее время использую для обработки почтовых сообщений:

 for content_type, body in email_bodies:
#8bit bug in mail messages - see bug report here
#http://code.google.com/p/googleappengine/issues/detail?id=2383
if body.encoding == '8bit':
    body.encoding = '7bit'

#test for html content
if content_type == "text/html":
    #parse html result

if content_type == "text/plain":
    decoded_msg_body = body.decode()
  

Однако я только что получил сообщение, в котором использовалась схема двоичного кодирования, и когда моя программа попыталась обработать сообщение с помощью body.decode(), я получил UnknownEncodingError . Как эта программа должна анализировать двоичный тип содержимого? Кроме того, как я могу имитировать этот тип сообщения в моей локальной версии GAE, чтобы я мог отлаживать и тестировать его?

Я ценю вашу помощь, Кевин

Ответ №1:

Вместо того, чтобы изобретать велосипед, вам следует попробовать встроенный в Python анализатор электронной почты.

http://docs.python.org/library/email.parser.html

Он предназначен для обработки запросов, связанных с получением всевозможных форматов электронной почты в хороший объект Python. Используйте его для синтаксического анализа, и вы получите хорошо предсказуемые объекты для работы.

Модуль электронной почты не выполняет отправку и получение сообщений, он просто помогает собрать их вместе и проанализировать.

Комментарии:

1. Это будет работать на GAE, если вы используете свойство «original» сообщения, что вполне справедливо. Спасибо, Пол.

2. Потрясающе. Я не был уверен, насколько хороша обработка нечетных случаев, но, учитывая, как эти вещи обычно работают, я решил, что, вероятно, это был хороший выстрел.