Was*_*aze 6 html python google-app-engine
我想在用户注册网站后向用户发送HTML电子邮件.之前我写过这个脚本发送
from google.appengine.api import mail
message = mail.EmailMessage(sender="Example.com Support <support@example.com>",
subject="Your account has been approved")
message.to = "Albert Johnson <Albert.Johnson@example.com>"
message.body = """
Dear Albert:
Your example.com account has been approved. You can now visit
http://www.example.com/ and sign in using your Google Account to
access new features.
Please let us know if you have any questions.
The example.com Team
"""
message.html = """
<html><head></head><body>
Dear Albert:
Your example.com account has been approved. You can now visit
http://www.example.com/ and sign in using your Google Account to
access new features.
Please let us know if you have any questions.
The example.com Team
</body></html>
"""
message.send()
Run Code Online (Sandbox Code Playgroud)
但是我没有将HTML直接放在主代码中,而是希望有一个单独的HTML文件可以用作正文.我尝试按如下方式进行:
message.html = 'emailHTML.html'
Run Code Online (Sandbox Code Playgroud)
但是徒劳无功 如何使用HTML文件代替HTML代码?
也许最好的方法是使用模板引擎从 HTML 文件中加载并生成 HTML 作为字符串。例如,如果您使用webapp2 jinja2 extras包,您可以执行以下操作:
from webapp2_extras import jinja2 as webapp_extras_jinja2
# ...
def get_message_html():
jinja2 = webapp_extras_jinja2.get_jinja2()
return jinja2.render_template('relative/path/to/template.html')
# ...
def send_email():
# ...
message.html = get_message_html()
# ...
Run Code Online (Sandbox Code Playgroud)
请注意,要使其正常工作,您需要将 jinja2 添加到 app.yaml 的库部分,如下所示:
libraries:
- name: webapp2
version: 2.5.2
- name: jinja2
version: 2.6
Run Code Online (Sandbox Code Playgroud)
...并且您还需要在应用程序配置中包含适当的“webapp2_extras.jinja2”。前任:
config = {
'webapp2_extras.jinja2': {
'template_path': 'path/containing/my/templates',
'environment_args': {
# Keep generated HTML short
'trim_blocks': True,
'extensions': [
# Support auto-escaping for security
'jinja2.ext.autoescape',
# Handy but might not be needed for you
'jinja2.ext.with_'
# ... other extensions? ...
],
# Auto-escape by default for security
'autoescape': True
},
# .. other configuration options for jinja2 ...
},
# ... other configuration for the app ...
},
# ...
app = webapp2.WSGIApplication(routes, is_debug_enabled, config)
Run Code Online (Sandbox Code Playgroud)
虽然您可以自己轻松地打开 HTML 文件,但使用 jinja2 等模板引擎的好处是,它会鼓励您以更合理的方式编写和重用 HTML(而简单地加载 HTML 文件可能会导致您最终手动应用替换)。另外,只是一个快速的安全提醒:如果您在电子邮件中包含的任何数据来自不受信任的来源(例如用户或其他用户),请确保正确验证和健全性检查内容(并在电子邮件中启用自动转义)模板引擎)。
显然,您可以选择 jinja2 以外的模板,但我特意选择了该模板作为我的答案,因为它得到了 App Engine 的良好支持和详细记录。
| 归档时间: |
|
| 查看次数: |
719 次 |
| 最近记录: |