Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Python构建动态HTML电子邮件内容_Python_Python 2.7_Html Email - Fatal编程技术网

用Python构建动态HTML电子邮件内容

用Python构建动态HTML电子邮件内容,python,python-2.7,html-email,Python,Python 2.7,Html Email,我有一个python字典,我想以两列表的形式发送电子邮件,其中有一个标题和两列标题,以及填充到行中的字典的键、值对 <tr> <th colspan="2"> <h3><br>title</h3> </th> </tr> <th> Column 1 </th> <th> Column 2 </th> "Thn dynamic amount of <tr>

我有一个python字典,我想以两列表的形式发送电子邮件,其中有一个标题和两列标题,以及填充到行中的字典的键、值对

<tr>
<th colspan="2">
<h3><br>title</h3>
</th> </tr>
<th> Column 1 </th>
<th> Column 2 </th>
"Thn dynamic amount of <tr><td>%column1data%</td><td>%column2data%</td></tr>


头衔 第1栏 第2栏 %column1data%%column2data%的动态量
column1和column2数据是关联字典中的键、值对

有没有简单的方法可以做到这一点?这是一封通过cronjob发送的辅助电子邮件,在填充数据后每天发送一次

谢谢大家。 我对降价一无所知:/


p.S.S我正在使用Python 2.7

基本示例:(带模板)

!/usr/bin/env python
从smtplib导入SMTP#发送电子邮件
从email.mime.text导入MIMEText#构建消息
来自jinja2导入环境#jinja2模板
模板=“”“
{{title}}
你好,世界!。
“”“#我们的HTML模板
#从呈现的模板创建文本/html消息
msg=MIMEText(
环境()。从字符串(模板)。呈现(
title='helloworld!'
),“html”
)
主题=“主题行”
发送方=”root@localhost"
收件人=”root@localhost"
msg['Subject']=主语
msg['From']=发件人
msg['To']=收件人
#通过我们自己的本地SMTP服务器发送邮件。
s=SMTP('localhost')
s、 sendmail(发件人,[收件人],msg.as_string())
s、 退出
相关文件:

NB:这假设您在本地系统上有一个有效的

另请注意:您实际上可能希望在撰写电子邮件时使用多部分邮件;请参阅

更新:除此之外,还有一些非常不错的(呃)“电子邮件发送”库,您可能会感兴趣:


我相信这些库与--SMTP for Humans

一样,另一个你可以利用的工具(我的公司也在生产中使用)是Mandrill。它是Mailchimp提供的一项服务,但它提供的不是大量的电子邮件时事通讯,而是“事务性的”“电子邮件,即个人、个性化电子邮件。它对您每月发送的前10000封电子邮件是免费的,并且使您摆脱了管理私人电子邮件服务器的负担,还提供了一些非常好的WYSIWYG编辑工具、自动打开速率和点击速率跟踪,以及干净、简单的python API

我的公司正在使用的工作流是:

  • 使用Mailchimp中的所见即所得编辑器创建模板。动态数据可以在以后的运行时作为“合并变量”插入到模板中

  • 将该模板从Mailchimp导入Mandrill

  • 使用cronjob python脚本检索动态数据,并将其发送到Mandrill服务器进行发送

  • 使用官方Mandrill python库的python代码示例:

    import mandrill
    mandrill_client = mandrill.Mandrill(mandrill_api_key)
    message = {
        'from_email': 'gandolf@email.com',
        'from_name': 'Gandolf',
        'subject': 'Hello World',
        'to': [
            {
                'email': 'recipient@email.com',
                'name': 'recipient_name',
                'type': 'to'
            }
        ],
        "merge_vars": [
            {
                "rcpt": "recipient.email@example.com",
                "vars": [
                    {
                        "name": "merge1",
                        "content": "merge1 content"
                    }
                ]
            }
        ]
    }
    result = mandrill_client.messages.send_template(template_name="Your Template", message=message)
    

    您发送的电子邮件中是否有其他“静态”数据?换句话说,你会从模板工具中受益吗?现在电子邮件相当简单,但是,将来它可能包含一些数据分析组件,如图表,因此我欢迎任何可以提供这些功能的轻型框架。但是现在做一些简单的事情至少可以让事情顺利进行。Jinja是解决问题的方法。我能得到一个粗略的例子来说明我想做什么吗?我对python还不太熟悉general@gandolf完成;请参阅下面我的回复,以获得一个完整的工作示例,您可以根据需要进行修改。嗨,詹姆斯,谢谢您提供这个示例。在我想添加动态内容的特殊情况下,像“for key,value In dic.items():”这样的东西会出现在模板中添加行吗?好的,我知道了,谢谢James,我会把它标记为答案,因为它确实让我找到了我要找的答案。@gandolf没问题!很高兴它帮助了您:)对于其他人来说,相关文档下的smeplib应该是smtplib。大梭伦
    import mandrill
    mandrill_client = mandrill.Mandrill(mandrill_api_key)
    message = {
        'from_email': 'gandolf@email.com',
        'from_name': 'Gandolf',
        'subject': 'Hello World',
        'to': [
            {
                'email': 'recipient@email.com',
                'name': 'recipient_name',
                'type': 'to'
            }
        ],
        "merge_vars": [
            {
                "rcpt": "recipient.email@example.com",
                "vars": [
                    {
                        "name": "merge1",
                        "content": "merge1 content"
                    }
                ]
            }
        ]
    }
    result = mandrill_client.messages.send_template(template_name="Your Template", message=message)