我有一封带有重音的电子邮件,需要使用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 :(得分:2)
RFC 5890适用于标签,这些标签通常是电子邮件地址中以点分隔的部分。在您的示例中,本地部分(@符号之前)只有一个标签“CäciliaAbitz”,而域部分(“ somedomain.net”)只有两个标签。如果在编码时不注意标签,则对点进行编码,结果是一个标签,而您需要多个标签。这样,您就认为“ somedomain-04b.net”不正常(或有效)是正确的。
要正确编码,您不仅需要在@的本地部分和域部分之间进行拆分,还需要在本地部分和域部分内的任何点处进行拆分。