【问题标题】:Building Dynamic HTML Email Content with Python使用 Python 构建动态 HTML 电子邮件内容
【发布时间】:2015-07-22 17:01:18
【问题描述】:

我有一个 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 发送的自动电子邮件,每天在填充数据后发送一次。

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

P.S.S 我使用的是 Python 2.7

【问题讨论】:

  • 您发送的电子邮件中是否包含任何其他“静态”数据?换句话说,您会从 Jinja 这样的模板工具中受益吗?
  • 现在电子邮件相当简单,但是,将来它可能包含一些数据分析组件,如图表,所以我对任何可以提供这些功能的轻框架开放。但现在一些简单的事情至少可以让它继续下去。
  • Jinja 是这里的必经之路。
  • 我能得到一个粗略的例子来说明我想要做什么吗?一般来说,我对 python 比较陌生
  • @gandolf 完成;请参阅下面的回复,了解您可以修改以适应的完整工作示例。

标签: python python-2.7 html-email


【解决方案1】:

基本示例:带模板

#!/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

【讨论】:

  • 嗨詹姆斯,感谢这个例子。在我想要添加动态内容的特殊情况下,“for key,value in dic.items():”之类的东西会出现在模板中添加行的位置吗?
  • 好的,我知道了,谢谢詹姆斯,我会将此标记为答案,因为它确实让我得到了我正在寻找的答案。
  • @gandolf 没问题!很高兴它在你的路上帮助了你:)
  • 对于其他人来说,相关文档下的smeplib应该是smtplib。伟大的解决方案
【解决方案2】:

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

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

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

  2. 将该模板从 Mailchimp 导入 Mandrill

  3. 使用 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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-29
    • 2011-03-19
    • 2021-04-02
    • 2013-03-14
    • 1970-01-01
    • 1970-01-01
    • 2014-06-02
    相关资源
    最近更新 更多