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

时间:2015-05-12 01:48:38

标签: 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><td>%column1data%</td><td>%column2data%</td></tr>

column1和column2数据是关联字典中的键值对。

有没有办法以简单的方式做到这一点?这是在填充数据后每天一次通过cronjob发送的auotmated电子邮件。

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

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

2 个答案:

答案 0 :(得分:8)

基本示例: with templating

#!/usr/bin/env python

from smtplib import SMTP              # sending email
from email.mime.text import MIMEText  # constructing messages

from jinja2 import Environment        # Jinja2 templating

TEMPLATE = """
<html>
<head>
<title>{{ title }}</title>
</head>
<body>

Hello World!.

</body>
</html>
"""  # Our HTML Template

# Create a text/html message from a rendered template
msg = MIMEText(
    Environment().from_string(TEMPLATE).render(
        title='Hello World!'
    ), "html"
)

subject = "Subject Line"
sender= "root@localhost"
recipient = "root@localhost"

msg['Subject'] = subject
msg['From'] = sender
msg['To'] = recipient

# Send the message via our own local SMTP server.
s = SMTP('localhost')
s.sendmail(sender, [recipient], msg.as_string())
s.quit()

相关文档:

注意:假设您的本地系统上有效MTA

注意另外:实际上,您实际上可能希望在撰写电子邮件时使用多部分邮件;见Examples

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

我相信这些库与requests - 人类的SMTP

一致

答案 1 :(得分:2)

您可以利用的另一个工具(以及我公司在生产中使用的工具)是Mandrill。这是Mailchimp的一项服务,但它提供“交易”电子邮件,即个人的个性化电子邮件,而不是大量的电子邮件通讯。它可以免费发送您每月发送的前10,000封电子邮件,让您免除管理私人电子邮件服务器的负担,并提供一些非常好的WYSIWYG编辑工具,自动开放率&amp;点击率跟踪,以及干净,简单的python API。

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

  1. 使用Mailchimp中的WYSIWYG编辑器创建模板。动态数据可以在运行时作为“合并变量”插入到模板中。

  2. 将该模板从Mailchimp导入Mandrill

  3. 使用cronjob python脚本检索动态数据并将其发送到要发送的Mandrill服务器。

  4. 使用官方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)