发送邮箱验证码进行注册验证

一、流程图
进行注册,输入邮箱地址,获取验证码。
操作思路
进行邮箱验证码验证 比较与输入的验证码 是否一致 一致的话则可以注册

**

  • 打开邮箱IMAP/SMTP服务

**在这里插入图片描述

二、代码示例

(1)生成随机验证码

def get_random_str():
    # 验证码是由 字母a~z  A~Z 数字 0~9 组成
    # 在 ascii 码中 小写a的起点是97 大写A起点是65
    num_ = [str(var) for var in range(0, 9)]  # 数字的
    # 使用sample 在列表中随机生成6个任意字母数字
    return ''.join(random.sample(num_, 4))

(2)发送邮箱验证码

#定义参数
my_mail='你自己的4@qq.com'
#授权码
my_pass='你自己的授权码'

#定义发送邮件的方法
class Send_EmailCode(APIView):
	def post(self,request):
		email = request.data.get('email')  # 接收到用户的邮箱
		print(email)
		subject = '验证码验证服务'
		code = get_random_str() #生成验证码
		content = '您的验证码是%s,有限期为1分钟'%code
		res = {}
		token = r.get(email)
		if token:  # 去redis 中查看 是否这个邮箱
			res['code'] = 401
			res['message'] = "请一分钟后再次发送"
			print(token)
			return JsonResponse(res)
		else:
			#声明邮件对象
			msg = MIMEText(content,'plain','utf-8')

			#设置发送方对象
			msg['From'] = formataddr(['在线教育平台',my_mail])

			#设置收件方对象
			msg['To'] = formataddr(['尊敬的客户',email])

			#设置标题
			msg['Subject'] = subject

			#设置smtp服务器
			server = smtplib.SMTP_SSL("smtp.qq.com",465)

			#登录邮箱
			server.login(my_mail,my_pass)

			#发送邮件
			server.sendmail(my_mail,[email],msg.as_string())

			#关闭smtp链接
			server.quit()

			r.set(email,code)  # 存储到redis
			# 设置访问周期为60秒
			r.expire(email, 6000)

			res['code'] = 200
			res['message'] = "验证码已发送"
			res['or'] = r.get(email)
			return JsonResponse(res)

ps:1.此处封装方法,调用是直接调用,隐藏授权码,防止自己信息暴露
ps:2.将生成的验证码存入redis数据库中 进行比较

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用Python的smtplib和random库来实现发送验证码邮箱的功能,然后使用tkinter来实现用户输入验证码的界面和验证功能。 以下是一个简单的示例代码: ```python import smtplib import random from tkinter import * # 邮件服务器地址和端口 SMTP_SERVER = 'smtp.gmail.com' SMTP_PORT = 587 # 发送邮箱和密码 SENDER_EMAIL = '你的邮箱地址' SENDER_PASSWORD = '你的邮箱密码' # 验证码长度 CODE_LENGTH = 6 # 邮件内容模板 EMAIL_TEMPLATE = '你的验证码是:{}' # 生成随机验证码 def generate_code(length): code = '' for i in range(length): code += str(random.randint(0, 9)) return code # 发送邮件 def send_email(to_email, code): try: server = smtplib.SMTP(SMTP_SERVER, SMTP_PORT) server.starttls() server.login(SENDER_EMAIL, SENDER_PASSWORD) subject = '验证码' body = EMAIL_TEMPLATE.format(code) message = f'Subject: {subject}\n\n{body}' server.sendmail(SENDER_EMAIL, to_email, message) server.quit() return True except: return False # 验证验证码 def verify_code(code, input_code): return code == input_code # 发送验证码并显示界面 def send_code(): # 生成随机验证码 code = generate_code(CODE_LENGTH) # 发送邮件 to_email = email_entry.get() if send_email(to_email, code): # 显示验证码输入界面 email_frame.pack_forget() code_frame.pack() code_label.config(text=f'验证码发送至 {to_email}') # 设置验证函数 verify_func = lambda: verify(code) # 设置焦点 code_entry.focus() else: # 显示错误信息 error_label.config(text='发送失败,请检查邮箱地址') # 验证验证码并关闭窗口 def verify(code): input_code = code_entry.get() if verify_code(code, input_code): # 验证成功,关闭窗口 root.destroy() else: # 验证失败,显示错误信息 error_label.config(text='验证码错误,请重新输入') code_entry.delete(0, END) code_entry.focus() # 创建主窗口 root = Tk() root.title('发送验证码') # 创建邮箱输入界面 email_frame = Frame(root) email_label = Label(email_frame, text='请输入邮箱地址:') email_entry = Entry(email_frame) email_button = Button(email_frame, text='发送验证码', command=send_code) error_label = Label(email_frame, fg='red') email_label.pack() email_entry.pack() email_button.pack() error_label.pack() # 创建验证码输入界面 code_frame = Frame(root) code_label = Label(code_frame) code_entry = Entry(code_frame, show='*') code_button = Button(code_frame, text='验证', command=verify) error_label = Label(code_frame, fg='red') code_label.pack() code_entry.pack() code_button.pack() error_label.pack() # 将邮箱输入界面放到窗口 email_frame.pack() # 进入主循环 root.mainloop() ``` 使用时,只需要将代码的`SENDER_EMAIL`和`SENDER_PASSWORD`替换为你自己的邮箱地址和密码即可。运行程序后,输入要发送验证码邮箱地址,点击发送验证码按钮即可发送验证码发送成功后,程序会显示一个新的界面,要求输入验证码。输入验证码后点击验证按钮,如果验证码正确,程序会自动关闭窗口,否则会提示验证码错误。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值