本文详解 flask 应用中接收 html 表单数据并通过 smtp(gmail)自动发送邮件的完整实现,重点解决“表单数据已接收但邮件未发出”的常见问题。
在 Flask 中实现联系表单(Contact Form)的邮件发送功能,关键在于前后端逻辑的完整串联:HTML 表单需正确提交至 Flask 路由,该路由必须显式调用邮件发送函数,并妥善处理请求方法、数据提取与异常反馈。从你提供的日志可见,POST /contact 请求已成功到达服务器("POST /contact HTTP/1.1" 200 -),且控制台也打印出了表单字段值(如 Sara、[email protected] 等),这说明数据接收无误——但邮件未发出,根本原因正是:send_email() 函数未被实际调用。
你需要确保 /contact 路由同时支持 GET(渲染页面)和 POST(处理提交),并在 POST 分支中解析表单并调用 send_email():
from flask import Flask, render_template, request, flash
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
app = Flask(__name__)
app.secret_key = 'your-secret-key-here' # 用于 flash 消息
def send_email(name, email, phone, message):
smtp_server = 'smtp.gmail.com'
smtp_port = 587
smtp_username = 'your-verified-gmail@gmail.com' # 替换为你的 Gmail 地址
smtp_password = 'your-app-password' # 替换为 Google App Password(非邮箱密码!)
from_email = smtp_username
to_email = 'recipient@example.com' # 接收邮件的目标地址
subject = f'New Contact Form Submission from {name}'
# 使用标准 MIME 格式构造邮件(更可靠,避免纯字符串格式问题)
msg = MIMEMultipart()
msg['From'] = from_email
msg['To'] = to_email
msg['Subject'] = subject
msg.attach(MIMEText(f"""\
Name: {name}
Email: {email}
Phone: {phone}
Message: {message}
""", 'plain'))
try:
with smtplib.SMTP(smtp_server, smtp_port) as server:
server.starttls() # 启用 TLS 加密
server.login(smtp_username, smtp_password)
server.send_message(msg)
return True
except Exception as e:
print(f"Email sending failed: {e}")
return False
@app.route('/contact', methods=['GET', 'POST'])
def contact():
if request.method == 'POST':
# ✅ 关键:从 request.form 提取数据
name = request.form.get('name', '').strip()
email = request.form.get('email', '').strip()
phone = request.form.get('phone', '').strip()
message = request.form.get('message', '').strip()
# 基础验证(可选但推荐)
if not all([name, email, message]):
flash('Please fill in all required fields.', 'error')
return render_template('contact.html', msg_sent=False)
# ✅ 关键:显式调用 send_email 并检查结果
if send_email(name, email, phone, message):
flash('Your message has been sent successfully!', 'success')
return render_template('contact.html', msg_sent=True)
else:
flash('Failed to send email. Please try again later.', 'error')
return render_template('contact.html', msg_sent=False)
# GET 请求:渲染空表单
return render_template('contact.html', msg_sent=False){% with messages = get_flashed_messages(with_categories=true) %}
{% if messages %}
{% for category, message in messages %}
{{ message }}
{% endfor %}
{% endif %}
{% endwith %}表单数据“能打印却发不出邮件”,90% 的原因是:Flask 路由收到了 POST 请求,但忘记在代码中执行 send_email(...) 这一行。务必检查你的 /contact 视图函数是否包含对邮件函数的显式调用,并确保其位于 request.method == 'POST' 分支内。配合 MIME 邮件构造、App Password 配置和基础错误处理,即可稳定实现联系表单的邮件通知功能。
# word
# html
# go
# 编码
# app
# 后端
# ai
# 路由
# 环境变量
# google
# 邮箱
# 常见问题
# 表单提交
# red
# flask
# try
# 字符串
# protected
# 并发
# http
# 表单
# 邮件发送
# 出了
# 不出
# 并在
# 可选
# 收到了
# 两步
# 关键在于
# 不安全
相关文章:
如何在搬瓦工VPS快速搭建网站?
,怎么在广州志愿者网站注册?
建站主机选哪家性价比最高?
网站网页制作电话怎么打,怎样安装和使用钉钉软件免费打电话?
ppt在线制作免费网站推荐,有什么下载免费的ppt模板网站?
网站设计制作公司地址,网站建设比较好的公司都有哪些?
广州营销型建站服务商推荐:技术优势与SEO优化解析
番禺网站制作公司哪家值得合作,番禺图书馆新馆开放了吗?
广东企业建站网站优化与SEO营销核心策略指南
如何用已有域名快速搭建网站?
深圳网站制作费用多少钱,读秀,深圳文献港这样的网站很多只提供网上试读,但有些人只要提供试读的文章就能全篇下载,这个是怎么弄的?
平台云上自助建站如何快速打造专业网站?
已有域名建站全流程解析:网站搭建步骤与建站工具选择
广东专业制作网站有哪些,广东省能源集团有限公司官网?
如何用花生壳三步快速搭建专属网站?
简历在线制作网站免费,免费下载个人简历的网站是哪些?
免费网站制作appp,免费制作app哪个平台好?
在线ppt制作网站有哪些,请推荐几个好的课件下载的网站?
建站之星2.7模板快速切换与批量管理功能操作指南
建站之星如何助力网站排名飙升?揭秘高效技巧
,交易猫的商品怎么发布到网站上去?
招商网站制作流程,网站招商广告语?
阿里云网站搭建费用解析:服务器价格与建站成本优化指南
*服务器网站为何频现安全漏洞?
头像制作网站在线制作软件,dw网页背景图像怎么设置?
如何配置WinSCP新建站点的密钥验证步骤?
网站建设制作需要多少钱费用,自己做一个网站要多少钱,模板一般多少钱?
香港服务器租用费用高吗?如何避免常见误区?
宁波自助建站系统如何快速打造专业企业网站?
如何快速生成可下载的建站源码工具?
如何快速搭建高效简练网站?
制作农业网站的软件,比较好的农业网站推荐一下?
如何用IIS7快速搭建并优化网站站点?
如何在IIS中新建站点并配置端口与物理路径?
如何选择最佳自助建站系统?快速指南解析优劣
如何快速搭建高效可靠的建站解决方案?
C++如何使用std::optional?(处理可选值)
如何快速上传自定义模板至建站之星?
广州网站建站公司选择指南:建站流程与SEO优化关键词解析
威客平台建站流程解析:高效搭建教程与设计优化方案
如何在景安云服务器上绑定域名并配置虚拟主机?
如何在西部数码注册域名并快速搭建网站?
韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐
电影网站制作价格表,那些提供免费电影的网站,他们是怎么盈利的?
怀化网站制作公司,怀化新生儿上户网上办理流程?
如何通过PHP快速构建高效问答网站功能?
北京网站制作的公司有哪些,北京白云观官方网站?
如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?
高性能网站服务器部署指南:稳定运行与安全配置优化方案
如何在Windows虚拟主机上快速搭建网站?
*请认真填写需求信息,我们会在24小时内与您取得联系。