志存高远的zxs 2023-04-26 20:46 采纳率: 26.7%
浏览 16
已结题

python beeware 邮箱验证码登陆

大家,我又来了!
上一个问题我提到过,要用BeeWare开发一个答题游戏,必不可少的便是登陆咯,于是我编了一个邮箱验证码程序,但是只有获取验证码的按钮被触发后验证码才会更新,这是其中一个问题;
第二个问题,我想实现在获取验证码的按钮被触发后60秒内不能重新获取(也就是不可用)并在60秒的不可用时间里刷新验证码。我用的是time.sleep(60),但是执行后会显示未响应,一直到60秒过后才可以输入验证码,但这时获取验证码的按钮已经可用了。所以,我希望大家帮帮我解决问题,蟹蟹!
现将需要各位朋友帮忙改进的代码放在下方:

"""
My first application
"""

from email.mime.text import MIMEText
import toga
import datetime
import smtplib
import random
from toga.style import Pack
from toga.style.pack import COLUMN, CENTER
import time
from time import sleep


class mail(toga.App):

    def __init__(
            self,
            formal_name=None,
            app_id=None,
            app_name=None,
            id=None,
            icon=None,
            author=None,
            version=None,
            home_page=None,
            description=None,
            startup=None,
            windows=None,
            on_exit=None,
            factory=None,
    ):
        super().__init__(formal_name, app_id, app_name, id, icon, author, version, home_page, description, startup,
                         windows, on_exit, factory)
        self.content = None
        self.to_email_address = None
        self.headers = None
        self.title_name = None
        self.main_box = None
    def startup(self):
        """
        Construct and show the Toga application.

        Usually, you would add your application to a main content box.
        We then create a main window (with a name matching the app), and
        show the main window.
        """
        self.main_box = toga.Box(style=Pack(direction=COLUMN))
        self.to_email_address = toga.TextInput(placeholder='请输入邮箱地址...', style=Pack(padding_top=10))
        self.veco=toga.TextInput(placeholder='请输入验证码...',style=Pack(padding_top=10))
        self.ve=toga.Button('获取验证码', style=Pack(padding_top=5), on_press=self.send_email)
        self.main_box.add(
            toga.Label('发送验证码(须有网或流量)', style=Pack(text_align=CENTER, padding_top=5)),
            self.to_email_address,
            self.veco,
            self.ve,
            toga.Button('登录', style=Pack(padding_top=5), on_press=self.aa)
        )
        self.main_box.style.update(padding=10)
        self.main_window = toga.MainWindow(title='e-mail')
        self.main_window.content = self.main_box
        self.main_window.show()

    # @property
    def send_email_method(self, msg_from, password_, msg_to, msg_head, content_):
        """
        邮箱发送方式
        :return:
        """
        msg = MIMEText(content_)
        msg['subject'] = msg_head
        msg['From'] = msg_from
        try:
            s_ = smtplib.SMTP_SSL('smtp.qq.com', 465)
            s_.login(user=msg_from, password=password_)
            s_.sendmail(msg_from, msg_to, msg.as_string())
            msg = '邮件发送成功'
        except Exception as e:
            msg = str(e)
        finally:
            s_.quit()
        return msg

    def send_email(self, widget):
        title_name = '验证码(若不是您本人操作,请忽略此邮件)'
        global cn
        cn=str(random.randint(1000,9999))
        content=cn
        msg_from_self = '2080108220@qq.com' 
        msg_to_self = self.to_email_address.value
        msg_head_self = title_name
        password_self = 'pkjsaajuwfezbchi'
        if not msg_to_self:
            self.main_window.info_dialog('温馨提示', '邮件地址不能为空 ~')
            return
        now_runtime = datetime.datetime.now().strftime('%Y-%H-%D %H:%M:%S')
        content_self = '发送时间' + now_runtime + ',' +'您的验证码是'+','+content
        try:
            self.send_email_method(msg_from_self, password_self, msg_to_self, msg_head_self, content_self)
            self.main_window.info_dialog('温馨提示', '验证码发送成功!')
        except smtplib.SMTPException as e:
            self.main_window.error_dialog('温馨提示', '验证码发送失败 ~')
        self.ve.enabled=False
        time.sleep(60)
        self.ve.enabled=True
    def aa(self,widget):
        if self.veco.value=='':
            pass
        elif self.veco.value==cn:
            time.sleep(2)
            self.main_window.info_dialog('温馨提示', '登录成功!')
            self.veco.value=''
        else:
            time.sleep(2)
            self.main_window.error_dialog('温馨提示','登录失败...')
            self.veco.value=''
def main():
    return mail()


注意:这是用BeeWare开发的哦!

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 5月4日
    • 创建了问题 4月26日

    悬赏问题

    • ¥15 SQLServer怎么录入下标
    • ¥100 无网格伽辽金方法研究裂纹扩展的程序
    • ¥15 错误于library(org.Hs.eg.db): 不存在叫‘org.Hs.eg.db’这个名称的程序包,如何解决?
    • ¥60 求一个图片处理程序,要求将图像大小跟现实生活中的大小按比例联系起来的
    • ¥50 求一位精通京东相关开发的专家
    • ¥100 求懂行的大ge给小di解答下!
    • ¥15 pcl运行在qt msvc2019环境运行效率低于visual studio 2019
    • ¥15 MAUI,Zxing扫码,华为手机没反应。可提高悬赏
    • ¥15 python运行报错 ModuleNotFoundError: No module named 'torch'
    • ¥100 华为手机私有App后台保活