我有一个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
答案 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。
我公司正在使用的工作流程是:
使用Mailchimp中的WYSIWYG编辑器创建模板。动态数据可以在运行时作为“合并变量”插入到模板中。
将该模板从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)