我有两个代码。一个HTML代码和其他python脚本。我想链接提交按钮以链接我的代码以将邮件发送给收件人。我搜索了大多数网站,但是我无法发送我在框中输入的消息。
HTML:
<form method="POST">
<div>
<label for="Msg">Type your Message</label>
<input type="text" name="Msg" />
</div>
</form>
<div>
<button type="submit"> Send Mail</button>
</div>
Python脚本:
from flask import Flask, render_template,request
from flask_mail import Mail,Message
app = Flask(__name__)
app.config['MAIL_SERVER'] = "smtp.gmail.com"
app.config['MAIL_PORT'] = 465
app.config['MAIL_USE_SSL'] = True
app.config['MAIL_USERNAME'] = 'Id@gmail.com'
app.config['MAIL_PASSWORD'] = '******'
app.config['MAIL_USE_TLS'] = False
mail = Mail(app)
@app.route("/")
def create():
if request.method == 'GET':
return render_template('index.html')
@app.route("/index.html")
def index():
if request.method == 'POST':
message1 = request.form['title'];
print ('message1')
msg = Message('Hello', sender = 'Id@gmail.com', recipients = ['Id@gmail.com'])
msg.body = message1
mail.send(msg)
return render_template("index.html")
if __name__ == '__main__':
app.run()
答案 0 :(得分:0)
我建议您在定义表单标记时使用action
。像这样:
<form action="/submit" method="post">
<div>
<label for="Msg">Type your Message</label>
<input type="text" name="Msg" />
</div>
<div>
<button type="submit"> Send Mail</button>
</div>
在路径装饰器中指定提交操作名称,检查邮件是否即将发送并发送电子邮件:
@app.route("/submit", methods=["GET", "POST"])
def index():
message1 = ''
if request.method == 'POST':
message1 = request.form['Msg']
if message1:
print(message1)
msg = Message('Hello', sender = 'Id@gmail.com', recipients = ['Id@gmail.com'])
msg.body = message1
mail.send(msg)
return render_template("index.html")
在处理表单时,不要忘记在生产中使用csrf令牌。
答案 1 :(得分:0)
很抱歉没有明确答案,我不知道您的输出错误,但您应该将POST方法添加到索引路径并在您的html表单中添加操作属性:
@app.route("/index", methods=['GET','POST'])
def index():
if request.method == 'POST':
message1 = request.form['title'];
print ('message1')
msg = Message('Hello', sender = 'Id@gmail.com', recipients = ['Id@gmail.com'])
msg.body = message1
mail.send(msg)
return render_template("index.html")
if __name__ == '__main__':
app.run()
并将其添加到html表单中:
<form action="/index" method="POST">
<div>
<label for="Msg">Type your Message</label>
<input type="text" name="Msg" />
</div>
</form>
<div>
<button type="submit"> Send Mail</button>
</div>
答案 2 :(得分:0)
我认为你的代码有2个问题。我会尽力清楚地描述它。这不仅仅是关于你的代码,还有烧瓶和网站上的一些习惯。
永远不要像使用2个分开的路线渲染相同的模板。你应该这样做:
@app.route('/', methods=['GET', 'POST'] )
@app.route('/index.html', methods=['GET', 'POST'])
def index():
就像上面的答案一样。
实际上,在页面中呈现页面或在submit button
中发送电子邮件之间没有区别,因为它们都将数据发布到服务器并让服务器执行(返回页面或发送一个页面)邮件)