You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:无法通过CMD运行.py文件且窗口闪退,寻求改进建议

问题解决与代码改进建议

一、CMD窗口闪退的解决办法

  • 手动启动CMD:打开命令提示符,通过cd命令切换到main.py和data.py所在的文件夹,然后运行命令 python main.py
  • 在脚本末尾添加暂停:在代码最后一行加上 input("按回车键退出..."),脚本执行完后会等待你按回车才关闭窗口

二、代码改进建议

作为第一个应用,你的逻辑已经很清晰,以下是几个实用优化点:

  • 精准导入变量:不要用from data import *,明确导入需要的变量,避免命名冲突,比如:
    from data import gmail, outlook, white_text, green_text, red_text
    
  • 安全的密码输入:用getpass模块隐藏密码输入,防止密码明文显示,需先导入getpass模块再替换密码输入代码
  • 针对性异常处理:不要用裸except,捕获具体的SMTP认证异常smtplib.SMTPAuthenticationError,准确判断登录失败,避免误捕获其他错误
  • 友好输入提示:把输入提示改成明确告知支持的提供商,比如"请输入你的邮箱提供商(支持gmail/outlook):"
  • 精简代码:循环里的pass可直接删除;变量login改成email_address更贴合实际含义

改进后的示例代码

import smtplib
import time
import getpass
from data import gmail, outlook, white_text, green_text, red_text

# 选择邮箱提供商,配置SMTP服务器
while True:
    email_type = input("请输入你的邮箱提供商(支持gmail/outlook):").lower()

    if email_type == "gmail":
        host = gmail["host"]
        port = gmail["port"]
        break
    elif email_type == "outlook":
        host = outlook["host"]
        port = outlook["port"]
        break
    else:
        print("暂不支持该邮箱提供商")
        time.sleep(1)

server = smtplib.SMTP(host, port)
server.ehlo()
server.starttls()

while True:
    email_address = input(white_text + "邮箱地址:")
    password = getpass.getpass("密码:")

    try:
        server.login(email_address, password)
        print(green_text + "登录成功")
        break
    except smtplib.SMTPAuthenticationError:
        print(red_text + "邮箱地址或密码错误,请重新输入")

# 防止CMD窗口闪退
input("按回车键退出...")

内容的提问来源于stack exchange,提问作者Yuri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 21:05:13