python - Django 或 python 操作电子邮件地址并推断域

标签 python django email email-validation

我希望能够解析电子邮件地址以隔离域部分,并测试电子邮件地址是否属于给定域的一部分。

据我所知,email 模块不会这样做。除了通常的字符串处理和正则表达式例程之外,还有什么值得使用来执行此操作吗?

注意:我知道如何处理 python 字符串。我不需要基本的食谱,但欢迎提供很棒的食谱。

这里的问题本质上是电子邮件地址的格式(示意性地)userpart@sub\.domain\.[sld]+\.tld

剥离@之前的部分很容易;困难的部分是解析域,以确定哪些部分是较大组织域中的子域,而不是通用的二级(或者,我猜甚至更高阶)公共(public)域。

想象一下,解析 user@mail.organization.co.uk 发现该组织的域名是 organization.co.uk,因此能够匹配这两个 mail.organization.co.ukfinance.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/

相关文章:

python - 使用三元运算符附加到字符串时的异常行为

python - 在 Flask Socket.io 中禁用记录器

python - 无法在 Linux 上 pip 安装 psycopg2

python - subprocess.Popen 需要帮助

python - Python 中的不等式和括号

python - 从 Django 管理 UI 调用 Python 脚本(在字段值更改时)

python - 将表单数据保存到数据库并将其发送到API; Django

email - 如何使用 Mailchimp 或 Mandrill 从电子邮件标题中删除 *|MC_PREVIEW_TEXT|*

vba - Excel VBA 中的 Outlook 电子邮件和签名 - .Body 与 .HTMLbody

python : send data of form to one email address