电子邮件IDNA编码。我们是否需要对整个电子邮件或每个部分分别进行编码?

时间:2019-05-02 15:05:31

标签: email

我有一封带有重音的电子邮件,需要使用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 个答案:

答案 0 :(得分:2)

RFC 5890适用于标签,这些标签通常是电子邮件地址中以点分隔的部分。在您的示例中,本地部分(@符号之前)只有一个标签“CäciliaAbitz”,而域部分(“ somedomain.net”)只有两个标签。如果在编码时不注意标签,则对点进行编码,结果是一个标签,而您需要多个标签。这样,您就认为“ somedomain-04b.net”不正常(或有效)是正确的。

要正确编码,您不仅需要在@的本地部分和域部分之间进行拆分,还需要在本地部分和域部分内的任何点处进行拆分。