首页 > 解决方案 > 使用 python flask_mail msg.body="" 通过电子邮件发送多个 html 表单字段的数据

问题描述

我想做的是当用户使用flask_mail在index.html中提交html表单时发送一封电子邮件。我想在 msg 正文中发送多个表单字段。我怎么做?我已经彻底研究了 flask_mail 文档,但没有找到答案。如果我尝试在 msg.body="hello" 中发送简单的 msg 没有错误,但在我尝试发送表单数据时会出错。

是的,我不想使用烧瓶模板。

首先,我使用“python -m flask run”执行 app.py,然后转到 index.html 填写表单并提交。

index.html 和 app.py 都在不同的文件夹中。

我还想从复选框、单选按钮、下拉列表和上传的文件中读取数据。那么如何做到这一点并使用flask_mail将所有这些值发送给管理员。

这是我在 index.html 中的表格。在 action 参数中,我指定了以下 url。

 <form class="" action=" http://127.0.0.1:5000/" id="get-quote" name="get-quote" method="post">
                                <fieldset>
                                    <!-- Text input-->
                                    <div class="row">
                                        <div class="col-xl-4 col-lg-4 col-md-12 col-sm-12 col-12">
                                            <div class=" form-group ">
                                                <label class="control-label" for="name">Name</label>
                                                <input id="name" name="name" type="text" placeholder="Name" class="form-control input-md" required>
                                                <span class="help-block"> </span>
                                            </div>
                                        </div>
                                        <!-- Text input-->
                                        <div class="col-xl-4 col-lg-4 col-md-12 col-sm-12 col-12">
                                            <div class="form-group ">
                                                <label class=" control-label" for="email">E-Mail</label>
                                                <input id="email" name="email" type="text" placeholder="E-mail" class="form-control input-md">
                                            </div>
                                        </div>
                                        <!-- Text input-->
                                        <div class="col-xl-4 col-lg-4 col-md-12 col-sm-12 col-12">
                                            <div class="form-group ">
                                                <label class="control-label" for="phone">Phone</label>
                                                <input id="phone" name="phone" type="text" placeholder="Phone" class="form-control">
                                            </div>
                                        </div>
                                        <div class="col-xl-6 col-lg-6 col-md-12 col-sm-12 col-12">
                                            <div class="form-group slide-ranger ">

                                                <label for="amount" class="control-label">Loan Amount</label>
                                                <input type="text" id="amount" name="amount"placeholder="Enter your amount" class="form-control">
                                            </div>
                                        </div>
                                        <div class="col-xl-6 col-lg-6 col-md-12 col-sm-12 col-12">
                                            <div class="form-group slide-ranger ">

                                                <label for="years" class="control-label">Year</label>
                                                <input type="text" id="years" name="years" placeholder="Enter number of years(eg:1,2,3)" class="form-control">
                                            </div>
                                        </div>
                                        <!-- Button -->
                                        <div class="col-xl-4 col-lg-4 col-md-12 col-sm-12 col-12">
                                            <button id="Submit" name="Submit" class="btn btn-primary btn-block">Submit New Quote</button>
                                        </div>
                                    </div>
                                </fieldset>
                            </form>

这是我在 flask_mail 中的 app.py

from flask import Flask
from flask_mail import Mail, Message
from flask import request, redirect

app =Flask(__name__)
mail=Mail(app)

app.config['MAIL_SERVER']='smtp.gmail.com'
app.config['MAIL_PORT'] = 465
app.config['MAIL_USERNAME'] = 'mymail@gmail.com'
app.config['MAIL_PASSWORD'] = 'my_password'
app.config['MAIL_USE_TLS'] = False
app.config['MAIL_USE_SSL'] = True
mail = Mail(app)

@app.route('/', methods = ['POST'])
def index():
   name = request.form['name']
   email = request.form['email']
   phone = request.form['phone']
   amount = request.form['amount']
   years = request.form['years']
   msg = Message('Get-Quote Form', sender = 'mymail@gmail.com', recipients = ['mymail@gmail.com'])
   msg.body = "I want all the above field here to send mail."
   mail.send(msg)
   return "Sent"

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

标签: pythonhtmlformsemailflask

解决方案


所以你正在访问你的索引页面,表格在哪里?如果是这样,您将需要将方法更改为['POST', 'GET'],如果请求是 POST 或 GET,还需要进行 if 语句。检查 WTForms 文档以供参考:https ://flask.palletsprojects.com/en/1.1.x/patterns/wtforms/


推荐阅读