Согласно документам для флеш-почты , класс Message
также принимает и аргумент html
.Все, что вам нужно сделать, это присвоить значение render_template("home.html")
, чтобы отправить визуализированную html-страницу в тело письма, предполагая, что home.html
является страницей About .Вы также должны убедиться, что home.html
находится внутри папки templates , так как Flask отображает все html-шаблоны из этой папки.
Я приведу небольшой пример.Обратите внимание, что я не использовал отдельный send.py , так как хотел вызвать функцию send_message
на другом маршруте, поэтому я добавил его в тот же файл rout.py :
Структура проекта:
root
└───templates
|___ home.html
|___ routes.py
home.html
<!DOCTYPE html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>Send Message</title>
<meta name="description" content="">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="">
</head>
<body>
<form class="form-inline" action="/send_message" method="POST">
<label>Enter name:</label>
<input type="text" name="name">
<input type="submit" value="Send Message" class="btn btn-primary">
<p>{{confirm_msg}}</p>
</form>
<script></script>
</body>
</html>
rout.py
from flask import Flask, render_template, request
from flask_mail import Mail, Message
app =Flask(__name__)
app.config.update(
DEBUG=True,
#EMAIL SETTINGS
MAIL_SERVER='smtp.gmail.com',
MAIL_PORT=465,
MAIL_USE_SSL=True,
MAIL_USERNAME = 'myemailaccount',
MAIL_PASSWORD = 'mypassword'
)
mail=Mail(app)
@app.route("/")
def home():
return render_template("home.html")
@app.route("/send_message", methods=['POST'])
def send_message():
name = request.form.get('name')
msg = Message(
subject='Hello ' + name,
sender='myemailaccount',
recipients=
['myemailaccount'],
html=render_template("home.html"))
mail.send(msg)
confirm_msg = "Your message has been sent!"
return render_template("home.html", confirm_msg=confirm_msg)
if __name__ == "__main__":
app.run(debug=True, port=5000)
Объяснение:
Страница home.html отображает простую форму, которая принимает name
.Это имя отправляется в функцию send_message()
с помощью функции request.form.get()
Flask.Имя отправляется в строке «Тема» электронного письма.Обратите внимание на аргумент html в классе Message()
, который отправляет визуализированную форму в теле письма.Наконец, отображается сообщение, подтверждающее отправку сообщения.Поскольку это запрос POST (отправка электронной почты), мы должны указать метод как в теге <form>
, так и в маршруте /send_message
.Тег <form>
также имеет атрибут action
, который вызывает функцию для функции send_message()
в маршруте /send_message
при отправке формы.
Предупреждения:
Убедитесь, что mail=Mail(app)
вызывается после app.config.update()
, как показано в коде выше.Это делается для того, чтобы убедиться, что настройки конфигурации были успешно применены до создания объекта mail
.Затем вам может потребоваться включить настройку безопасности в вашей учетной записи Gmail, чтобы иметь возможность отправлять электронную почту (я должен был сделать это) в целях тестирования.Это связано с тем, что gmail будет блокировать любые менее безопасные приложения, которые пытаются аутентифицироваться в вашей учетной записи.Подробнее здесь .
Я протестировал приведенный выше код и успешно получил простой HTML form
, отображаемый в теле письма.