Почему одно и то же содержимое по-разному декодируется в зависимости от почтовых клиентов? - PullRequest
0 голосов
/ 22 апреля 2020

Мой код проверяет почтовый ящик и пересылает каждое письмо другому пользователю.
Но я обнаружил, что одно и то же содержимое по-разному декодируется в зависимости от почтовых клиентов (я имею в виду, когда отправляется с account@gmail.com, с account@naver.com и др. c).

Например: что я набрал,
тема: тема
содержимое: это содержимое

для почтового клиента 1:
358 2020-04-22 18:12 : 23,249: run: DEBUG: тема имеет вид: =? Utf-8? B? C3ViamVjdA ==? =
359 2020-04-22 18: 12: 23,249: run: DEBUG: содержимое имеет вид: dGhpcyBpcyBjb250ZW50Cg ==

для почтового клиента 2:
178 2020-04-22 18: 12: 09,636: run: DEBUG: тема имеет вид: =? Utf-8? B? C3ViamVjdA ==? =
179 2020-04-22 18: 12: 09,636: запуск: DEBUG: содержимое получено как: dGhpcyBpcyBjb250ZW50Cg ==

для почтового клиента 3:
300 2020-04-22 18:12 : 16,494: run: DEBUG: тема пришла как: subject
301 2020-04-22 18: 12: 16,494: run: DEBUG: содержимое пришло как: это содержимое

Для 1 и 2 они одинаковы.
Но для 3 это другое.

Мой код с использованием примера imaplib:

typ, rfc = self.mail.fetch(num, '(RFC822)')
raw_email = rfc[0][1]
raw_email_to_utf8 = raw_email.decode('utf-8')
msg=email.message_from_string(raw_email_to_utf8)
content = msg.get_payload() #This is printed for the above debugging log.

Из-за этого некоторые письма отправляются со странным содержимым (темы снова хорошо закодированы)

Почему эта разница, и как я могу получить содержимое для по-разному декодированных?

1 Ответ

1 голос
/ 22 апреля 2020

Что-то делает ненужное кодирование. Это не нужно, но не запрещено. Кодирование

RFC2047 иногда необходимо, но всегда разрешено законом (поскольку разрешить его всегда проще, чем устанавливать точные правила). Вы должны обнаружить кодировку RFC2047 и декодировать ее, когда она присутствует. Если слово начинается с =?, Заканчивается? = И содержит ровно два знака вопроса, то оно кодируется 2047. Существуют библиотеки или функции для декодирования для большинства или всех языков, выполните поиск по запросу "rfc2047".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...