迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > Python >

在 Python 中验证电子邮件地址

作者:迹忆客 最近更新:2023/05/31 浏览次数:

电子邮件验证是封闭应用程序中用户旅程的重要组成部分,它很重要,尤其是对于安全性和减少用户流失而言。 验证电子邮件有多种方法,了解典型电子邮件地址的结构很重要。

有一些内置功能(例如正则表达式)和库(例如 dnspython)可以帮助完成这些过程。 本文将解释如何使用这些功能和库在 Python 中验证电子邮件。


在 Python 中使用正则表达式验证电子邮件

正则表达式,通常称为正则表达式,是一个字符序列,用于指定文本中的搜索模式,有助于字符串中的搜索算法以及查找、查找和替换。

使用正则表达式,我们可以在从用户那里收到的电子邮件地址中找到某些模式。 每个电子邮件地址都具有相同的模式,[用户名]@[smtp 服务器].com。

我们可以使用正则表达式来查找用户名部分和 SMTP 服务器部分。 要了解如何使用正则表达式,您必须了解元字符、特殊序列和集。

利用这些知识,我们可以使用 compile 方法创建和编译正则表达式模式,并使用 match 方法比较用户电子邮件地址的字符串以进行验证。 在 Python 中,要使用正则表达式,我们需要 re 库,它支持正则表达式。

import re

user_email = input("Enter your Email Address: ")
pattern = re.compile(r"\"?([-a-zA-Z0-9.`?{}]+@\w+\.\w+)\"?")

if not re.match(pattern, user_email):
    print(f"{user_email} is not a valid email address")
else:
    print(f"Your {user_email} is a valid email address")

输出:

PS C:\Users\akinl\Documents\Python> python email.py
Enter your Email Address: akin@gm.com
Your akin@gm.com is a valid email address
PS C:\Users\akinl\Documents\Python> python email.py
Enter your Email Address: dx@s
dx@s is not a valid email address

\"?([-a-zA-Z0-9.?{}]+@\w+\.\w+)\"? 字符串包含我们将与用户电子邮件地址进行比较的正则表达式模式。

对于第一个输入 akin@gm.com,电子邮件包含所有必需的模式和结构,以生成从用户名到 SMTP 服务器的有效电子邮件。 但是,对于 dx@s,SMTP 服务器是不存在的。

我们还可以使用 fullmatch 方法检查匹配项,这是 Python 3.x 最喜欢的方法。 代码是类似的,但我们需要改变的只是匹配方法为fullmatch。

match 和 fullmatch 的区别在于 match 只匹配开头,而 fullmatch 匹配整个字符串文本直到结尾。

import re

user_email = input("Enter your Email Address: ")
pattern = re.compile(r"\"?([-a-zA-Z0-9.`?{}]+@\w+\.\w+)\"?")

if not re.fullmatch(pattern, user_email):
    print(f"{user_email} is not a valid email address")
else:
    print(f"Your {user_email} is a valid email address")

输出:

PS C:\Users\akinl\Documents\Python> python email.py
Enter your Email Address: akin@gmail.com
Your akin@gmail.com is a valid email address

有了这个,我们可以检查一个有效的电子邮件结构,虽然我们不能检查 SMTP 服务器是否存在,这同样重要。 这就是下一个功能的用武之地。


使用 dnspython 在 Python 中验证电子邮件

使用 dnspython 库,我们可以验证电子邮件的 SMTP 部分以查看它是否真实且没有被编造。 在我们检查并验证电子邮件后,我们可以拆分 SMTP 服务器的部分并使用 resolve 方法进行检查。

由于 dnspython 不是内置库,我们需要通过 pip 安装它。

pip install dnspython

安装 dnspython 后,我们可以将其导入到我们的代码中,并使用 resolve 方法检查有效的 SMTP 服务器。

import dns.resolver

try:
    answers = dns.resolver.resolve('google.com', 'MX')
    for rdata in answers:
        print('Host', rdata.exchange, 'has preference', rdata.preference)
    print(bool(answers))
except dns.exception.DNSException as e:
    print("Email Doesn't Exist")

输出:

Host smtp.google.com. has preference 10
True

要检查 SMTP 服务器,我们将 MX 属性传递给 resolve 方法以检查邮件交换记录,返回的 rdata 可用于查看交换和首选项属性值。

但是,重要的是使用 bool 函数检查答案绑定中是否有值。 如果那里没有值,则表示 SMTP 服务器无效。

要进行全面的电子邮件验证检查,我们可以结合使用正则表达式和 dnspython 代码。

import dns.resolver
import re

user_email = input("Enter your Email Address: ")
pattern = re.compile(r"\"?([-a-zA-Z0-9.`?{}]+@\w+\.\w+)\"?")

if not re.fullmatch(pattern, user_email):
    print(f"{user_email} is not a valid email address.")
else:
    domain = user_email.rsplit('@', 1)[-1]

    try:
        answers = dns.resolver.resolve(domain, 'MX')
        if bool(answers):
            print(f"Your {user_email} is a valid email address.")
    except dns.exception.DNSException as e:
        print("Not a valid email server.")

输出:

PS C:\Users\akinl\Documents\Python> python testEmail.py
Enter your Email Address: akin@gmail.com
Your akin@gmail.com is a valid email address.
PS C:\Users\akinl\Documents\Python> python testEmail.py
Enter your Email Address: ds.cem@fex.co
Your ds.cem@fex.co is a valid email address.
PS C:\Users\akinl\Documents\Python> python testEmail.py
Enter your Email Address: wer@fghj.com
Your wer@fghj.com is a valid email address.
PS C:\Users\akinl\Documents\Python> python testEmail.py
Enter your Email Address: df@werabsjaksa.com
Not a valid email server.
PS C:\Users\akinl\Documents\Python> python testEmail.py
Enter your Email Address: des@python.exe
Not a valid email server.

当 SMTP 服务器不存在时,try/except 部分有助于处理某些异常。

上一篇:使用 Python 向多个地址发送电子邮件

下一篇:没有了

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

使用 Python 向多个地址发送电子邮件

发布时间:2023/06/01 浏览次数:124 分类:Python

在本文中,我们将演示如何使用 Python 编程语言向使用不同电子邮件地址的不同收件人发送电子邮件。 具体来说,我们将向许多不同的人发送电子邮件。使用 Python 向多个地址发送电子邮件

Python 中的 SendGrid

发布时间:2023/06/01 浏览次数:129 分类:Python

SendGrid 是一家 SMTP 服务提供商,提供 Web API 以允许客户处理集成信息。 通过该服务提供的 API 密钥,可以在很短的时间内轻松发送各种电子邮件。

Python 线程优先级

发布时间:2023/06/01 浏览次数:159 分类:Python

使用 Python 线程,我们可以同时运行程序的不同部分,使您的程序设计更容易。 如果您了解一些 Python,我们将向您展示如何使用线程来加速您的 Python 程序。Python 中的线程

Python 线程队列

发布时间:2023/06/01 浏览次数:65 分类:Python

本篇文章将介绍限制 Python 中的活动线程数。Python 中的线程 Python 中的线程允许多个执行线程在单个进程中同时运行。

在 Python 中实现最小堆

发布时间:2023/06/01 浏览次数:181 分类:Python

本篇文章将介绍最小堆及其在 Python 中的实现。Python 中的最小堆 每个父节点都小于或等于最小堆中的子节点。 它遵循升序,优先级总是与较小的节点。

Python Heapq 窥视

发布时间:2023/06/01 浏览次数:54 分类:Python

我们可以使用 heap[0] 表示法、heappop() 函数和 nsmallest() 函数来查看 Python 中堆的最小元素。

Python 中十六进制数的按位异或

发布时间:2023/06/01 浏览次数:109 分类:Python

本文的主要目的是演示如何在 Python 的十六进制数字系统中处理 XOR 数字。Python 中十六进制数的按位异或 XOR 是按位运算符,意思是异或。

在 Python 中将十六进制转换为 Base64

发布时间:2023/06/01 浏览次数:85 分类:Python

本篇文章将介绍在 Python 中将 hex 转换为 base64 的方法。使用 Python 中的 codecs 模块将 HEX 转换为 BASE64 Python 中的 codecs 模块提供了 encode() 和 decode() 方法来实现不同文本编码格式之间的转换。

Python 中的 Fama-Macbeth 回归

发布时间:2023/06/01 浏览次数:68 分类:Python

本篇文章介绍了 Fama-Macbeth 回归、其重要性及其实施。Fama-Macbeth 回归及其重要性 在资产定价理论中,我们使用风险因素来描述资产收益。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便