我想在用户注册网站后向用户发送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代码?
答案 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记录。