300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > Tkinter模拟发送邮箱验证码并在指定时间后验证码过期

Tkinter模拟发送邮箱验证码并在指定时间后验证码过期

时间:2023-09-19 03:11:22

相关推荐

Tkinter模拟发送邮箱验证码并在指定时间后验证码过期

先上两张图,再解释

运行原理:

程序运行后,输入要接收验证码的邮箱地址,点击“发送”后,控制台打印输出得到的验证码并发送到邮箱里;过了15秒以后,验证码再次刷新,并打印输出,这样就实现了动态过期,原理就是到某个时间点我再刷新一遍生成验证码函数,此时输入你邮箱里的验证码点“确认”肯定和最新的是不匹配的。当然这个过程在实际操作的时候是看不到验证码的输出的,这里为了直观理解所以在后台全部进行打印输出。

需要注意的是:

这里每次点击按钮都需要使用一个方法,难点在于全局变量global的使用,发送验证码不难,我之前也写过一篇文章点击查看,难点在于如何动态更新验证码,同时更新后的验证码必须作用于全局使用,希望这篇文章能抛砖引玉,有所启发。

附上测试过的完整代码:

# coding=utf-8from tkinter import *from threading import Timerimport smtplibimport stringimport randomfrom email.mime.text import MIMETextroot = Tk()root.title("邮箱验证码30秒后过期重新验证")root.geometry("500x200+600+300")frame1 = Frame(root)frame1.pack()address = Entry(frame1)address.grid(row=0, column=1)num = string.digitsa = ""num_digits = ""def send():global num_digitsdef update_num():global aglobal num_digitsnum_digits = ""for i in range(6):num1 = random.choice(num)num_digits = num_digits + num1# print(num_digits)a = num_digitsprint(a)update_num() # 先执行验证码a = num_digits # 把刷新的验证码赋给全局变量amsg_from = '此处填写我的邮箱' # 填写服务器发送方的邮箱地址passwd = '此处填写我的授权码' # 授权码不要告诉给他人to_mail = address.get()to = [to_mail]# 设置邮件内容content = "验证码: " + "<font color='orange' size='5px'><b>" + a + "</b></font>"global t # 把t设置成全局变量,后面成功验证后就取消定时更新功能t = Timer(15, update_num) # 这里为了测试,设置成15秒更新t.start()# 把内容加进去msg = MIMEText(content, 'html', 'utf-8')# 设置邮件主题msg['Subject'] = "邮箱验证"# 发送方信息msg['From'] = msg_from# 开始发送# 通过SSL方式发送,服务器地址和端口try:s = smtplib.SMTP_SSL("", 465)# 登录邮箱s.login(msg_from, passwd)# 开始发送s.sendmail(msg_from, to, msg.as_string())s.quit()# messagebox.showinfo("发送提醒", "邮件发送成功")print("邮件发送成功")except Exception as e:print(e)# messagebox.showwarning("发送提醒", "邮件发送失败!请输入正确邮箱地址")def check():if code.get() == a:print('验证码输入正确,跳转窗口...')root.destroy()newroot = Tk()newroot.geometry("300x200+600+300")newroot.focus_force()Label(newroot, text="欢迎您,登录成功!").pack()t.cancel()newroot.mainloop()else:print("验证码已过期,请重新发送")Label(frame1, text="邮箱地址:").grid(row=0, column=0, pady=50)Button(frame1, text="发 送", width=8, command=send).grid(row=0, column=2, padx=5)Label(frame1, text="验证码:").grid(row=1, column=0)code = Entry(frame1, width=10)code.grid(row=1, column=1, sticky=W)Button(frame1, text="确 认", width=8, command=check).grid(row=1, column=2, padx=5)root.mainloop()

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。