正确导入电子邮件的文本和 html 模板
Importing text and html template for e-mail correctly
我正在编写代码来自动执行调查参与请求。我当前的代码如下所示:
def survey_mail(name, receiver, sender):
text_content = f"Hello {name},\r\n
Thank you for participating in my survey via your mail {receiver}\r\n.
You can contact me via {sender}."
html_content = """\ Hello """ + str(name) + """,<br>
Thank you for participating in my survey via your mail """ + str(receiver) + """<br>.
You can contact me via """ + str(sender) + """.
"""
content = MIMEMultipart('alternative')
content.attach(MIMEText(text_content, 'plain'))
content.attach(MIMEText(html_content, 'html'))
...
我这里有两个问题:
- 首先,是否可以将上面的两个字符串简单地导入为
模板文件?
- 其次,有没有更好的方法来处理变量
细绳?当前方法带有两种不同的格式化变量的方法:
{}
与 """ + var + """
.
我尝试将两个模板作为 *.txt 文件插入,然后加载模板:
with open("text.txt") as f:
text_content = f.read()
with open("html.txt") as f:
html_content = f.read()
然而,这并没有奏效。该代码只是将模板作为完整字符串导入。
f 字符串是在定义时计算的,因此您不能从文件中读取它们。您示例中的第二种方式(对于 html)是一个表达式。虽然可以对表达式进行 eval
编辑,但它通常被视为一种不良的安全做法,因为它允许执行不受控制的代码。
但您可以将 format
用作穷人的模板引擎:它的功能远不如成熟的模板引擎,但在这里已经足够了。
文本部分的示例文件:
Hello {name},
Thank you for participating in my survey via your mail {receiver}.
You can contact me via {sender}.
然后您可以这样使用它:
with open("text.txt") as f:
text_content = f.read().format(sender=sender, receiver=receiver)
我正在编写代码来自动执行调查参与请求。我当前的代码如下所示:
def survey_mail(name, receiver, sender):
text_content = f"Hello {name},\r\n
Thank you for participating in my survey via your mail {receiver}\r\n.
You can contact me via {sender}."
html_content = """\ Hello """ + str(name) + """,<br>
Thank you for participating in my survey via your mail """ + str(receiver) + """<br>.
You can contact me via """ + str(sender) + """.
"""
content = MIMEMultipart('alternative')
content.attach(MIMEText(text_content, 'plain'))
content.attach(MIMEText(html_content, 'html'))
...
我这里有两个问题:
- 首先,是否可以将上面的两个字符串简单地导入为 模板文件?
- 其次,有没有更好的方法来处理变量
细绳?当前方法带有两种不同的格式化变量的方法:
{}
与""" + var + """
.
我尝试将两个模板作为 *.txt 文件插入,然后加载模板:
with open("text.txt") as f:
text_content = f.read()
with open("html.txt") as f:
html_content = f.read()
然而,这并没有奏效。该代码只是将模板作为完整字符串导入。
f 字符串是在定义时计算的,因此您不能从文件中读取它们。您示例中的第二种方式(对于 html)是一个表达式。虽然可以对表达式进行 eval
编辑,但它通常被视为一种不良的安全做法,因为它允许执行不受控制的代码。
但您可以将 format
用作穷人的模板引擎:它的功能远不如成熟的模板引擎,但在这里已经足够了。
文本部分的示例文件:
Hello {name},
Thank you for participating in my survey via your mail {receiver}.
You can contact me via {sender}.
然后您可以这样使用它:
with open("text.txt") as f:
text_content = f.read().format(sender=sender, receiver=receiver)