Кодировка IDNA электронной почты. Нужно ли кодировать всю электронную почту или каждую часть отдельно? - PullRequest
0 голосов
/ 02 мая 2019

У меня есть электронное письмо с акцентами, которое должно быть закодировано с использованием 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'

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

1 Ответ

2 голосов
/ 02 мая 2019

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

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

...