向指定对象发送验证码
在做一些个人的demo或者实战项目等,涉及登录验证的,可以通过该方式实现一个简易的邮箱发送验证码。
该方法使用了Python的smtplib第三方库,需要保证发送者的QQ邮箱开通了SMTP(一种电子邮件传输协议)服务。
在QQ邮箱的设置→账户→POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务处开启
开启后,可以在下方获取授权码
至此,准备工作已完成,接下来开始尝试发送邮箱。
该方法可用在登录验证时使用,做一些个人的小项目或者大作业实验之类等等。
data里的信息可根据实际情况进行更改,在上面的授权码需要复制至data中的password处(注意:发送者的邮箱需和授权码对应。)
from smtplib import SMTP_SSL
from email.mime.text import MIMEText
from email.header import Header
import random
data = {
'sender':"111111111@qq.com", # 发送者邮箱,自己用可写死
'password':"xxxxxxxxxxxxx", # 在开启SMTP服务后,可以生成授权码,此处为授权码
'subject':"xxx验证码", # 邮件主题名,没有违规文字都行
}
class SendEmail:
def __init__(self, data,receiver):
self.sender = data.get('sender','') # 发送者QQ邮箱
self.receiver = receiver # 接收者邮箱
self.password = data.get('password','')
self.subject = data.get('subject','')
def load_message(self):
verification_code = self.generate_verification()
text = f'验证码为:{verification_code}'
message = MIMEText(text, "plain", "utf-8") # 文本内容,文本格式,编码
message["Subject"] = Header(self.subject, "utf-8") # 邮箱主题
message["From"] = Header(self.sender, "utf-8") # 发送者
message["To"] = Header(self.receiver, "utf-8") # 接收者
return message,verification_code
def send_email(self):
message,verification_code = self.load_message()
smtp = SMTP_SSL("smtp.qq.com") #需要发送者QQ邮箱开启SMTP服务
smtp.login(self.sender, self.password)
smtp.sendmail(self.sender, self.receiver, message.as_string())
return verification_code
# 生成6位随机数验证码
def generate_verification(self):
random_list = list(map(lambda x:random.randint(0,9),[y for y in range(6)])) # 这里使用map函数跟lambda匿名函数来生成随机的六位数
code = "".join('%s' % i for i in random_list)
return code
#调用
#receiver里放上发送对象的邮箱
verification = SendEmail(data=data,receiver='xxxxxxxxx@qq.com').send_email()
print(verification)
>>> 445571
最终效果:
最好加上发送验证码的时间间隔和验证码有效时间的设计,避免出现点一下就发送一次和验证码一直不过期的情况。。。