Уведомления

Группа в Telegram: @pythonsu

#1 Июль 22, 2013 20:50:41

mironich
От:
Зарегистрирован: 2011-05-23
Сообщения: 118
Репутация: +  2  -
Профиль   Отправить e-mail  

Баг emai.header.decode_header или я турлю..

В общем в каком-то RFC описано что заголовки могут быть в формате:=?<code_page>?<encode_method>?<encode_text>?=
В emai.header.decode_header проверяется все это такой регуляркой:

ecre = re.compile(r'''
  =\?                   # literal =?
  (?P<charset>[^?]*?)   # non-greedy up to the next ? is the charset
  \?                    # literal ?
  (?P<encoding>[qb])    # either a "q" or a "b", case insensitive
  \?                    # literal ?
  (?P<encoded>.*?)      # non-greedy up to the next ?= is the encoded string
  \?=                   # literal ?=
  (?=[ \t]|$)           # whitespace or the end of the string
  ''', re.VERBOSE | re.IGNORECASE | re.MULTILINE)
В письме от mail.ru
FROM header выглядит так:
=?windows-1251?B?zvLi5fL7QE1haWwuUnU=?=<otvet@corp.mail.ru>
Он закодирован методом описанным выше…
decode_header возвращает список из кортежей в которых первый элемент тело заголовка(значение), второй кодировка None если ее нету, заголовок выше закодирован…
Но decode_header возвращает список
[('=?windows-1251?B?zvLi5fL7QE1haWwuUnU=?=<otvet@corp.mail.ru>', None)]
Т.к строка закодированная оканчивается не переносом или ?= а <otvet@corp.mail.ru> это мейл ру стандарты нарушает?
Или баг функциии или я туплю?
Зы другой сервис шлет…
Такого вида: =?windows-1251?B?zvLi5fL7QE1haWwuUnU=?= <otvet@corp.mail.ru>
Тоесть получается что на части разбивает.



Отредактировано mironich (Июль 22, 2013 21:14:15)

Офлайн

#2 Июль 23, 2013 01:56:50

pyuser
От:
Зарегистрирован: 2007-05-13
Сообщения: 658
Репутация: +  36  -
Профиль   Отправить e-mail  

Баг emai.header.decode_header или я турлю..

python 3.3.2

from email.header import decode_header
print(decode_header('=?windows-1251?B?zvLi5fL7QE1haWwuUnU=?=<otvet@corp.mail.ru>'))
результат
[(b'\xce\xf2\xe2\xe5\xf2\xfb@Mail.Ru', 'windows-1251'), (b'<otvet@corp.mail.ru>', None)]



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version