我有一个联系页面,当用户提交消息时,我想在其中发送一些信息到我的电子邮件帐户。到目前为止,我已经为配置配置了一个send.py文件。
send.py
from flask import Flask
from flask_mail import Mail, Message
app =Flask(__name__)
mail=Mail(app)
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 index():
msg = Message(
'Hello',
sender='(myemailaccount)',
recipients=
['(myemailaccount('])
msg.body = "This is the email body"
mail.send(msg)
return "Sent"
if __name__ == "__main__":
app.run()
在我的 routes.py 上,有一个关于页面,在该页面上,我呈现了一个HTML模板,该模板带有一些要显示的<form>
标签在电子邮件中,如何将HTML代码呈现到我的 send.py 中。我应该先将其另存为 routes.py 中的参数吗?我应该在 routes.py 中添加我的 send.py 信息吗?
答案 0 :(得分:1)
根据docs for flask-mail,Message
类还接受和html
参数。您需要做的就是分配一个值render_template("home.html")
,以将呈现的html页面发送到电子邮件正文,假设home.html
是关于页面。您还必须确保home.html
位于 templates 文件夹中,因为Flask会渲染该文件夹中的所有html模板。
我举一个小例子。请注意,我没有使用单独的 send.py ,因为我想在其他路由上调用send_message
函数,因此我将其添加到了相同的 routes.py < / strong>文件:
项目结构:
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>
routes.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
的简单形式。使用Flask的send_message()
函数将该名称发送到request.form.get()
函数。然后,该名称将在电子邮件的主题行中发送。注意Message()
类中的html参数,它在电子邮件正文中发送呈现的表单。最后,显示一条消息,确认已发送消息。由于这是一个POST请求(发送电子邮件),因此我们必须在<form>
标签和路由/send_message
中指定方法。 <form>
标记还具有action
属性,该属性在提交表单时通过send_message()
路由对函数/send_message
进行调用。
注意事项:
请确保在mail=Mail(app)
之后调用app.config.update()
,如上面的代码所示。这是为了确保在创建mail
对象之前成功应用配置设置。接下来,您可能必须在gmail帐户中启用安全设置,才能发送电子邮件(我必须这样做)以进行测试。这是因为gmail将阻止所有不安全的尝试对您的帐户进行身份验证的应用。更多详细信息here。
我已经测试了上面的代码,并成功接收了显示在电子邮件正文中的简单html form
。