1 Вопрос: Кодировка IDNA электронной почты. Нужно ли кодировать всю электронную почту или каждую часть отдельно?

вопрос создан в Thu, May 2, 2019 12:00 AM

У меня есть электронное письмо с акцентами, которое должно быть закодировано с использованием IDNA (из Python)

Примерно так:

  

CäciliaAbitz@somedomain.net р>

Если я сделаю encode('idna') для всей электронной почты, я получу следующее:

  

xn--cciliaabitz@somedomain-04b.net р>

Домены стали somedomain-04b.net , что ненормально (верно?)

Выполнение кодировки в каждой части электронного письма приводит к:

b''.join([x.encode('idna') for x in email.split('@')])
> b'xn--cciliaabitz-l8a@somedomain.net'

Но я не уверен, что это правильно, работает или я что-то упустил.

    
0
1 ответ                              1                         

RFC 5890 работает с метками, которые в основном являются разделенными точками частями адрес электронной почты. В вашем примере у вас есть только одна метка в локальной части (перед знаком @), «CäciliaAbitz», и две метки в доменной части («somedomain.net»). Если вы кодируете, не обращая внимания на метки, вы кодируете точки, и в результате получается одна метка, где вам нужно несколько меток. При этом ваше предположение о том, что somedomain-04b.net не является нормальным (или допустимым), является правильным.

Чтобы правильно кодировать, вам нужно разделить не только между локальной и доменной частями в @, но также и в любой точке в локальной и доменной частях.

    
2
2019-05-02 17: 20: 18Z
  1. Спасибо, Роберт. Таким образом, в случае чего-то вроде Cäcilia.Abitz@somedomain.net мне нужно кодировать Cäcilia, Abitz somedomain и net и @, затем объединить их с 060035099111100100150506262 и 060035099111100100150 в отдельности, а затем объединить их с 06003509911110010015062626262506250506250350625035062500000
    2019-05-03 09: 25: 39Z
  2. @ CyrilN. Да, именно.
    2019-05-03 14: 20: 02Z
  3. Отлично, спасибо!
    2019-05-06 15: 54: 35Z
.
источник размещен Вот