最近在工作时,需要实现在公司开发的调度系统上实现:将每天产生的游戏数据查询统计出,并发送邮件给数据分析的开发人员。

考虑到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实现群发邮件的更多相关文章

  1. Python自动群发邮件,只需20行代码!

    今日分享 Python自动群发邮件 import smtplib from email import (header) from email.mime import (text, applicatio ...

  2. python smtp 群发邮件

    最近工作中遇到使用脚本处理问题并发送结果邮件,使用python的smtp模块很简单的完成了实现.今天遇到一个问题,根据脚本的测试结果需要群发邮件,但是发送邮件的py文件只有首个地址收到了邮件.仔细排查 ...

  3. python selenium2示例 - email发送

    前言 在进行日常的自动化测试实践中,我们总是需要将测试过程中的记录.结果等等等相关信息通过自动的手段发送给相关人员.python的smtplib.email模块为我们提供了很好的email发送等功能的 ...

  4. Python实现发送邮件(实现单发/群发邮件验证码)

    Python smtplib 教程展示了如何使用 smtplib 模块在 Python 中发送电子邮件. 要发送电子邮件,我们使用 Python 开发服务器,Mailtrap 在线服务和共享的网络托管 ...

  5. 【Python系列】Python自动发邮件脚本-html邮件内容

    缘起 这段时间给朋友搞了个群发邮件的脚本,为了防止进入垃圾邮件,做了很多工作,刚搞完,垃圾邮件进入率50%,觉得还不错,如果要将垃圾邮件的进入率再调低,估计就要花钱买主机了,想想也就算了,先发一个月, ...

  6. python发送邮件心得体会

    利用本地smtp server发送 windows下尝试装了两个smtp server大概配置了下,发现没法生效,也没时间仔细研究了.装上foxmail发现以前可以本地发送的选项已经无法找到. 不带附 ...

  7. 【python】脚本连续发送QQ邮件

    今天习得用python写一个连续发送QQ邮件的脚本,经过测试,成功给国内外的服务器发送邮件,包括QQ邮箱.163邮箱.google邮箱,香港科技大学的邮箱和爱丁堡大学的邮箱.一下逐步解答相关技巧. 首 ...

  8. 使用 Python 在 Linux 上实现一键回归测试

    从代码库迁出代码 —- pexpect 的使用 测试人员从代码库(例如 CVS )迁出代码的过程中,需要手动输入访问密码,而 Python 提供了 Pexpect 模块则能够将手动输入密码这一过程自动 ...

  9. 3.python 发送邮件之smtplib模块

    SMTP(Simple Mail Transfer Protocol)是简单邮件传输协议,它是一组用于由源地址到目的地址的邮件传输规则. python中对SMTP进行了简单的封装,可以发送纯文本邮件, ...

随机推荐

  1. HTML+CSS+js常见知识点

    一.HTML.CSS常见知识点 1.垂直居中盒子 /* 方法一 */ html, body { width: 100%; height: 100%; padding: 0; margin: 0; } ...

  2. 实现验证码图像文字的识别(C#调用DLL)

    请先下载http://asprise.com/product/ocr/index.php?lang=csharp 的SDK.里面提供了详细的OCR方法,如下:   将发现图像框picbVeryfyCo ...

  3. 什么是Node.js?带你初识Node

    什么是Node.js Nodejs是一个基于Chrome v8引擎的JavaScript运行环境 Node.js使用了一个事件驱动,非阻塞式I/O的模型,使其轻量又高效. Node.js 的包管理器 ...

  4. javascript第七章--DOM

    ① 节点层次 ② DOM操作技术

  5. 实战项目——mysql主从架构的实现

    一主一从 1.1 环境准备: centos系统服务器2台. 一台用户做Mysql主服务器, 一台用于做Mysql从服务器, 配置好yum源. 防火墙关闭. 各节点时钟服务同步. 各节点之间可以通过主机 ...

  6. 程序、计算机程序、java初论

    一.程序? 程序一词来自生活,通常指完成某些事情的一种既定方式和过程,可以将程序看成对一系列动作的执行过程的描述. 例如:个人去银行取钱 1.带上存折/银行卡去银行 2.取号排队 3.将存折或储蓄卡递 ...

  7. LDA算法入门

    http://blog.csdn.net/warmyellow/article/details/5454943 LDA算法入门 一. LDA算法概述: 线性判别式分析(Linear Discrimin ...

  8. Git详解及 github与gitlab使用

    1.1 关于版本控制 1.1.1 本地版本控制 本地版本控制系统 许多人习惯用复制整个项目目录的方式来保存不同的版本,或许还会改名加上备份时间以示区别.这么做唯一的 好处就是简单,但是特别容易犯错.有 ...

  9. webpack之深入浅出externals

    我们通常在做项目时可能会把第三方库打包到bundle中,比如下面这张图 如果不想把第三方库打包到bundle中,这就有了externals.官方的使用externals比较简单,只需三步-- 1.在H ...

  10. leetcode算法题2: 合并两个二叉树。递归,如何切入并保持清醒?

    /* Given two binary trees and imagine that when you put one of them to cover the other, some nodes o ...