在 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 部分有助于处理某些异常。
相关文章
Pandas DataFrame DataFrame.shift() 函数
发布时间:2024/04/24 浏览次数:133 分类:Python
-
DataFrame.shift() 函数是将 DataFrame 的索引按指定的周期数进行移位。
Python pandas.pivot_table() 函数
发布时间:2024/04/24 浏览次数:82 分类:Python
-
Python Pandas pivot_table()函数通过对数据进行汇总,避免了数据的重复。
Pandas read_csv()函数
发布时间:2024/04/24 浏览次数:254 分类:Python
-
Pandas read_csv()函数将指定的逗号分隔值(csv)文件读取到 DataFrame 中。
Pandas 多列合并
发布时间:2024/04/24 浏览次数:628 分类:Python
-
本教程介绍了如何在 Pandas 中使用 DataFrame.merge()方法合并两个 DataFrames。
Pandas loc vs iloc
发布时间:2024/04/24 浏览次数:837 分类:Python
-
本教程介绍了如何使用 Python 中的 loc 和 iloc 从 Pandas DataFrame 中过滤数据。
在 Python 中将 Pandas 系列的日期时间转换为字符串
发布时间:2024/04/24 浏览次数:894 分类:Python
-
了解如何在 Python 中将 Pandas 系列日期时间转换为字符串