Flask+HTML实现网站发邮件遇Method Not Allowed错误求助
解决Flask中"Method Not Allowed"错误及邮件发送问题
你遇到的"Method Not Allowed"错误主要有两个核心原因,同时邮件发送逻辑也存在未执行的问题,下面逐一解决:
1. 缺少/order的GET路由
你的Flask代码仅给/order配置了POST请求方法,但当你访问/order页面(比如在浏览器输入该地址)时,浏览器发送的是GET请求,这直接导致了方法不允许的错误。另外如果直接本地打开order.html文件提交表单,请求地址的上下文也会和Flask服务不匹配。
解决方法:给/order路由同时添加GET和POST方法,在GET请求时渲染表单页面,POST请求时处理邮件发送:
@app.route('/order', methods=['GET', 'POST']) def process_order(): # 邮件发送逻辑放在这里 if request.method == 'POST': # 执行发送邮件 send_email() return "请求已成功发送,我们会尽快回复你!" # GET请求时返回表单页面 return render_template('order.html')
2. 未调用send_email函数
你在process_order里定义了send_email函数,但没有实际调用它,所以就算表单提交成功,邮件也不会发送。需要在POST分支里主动调用send_email()。
3. Gmail SMTP认证补充(额外提示)
现在Gmail已不支持直接用账号密码登录SMTP服务,你需要:
- 给谷歌账号开启两步验证
- 生成应用专用密码,替换代码里的
***密码
修正后的完整代码
from flask import Flask, render_template, request import smtplib app = Flask(__name__) @app.route('/') def index(): return render_template('index.html') @app.route('/about') def about(): return render_template('about.html') @app.route('/order', methods=['GET', 'POST']) def process_order(): def send_email(): email = request.form['email'] message = request.form['message'] # 构造标准邮件格式,避免被当成垃圾邮件 full_message = f"From: {email}\nSubject: 网站用户留言\n\n{message}" # 发送邮件 server = smtplib.SMTP('smtp.gmail.com', 587) server.starttls() # 替换为你的邮箱和应用专用密码 server.login("rprp9**@gmail.com", "你的应用专用密码") # 第二个参数填你自己的收件邮箱(比如你的Gmail地址) server.sendmail("rprp9**7@gmail.com", "rprp9**7@gmail.com", full_message.encode('utf-8')) server.quit() if request.method == 'POST': send_email() return "请求已成功发送,我们会尽快回复你!" return render_template('order.html') if __name__ == '__main__': app.run(debug=True)
额外注意点
- 确保
order.html放在Flask项目的templates文件夹下(Flask默认从这个目录读取模板) - 邮件内容添加
From和Subject头,能提升邮件的正常显示概率,避免被邮箱服务商判定为垃圾邮件
内容的提问来源于stack exchange,提问作者N1PEL
相关产品推荐
相关产品推荐

