#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.info3. Спасибо! @shiny
Ответ №2:
Это может быть достигнуто следующим образом:
msg.body = 'Name is: {} n Email is: {} n and Phone is: {} n Amount:{} n Years:{}'.format(name,email,phone,amount,years)