在 Python 中验证电子邮件地址
电子邮件验证是封闭应用程序中用户旅程的重要组成部分,它很重要,尤其是对于安全性和减少用户流失而言。 验证电子邮件有多种方法,了解典型电子邮件地址的结构很重要。
有一些内置功能(例如正则表达式)和库(例如 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 向多个地址发送电子邮件
发布时间: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 回归及其重要性 在资产定价理论中,我们使用风险因素来描述资产收益。