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

时间:2015-02-20 05:46:23

标签: python html 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()

但是我没有将HTML直接放在主代码中,而是希望有一个单独的HTML文件用作正文。 我尝试按如下方式进行:

message.html = 'emailHTML.html'

但是徒劳无功。如何使用HTML文件代替HTML代码?

2 个答案:

答案 0 :(得分:4)

您可以设置

message.html = open('emailHTML.html').read()

获得与你现在所做的完全相同的效果;或者,您可以将HTML作为附件(因此电子邮件的正文只是纯文本,但收件人可以将HTML作为附件下载):

message.attachments = [('emailHTML.html', open('emailHTML.html').read())]

我不太确定你在两种情况下都希望实现什么,但这几乎是我能想到的两种可能性。如果两者都不令人满意,请编辑您的Q以准确解释您希望此电子邮件对用户的看法(身体应该是普通的还是HTML,是否应该有附件......?)。

答案 1 :(得分:2)

执行此操作的最佳方法可能是use a templating engine从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()
   # ...

请注意,要使其正常工作,您需要将jinja2添加到app.yaml的libraries部分,如下所示:

libraries:
- name: webapp2
  version: 2.5.2
- name: jinja2
  version: 2.6

...您还需要在应用配置中加入适当的'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)

虽然您可以自己轻松打开HTML文件,但使用模板引擎(如jinja2)的好处是它会鼓励您以更加理智的方式编写和重用HTML(而只需加载HTML文件导致你最终手动申请替换)。此外,还有一个快速的安全提醒:如果您在电子邮件中包含的任何数据来自不受信任的来源(如用户或其他用户),请确保正确验证并完善检查内容(并启用自动转义)模板引擎)。

你显然可以选择除jinja2之外的模板,但我特意选择了一个用于我的答案,因为它得到了很好的支持并且有很好的App Engine记录。