如何使用python中的模板发送电子邮件?

2024-04-20 05:20:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我在google脚本中有这段代码,用于从模板创建带有表的电子邮件,但我必须用python编写相同的代码

我可以用什么替换“createTemplateFromFile”并用python中的循环创建我的表

代码.gs

var htmlTemplate = HtmlService.createTemplateFromFile("EmailTemplate");
const headers = ws.getRange("A1:L1").getDisplayValues();
htmlTemplate.Col_1 = headers[0][0];
htmlTemplate.Col_2 = headers[0][1]
...
htmlTemplate.Col_11 = headers[0][11]
htmlTemplate.Menssage = menssage
htmlTemplate.tableRangeValues = tableRangeValues
var htmlEmail = htmlTemplate.evaluate().getContent()

EmailTemplate.html

          <tbody>
         <? tableRangeValues.forEach(r => { ?>  
          <tr style="border-collapse:collapse; border:1px solid #000000" >
            <td style="border-collapse:collapse; border:1px solid #000000" ><?= r[0] ?></td>
            <td style="border-collapse:collapse; border:1px solid #000000"><?= r[1] ?></td>
            <td style="border-collapse:collapse; border:1px solid #000000"><?= r[2] ?></td>
            <td style="border-collapse:collapse; border:1px solid #000000"><?= r[3] ?></td>
            <td style="border-collapse:collapse; border:1px solid #000000"><?= r[4] ?></td>
            <td style="border-collapse:collapse; border:1px solid #000000"><?= r[5] ?></td>
            <td style="border-collapse:collapse; border:1px solid #000000"><?= r[6] ?></td>
            <td style="border-collapse:collapse; border:1px solid #000000"><?= r[7] ?></td>
            <td style="border-collapse:collapse; border:1px solid #000000"><?= r[8] ?></td>
            <td style="border-collapse:collapse; border:1px solid #000000"><?= r[10] ?></td>
            <td style="border-collapse:collapse; border:1px solid #000000"><?= r[11] ?></td>
          </tr>
         <?})?>
      </tbody>

Tags: 代码stylevarcoltrtdheaderscollapse
1条回答
网友
1楼 · 发布于 2024-04-20 05:20:45

您可以使用模块jinja2将模板与for-loops、if/else等一起使用

jinja2Flask用来生成HTML,但是您可以使用它来生成任何字符串-HTMLXMLPDFCSSJSCSV,等等

在示例中,我使用from_string(),但您可以使用get_template()从文件加载模板

from jinja2 import Environment

env = Environment()

text = '''
<tbody>
{% for r in tableRangeValues %}
<tr style="border-collapse:collapse; border:1px solid #000000">
    {% for value in r %}
     <td style="border-collapse:collapse; border:1px solid #000000">{{ value }}</td>
    {% endfor %}
</tr>
{% endfor %}
</tbody>
'''

#template = env.get_template("EmailTemplate")
template = env.from_string(text)

html = template.render(tableRangeValues=[[1,2,3], ["A","B","C"]])

print(html)

结果:

<tbody>

<tr style="border-collapse:collapse; border:1px solid #000000">
    
     <td style="border-collapse:collapse; border:1px solid #000000">1</td>
    
     <td style="border-collapse:collapse; border:1px solid #000000">2</td>
    
     <td style="border-collapse:collapse; border:1px solid #000000">3</td>
    
</tr>

<tr style="border-collapse:collapse; border:1px solid #000000">
    
     <td style="border-collapse:collapse; border:1px solid #000000">A</td>
    
     <td style="border-collapse:collapse; border:1px solid #000000">B</td>
    
     <td style="border-collapse:collapse; border:1px solid #000000">C</td>
    
</tr>

</tbody>

编辑:

还有其他template engines。见template engines关于Full Stack Python

Python也有标准的string.Template,或者可以使用string formattingf-string,但不能在模板字符串中使用loopsif/else

相关问题 更多 >