Python 正确导入电子邮件的文本和html模板

Python 正确导入电子邮件的文本和html模板,python,python-3.x,string,variables,mime,Python,Python 3.x,String,Variables,Mime,我正在编写代码来自动处理调查参与请求。我当前的代码如下所示: 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}.

我正在编写代码来自动处理调查参与请求。我当前的代码如下所示:

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'))
    ...

然而,这并没有起作用。代码只是将模板作为完整字符串导入。

f字符串是在定义时计算的,因此您无法从文件中读取它们。示例中的第二种方式(对于html)是表达式。虽然表达式可以
eval
-ed,但它通常被视为较差的安全实践,因为它允许执行不受控制的代码

但是你可以把
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)

“f字符串在定义时进行计算”。学习好,谢谢!谢谢将同样的方法应用于html也可以!只有最后一个问题:
.format(name=db.name,type=db.type,color=sys.color,…)
如果这些变量对文本和html都重复,是否只能定义一次?@Christopher:是的
format
允许多个字段在字符串中具有特定名称,并允许未使用的参数:
'a{x}b{x}c'。format(x='x',y='y')
无误地给出
'a x b x c'
,忽略未使用的参数
y
with open("text.txt") as f:
    text_content = f.read().format(sender=sender, receiver=receiver)