Отправка данных нескольких полей html-формы по электронной почте с использованием python flask_mail msg.body=»»

#python #html #forms #email #flask

#python #HTML #формы #Адрес электронной почты #flask

Вопрос:

Что я пытаюсь сделать, так это отправить электронное письмо, когда пользователь отправляет HTML-форму в index.html с использованием flask_mail. Я хочу отправить несколько полей формы в теле сообщения. Как мне это сделать? Я тщательно изучил документацию flask_mail, но не нашел ответа. Ошибок нет, если я пытаюсь отправить простое сообщение в msg.body =»hello», но выдает ошибку при попытке отправить данные формы.

И да, я не хочу использовать шаблоны flask.

Сначала я выполняю app.py используя «python -m flask run», а затем я перехожу к 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>
  

Это мой app.py в flask_mail

 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)
  

Комментарии:

1. добро пожаловать, что выдает ошибка при попытке установить msg.body и отправить его?

2. @shiny в нем говорится, что метод не разрешен, метод не разрешен для запрошенного URL.

Ответ №1:

итак, вы посещаете свою страницу индекса, где находится форма? Если это так, вам нужно будет изменить методы на ['POST', 'GET'] , также сделайте оператор if, если запрос POST или GET . Проверьте документы WTForms для справки:https://flask.palletsprojects.com/en/1.1.x/patterns/wtforms /

Комментарии:

1. Хорошо, попробуем это. Но можете ли вы сказать, как мне передать несколько файлов или аргументов в msg.body=»Name: ‘ » name » ‘» «Email: ‘ » » email » ‘». Правильно ли это??

2. я бы предложил использовать базовое форматирование: """{name} ({email}) phone: {phonenumber}""".format(name=name, email=email, phonenumber=phone) Таким образом, вы можете использовать обычное текстовое электронное письмо и вставлять разрывы строк. .format упрощает форматирование строки правильным способом. Проверьте документы здесь: pyformat.info

3. Спасибо! @shiny

Ответ №2:

Это может быть достигнуто следующим образом:

 msg.body = 'Name is: {} n Email is: {} n and Phone is: {} n Amount:{} n Years:{}'.format(name,email,phone,amount,years)