欢迎访问宙启技术站
智能推送

Python中基于rfc822标准的电子邮件验证方法

发布时间:2023-12-24 15:27:08

Python 中可以使用 email 模块来进行基于 RFC 822 标准的电子邮件验证。该模块提供了一系列工具来解析和分析电子邮件,包括验证电子邮件地址的功能。

下面是一个使用例子,展示如何使用 email 模块来验证电子邮件地址:

import re
from email.utils import parseaddr

def is_valid_email(email):
    # 通过正则表达式验证电子邮件地址格式
    pattern = r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$'
    if not re.match(pattern, email):
        return False
    
    # 使用 email 模块解析电子邮件地址
    name, addr = parseaddr(email)
    if not addr:
        return False
    
    # 验证邮箱域名的 MX 记录
    domain = addr.split('@')[1]
    try:
        import dns.resolver
        answers = dns.resolver.query(domain, 'MX')
        if len(answers) == 0:
            return False
    except ImportError:
        pass
    
    return True

# 测试例子
emails = [
    'test@example.com',
    'test@-example.com',
    'test@example',
    '@example.com',
    'test@localhost',
    'test@valid-domain.com'
]

for email in emails:
    if is_valid_email(email):
        print(f'{email} is a valid email address.')
    else:
        print(f'{email} is not a valid email address.')

在以上例子中,我们首先定义了 is_valid_email 函数,该函数通过正则表达式检查电子邮件地址的格式是否正确。接下来,我们使用 parseaddr 函数从电子邮件中获取地址部分,并进行验证。最后,我们通过查询 MX 记录来验证邮件的域名部分是否有效。

在测试例子中,我们使用了一组不同的电子邮件地址来测试验证函数。根据验证的结果,我们会打印出验证结果。

注意:在验证邮件的域名部分时,我们使用了 dns.resolver 模块。这个模块需要安装 dnspython 库才能使用。如果你的环境中没有安装该库,则可以将验证 MX 记录的代码块删除或注释掉。