使用HTML文件在Appengine [PYTHON]中发送HTML电子邮件

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代码?

Mic*_*yan 2

也许最好的方法是使用模板引擎从 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 的良好支持和详细记录。