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

CS50 IDE中Flask Web应用无法发送邮件问题求助

解决CS50 IDE中Flask集成邮件发送的Errno 99问题

我来帮你搞定这个问题!你遇到的OSError: [Errno 99] Cannot assign requested address错误,主要是CS50 IDE的云端网络环境限制,加上Web应用里用input()获取密码的方式不适用,再配合Gmail的安全设置需要调整导致的。下面一步步来解决:

1. 先搞定Gmail的安全认证(关键!)

别直接降低账户安全级别,这太不安全了。改用App Password才是正确的姿势:

  • 首先给你的Gmail账户开启两步验证(必须开,不然没法生成App Password)
  • 登录Google账号的安全设置页面,找到「App Passwords」选项
  • 选择应用类型为「Mail」,设备随便选个「Other」(比如命名为CS50 IDE),生成一个16位的App Password,把这个密码存好,后面要用

2. 调整Flask里的代码逻辑

Web应用不能像单独跑脚本那样用input()让用户输密码,得用环境变量来存储敏感信息:

  • 在CS50 IDE的终端里输入:export GMAIL_APP_PASSWORD="你刚才生成的16位App Password"(注意引号)
  • 然后修改你的邮件发送代码,用os.getenv()读取这个环境变量,同时换用更兼容的SMTP连接方式(587端口+STARTTLS,比465的SSL更适配CS50的网络)

修改后的示例代码:

import os
import smtplib
from email.message import EmailMessage
import ssl
from flask import Flask

app = Flask(__name__)

def send_email():
    port = 587  # 使用STARTTLS的端口
    smtp_server = "smtp.gmail.com"
    sender_email = "sdrtempsamsung@gmail.com"
    receiver_email = "sdrtempsamsung@gmail.com"
    # 从环境变量读取App Password
    password = os.getenv("GMAIL_APP_PASSWORD")

    # 用EmailMessage构建邮件,比纯字符串更规范
    message = EmailMessage()
    message["Subject"] = "Hi there"
    message["From"] = sender_email
    message["To"] = receiver_email
    message.set_content("This message is sent from Flask in CS50 IDE!")

    context = ssl.create_default_context()
    try:
        with smtplib.SMTP(smtp_server, port) as server:
            server.ehlo()  # 可选,但有助于服务器识别
            server.starttls(context=context)  # 启用加密
            server.ehlo()
            server.login(sender_email, password)
            server.send_message(message)
        print("邮件发送成功!")
    except Exception as e:
        print(f"发送失败:{str(e)}")

# 定义一个Flask路由来触发邮件发送
@app.route("/send-test-email")
def trigger_email():
    send_email()
    return "邮件发送请求已提交,请查看收件箱!"

if __name__ == "__main__":
    app.run(debug=True)

3. 为什么这样改能解决问题?

  • Errno 99的原因:CS50 IDE的云端环境对直接使用465端口的SSL连接有网络限制,换成587端口+STARTTLS的方式更容易建立连接
  • 密码处理:Web应用运行时没有终端交互,用环境变量存密码既安全又符合Web应用的运行逻辑
  • App Password:避开了Gmail对低安全级别的限制,同时比直接用账户密码更安全

现在你可以在CS50 IDE里运行这个Flask应用,访问/send-test-email路由,应该就能成功发送邮件啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 17:57:45