使用python实现群发邮件
最近在工作时,需要实现在公司开发的调度系统上实现:将每天产生的游戏数据查询统计出,并发送邮件给数据分析的开发人员。
考虑到python语言的简洁易上手,在我没有任何python基础的情况下,十分轻松的完成了这个脚本功能。
下面放出代码,展示了通过python发送html邮件的模板:
1.生成数据:
#!/usr/bin/env python
# -*-coding: UTF-8 -*-
import MySQLdb
import sys from constant import DB_PARAMS_91
from db_utils import new_execsqlr def query_data():
try:
sql =
result = new_execsqlr(sql, DB_PARAMS_91) #这里调用的是公司内部封的数据库查询模块,内部用的是MySQLdb
print result
return [x.split("\t") for x in filter(is_warning_column, result)]
except MySQLdb.Error, e:
print "Mysql Error %d: %s" % (e.args[0], e.args[1])
sys.exit(1) # 过滤结果中的信息
def is_warning_column(x):
return ("mysql" not in x) and ("ds" not in x) and ("Warning" not in x)
2.拼接html模板(注意html的样式最好只写在标签内,大部分的邮箱都不支持外联css样式,而且js脚本也不会起作用):
#!/usr/bin/env python
# encoding:utf-8
import sys sys.path.append("..")
sys.path.append("../..")
sys.path.append("../../..")
sys.path.append("../../../..")
from consume_data import query_data # 将sql语句拼接到html中:注意样式只能嵌套在标签中,不能写在head和css中
def get_html_msg():
result = query_data()
head = """<head><meta charset="utf-8">
</head>""" th = """<body>""""""
<div class="container" style = "margin-left:calc(50% - 372px);">
<table border="1" style = "text-align: center;border-collapse:collapse;">
<tbody>
<tr bgcolor = "#E3E3E3">
<th colspan="11" style = " padding: 2px 5px; font-size: 10px;">广告推广每日监控报表邮件</th>
</tr>
<tr bgcolor = "#E3E3E3">
<th rowspan="2" style = " padding: 2px 5px; font-size: 10px;">date</th>
<th colspan="5" style = " padding: 2px 5px; font-size: 10px;">iOS</th>
<th colspan="5" style = " padding: 2px 5px; font-size: 10px;">Android</th>
</tr>
<tr bgcolor = "#E3E3E3">
<th style = " padding: 2px 5px; font-size: 10px;">点击PV</th>
<th style = " padding: 2px 5px; font-size: 10px;">当日激活</th>
<th style = " padding: 2px 5px; font-size: 10px;">当日注册</th>
<th style = " padding: 2px 5px; font-size: 10px;">当日创角</th>
<th style = " padding: 2px 5px; font-size: 10px;">当日付费</th>
<th style = " padding: 2px 5px; font-size: 10px;">点击PV</th>
<th style = " padding: 2px 5px; font-size: 10px;">APP当日激活</th>
<th style = " padding: 2px 5px; font-size: 10px;">SDK当日激活</th>
<th style = " padding: 2px 5px; font-size: 10px;">当日注册</th>
<th style = " padding: 2px 5px; font-size: 10px;">当日付费</th>
</tr>"""
tr = ''
for row in result:
td = ''
td = td + '<td style = " padding: 2px 5px; font-size: 10px;">' + row[0] + '</td>'
td = td + '<td style = " padding: 2px 5px; font-size: 10px;">' + row[1] + '</td>'
td = td + '<td style = " padding: 2px 5px; font-size: 10px;">' + row[2] + '</td>'
td = td + '<td style = " padding: 2px 5px; font-size: 10px;">' + row[3] + '</td>'
td = td + '<td style = " padding: 2px 5px; font-size: 10px;">' + row[4] + '</td>'
td = td + '<td style = " padding: 2px 5px; font-size: 10px;">' + row[5] + '</td>'
td = td + '<td style = " padding: 2px 5px; font-size: 10px;">' + row[6] + '</td>'
td = td + '<td style = " padding: 2px 5px; font-size: 10px;">' + row[7] + '</td>'
td = td + '<td style = " padding: 2px 5px; font-size: 10px;">' + row[8] + '</td>'
td = td + '<td style = " padding: 2px 5px; font-size: 10px;">' + row[9] + '</td>'
td = td + '<td style = " padding: 2px 5px; font-size: 10px;">' + row[10] + '</td>'
tr = tr + '<tr>' + td + '</tr>'
tr = tr.encode('utf-8')
body = tr
tail = '</tbody></table></div></body></html>'
# 将内容拼接成完整的HTML文档
html = head + th + body + tail
return html
3.发送html邮件:
#!/usr/bin/env python
# encoding:utf-8
import smtplib
import sys sys.path.append("..")
sys.path.append("../..")
sys.path.append("../../..")
sys.path.append("../../../..")
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart from SMTPConstant import mail_host, sender, receivers, mail_port
from produce_htmltemplate import get_html_msg # 邮件发送
def send_mail(html_msg, mail_host, mail_port, sender, receivers): # recivers定义了一个数组
msg = MIMEMultipart()
content = MIMEText(html_msg, 'html', _charset='utf8')
msg.attach(content)
msg['To'] = ";".join(receivers)
msg['From'] = sender
msg['Subject'] = "。。。。。"
s = smtplib.SMTP(mail_host, mail_port)
s.sendmail(sender, receivers, msg.as_string())
s.quit()
print " send ok!" # test
if __name__ == "__main__":
html = get_html_msg()
send_mail(html, mail_host, mail_port, sender, receivers)
如果使用的qq邮箱,则需要先登录自己的qq邮箱,自己的邮箱需要开通pop3服务,登录时的账号密码填写qq提供的授权码。
使用python实现群发邮件的更多相关文章
- Python自动群发邮件,只需20行代码!
今日分享 Python自动群发邮件 import smtplib from email import (header) from email.mime import (text, applicatio ...
- python smtp 群发邮件
最近工作中遇到使用脚本处理问题并发送结果邮件,使用python的smtp模块很简单的完成了实现.今天遇到一个问题,根据脚本的测试结果需要群发邮件,但是发送邮件的py文件只有首个地址收到了邮件.仔细排查 ...
- python selenium2示例 - email发送
前言 在进行日常的自动化测试实践中,我们总是需要将测试过程中的记录.结果等等等相关信息通过自动的手段发送给相关人员.python的smtplib.email模块为我们提供了很好的email发送等功能的 ...
- Python实现发送邮件(实现单发/群发邮件验证码)
Python smtplib 教程展示了如何使用 smtplib 模块在 Python 中发送电子邮件. 要发送电子邮件,我们使用 Python 开发服务器,Mailtrap 在线服务和共享的网络托管 ...
- 【Python系列】Python自动发邮件脚本-html邮件内容
缘起 这段时间给朋友搞了个群发邮件的脚本,为了防止进入垃圾邮件,做了很多工作,刚搞完,垃圾邮件进入率50%,觉得还不错,如果要将垃圾邮件的进入率再调低,估计就要花钱买主机了,想想也就算了,先发一个月, ...
- python发送邮件心得体会
利用本地smtp server发送 windows下尝试装了两个smtp server大概配置了下,发现没法生效,也没时间仔细研究了.装上foxmail发现以前可以本地发送的选项已经无法找到. 不带附 ...
- 【python】脚本连续发送QQ邮件
今天习得用python写一个连续发送QQ邮件的脚本,经过测试,成功给国内外的服务器发送邮件,包括QQ邮箱.163邮箱.google邮箱,香港科技大学的邮箱和爱丁堡大学的邮箱.一下逐步解答相关技巧. 首 ...
- 使用 Python 在 Linux 上实现一键回归测试
从代码库迁出代码 —- pexpect 的使用 测试人员从代码库(例如 CVS )迁出代码的过程中,需要手动输入访问密码,而 Python 提供了 Pexpect 模块则能够将手动输入密码这一过程自动 ...
- 3.python 发送邮件之smtplib模块
SMTP(Simple Mail Transfer Protocol)是简单邮件传输协议,它是一组用于由源地址到目的地址的邮件传输规则. python中对SMTP进行了简单的封装,可以发送纯文本邮件, ...
随机推荐
- sublime text3添加右键打开的操作
前一段重新安装了Sublime Text3,不过一直不在右键菜单中,所以决定添加,有如下2种方法. 方法一(推荐). 把以下代码,复制到SublimeText3的安装目录,然后重命名为:sublime ...
- [转]ORACLE分区表的使用和管理
转自:http://love-flying-snow.iteye.com/blog/573303 废话少说,直接讲分区语法. Oracle表分区分为四种:范围分区,散列分区,列表分区和复合分区. 一: ...
- 【机器学习】人工神经网络ANN
神经网络是从生物领域自然的鬼斧神工中学习智慧的一种应用.人工神经网络(ANN)的发展经历的了几次高潮低谷,如今,随着数据爆发.硬件计算能力暴增.深度学习算法的优化,我们迎来了又一次的ANN雄起时代,以 ...
- PHP常用的函数与小技巧
密码加密与验证 password_hash - 创建密码的哈希(hash) string password_hash ( string $password , integer $algo [, arr ...
- 电商SEO
大家都知道网站有SEO,电商也有SEO,今天陈晨就带大家来讲讲电商SEO的思路以及电商最重要的选品规划! 1. 选品是核心 2. 挖掘卖点是你走向成功必经之路 3. 产品定价策略---人群画像 4. ...
- 利用bootstrap写的一点本地(localStorage)储存
摘要: H5本地存储 在以前,我们想要存储一些数据,并且只是在前端使用,服务端并不会使用,我们只能存在cookie里,但是cookie会跟随请求头在客户端和服务端之间来回传递,而且cookie还有一些 ...
- mysql步骤详解
一.配置MySQL数据库 1.解压绿色版mysql,并改名为mysql5.7,如下图 对比一下下图5.6以前的版本,少data目录(存放数据)和my-default.ini文件(配置信息) 二.安装服 ...
- Akka(38): Http:Entityof ByteString-数据传输基础
我们说过Akka-http是一个好的系统集成工具,集成是通过数据交换方式实现的.Http是个在网上传输和接收的规范协议.所以,在使用Akka-http之前,可能我们还是需要把Http模式的网上数据交换 ...
- 02-线性结构4 Pop Sequence
题目 Sample Input: 5 7 5 1 2 3 4 5 6 7 3 2 1 7 5 6 4 7 6 5 4 3 2 1 5 6 4 3 7 2 1 1 7 6 5 4 3 2 Sample ...
- Office 365系列 (1)概览:完整的云中Office
Office365(以下简称O365)是一个集Office,企业邮箱,日历,日程管理,音视频会议 ,企业网盘 ,企业协作平台为一体的,旨在提高团队办公效率,减少基础设施投资和IT运维压力的解决方案.在 ...