我希望能够解析电子邮件地址以隔离域部分,并测试电子邮件地址是否属于给定域的一部分。
据我所知,email
模块不会这样做。除了通常的字符串处理和正则表达式例程之外,还有什么值得使用来执行此操作吗?
注意:我知道如何处理 python 字符串。我不需要基本的食谱,但欢迎提供很棒的食谱。
这里的问题本质上是电子邮件地址的格式(示意性地)userpart@sub\.domain\.[sld]+\.tld
。
剥离@之前的部分很容易;困难的部分是解析域,以确定哪些部分是较大组织域中的子域,而不是通用的二级(或者,我猜甚至更高阶)公共(public)域。
想象一下,解析 user@mail.organization.co.uk
发现该组织的域名是 organization.co.uk
,因此能够匹配这两个 mail.organization.co.uk
和 finance.organization.co.uk
作为 organization.co.uk
的子域。
基本上有两种可能的(非基于 DNS 的)方法:构建一个有限自动机,该自动机了解所有通用 sld 及其与 tld 的关系(包括流行的“假”sld,例如 uk.com
),或者尝试猜测,基于必须有 tld 的知识,并假设如果有三个(或更多)元素,则如果二级域名少于三/四个字符,则二级域名是通用的。每种方法的相对缺点应该是显而易见的。
另一种方法是查看 DNS 条目来确定什么是注册域,但这有其自身的缺点。
无论如何,我宁愿借鉴别人的工作。
最佳答案
根据@dm03514的评论,有一个Python库可以做到这一点:tldextract :
>>> import tldextract
>>> tldextract.extract('foo@bar.baz.org.uk')
ExtractResult(subdomain='bar', domain='baz', tld='org.uk')
关于python - Django 或 python 操作电子邮件地址并推断域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7712762/