使用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进行了简单的封装,可以发送纯文本邮件, ...
随机推荐
- Django中请求的生命周期
1. 概述 首先我们知道HTTP请求及服务端响应中传输的所有数据都是字符串. 在Django中,当我们访问一个的url时,会通过路由匹配进入相应的html网页中. Django的请求生命周期是指当用户 ...
- Java线程面试题
1:什么是线程? 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位.程序员可以通过它进行多处理器编程,你可以使用多线程对运算密集型任务提速.比如,如果一个线 ...
- mysql数据库事务详细剖析
在写之前交代一下背景吧! 做开发也好久了,没怎么整理过知识,现在剖析一下自己对数据库事务的认识,以前用sqlserver,现在转java后又用mysql.oracle.我这块就主要解释一下mysql数 ...
- MySQL plugin结构
1.背景 MySQL插件安装语法如下: 13.7.3.3 INSTALL PLUGIN Syntax INSTALL PLUGIN plugin_name SONAME 'shared_library ...
- Java注解Annotation详解
从JDK5开始,Java增加了Annotation(注解),Annotation是代码里的特殊标记,这些标记可以在编译.类加载.运行时被读取,并执行相应的处理.通过使用Annotation,开发人员可 ...
- 如何用webgl(three.js)搭建一个3D库房-第一课
今天我们来讨论一下如何使用当前流行的WebGL技术搭建一个库房并且实现实时有效交互 第一步.搭建一个3D库房首先你得知道库房长啥样,我们先来瞅瞅库房长啥样(这是我在网上找的一个库房图片,百度了“库房” ...
- 关于xampp集成开发环境的建立与初步认识
针对于xampp集成开发环境的建立主要分大步骤: 1.把xampp的压缩包压缩到一个盘中,比如c盘:然后点击中间的那个图标开始安装,由于这个软件是配置基本已经OK了,故可以直接next ...
- B2B电商系统开发建设的价格费用取决于哪些要素
B2B电子商务系统平台建设开发怎么做?如何搭建一个电商系统网站平台?相信我们的企业商家在搭建电子商务系统的时候都会进行前期的系统策划,但是对于电子商务系统的构建绝大多数人都有一个误区,那就是对于电子商 ...
- Glance 镜像服务群集
#Glance 镜像服务群集 openstack pike 部署 目录汇总 http://www.cnblogs.com/elvi/p/7613861.html#4.Glance 镜像服务群集 ##. ...
- 【LintCode·入门】斐波那契数列
斐波那契数列 描述 查找斐波纳契数列中第 N 个数. 所谓的斐波纳契数列是指: 前2个数是 0 和 1 . 第 i 个数是第 i-1 个数和第i-2 个数的和. 斐波纳契数列的前10个数字是: 0, ...