【详解】【记录】Python写Excel预约信息表并发送邮件
2015-12-16 10:49
801 查看
类似于本例我们写过两个脚本了,但还是遇到了一些问题。
本例是比较基础且标准的一个版本。
实现的操作是:从数据库中取出数据,写入Excel表,并发送邮件。相当简单的一个Excel表。
【发送给单人版】
【发送邮件给多人版】
主要是发送邮件的函数变化了
不一样的地方就三行代码
本例是比较基础且标准的一个版本。
实现的操作是:从数据库中取出数据,写入Excel表,并发送邮件。相当简单的一个Excel表。
【发送给单人版】
#!/usr/bin/python # -*- coding: UTF-8 -*- __author__ = "$Author: wangxin.xie$" __version__ = "$Revision: 1.0 $" __date__ = "$Date: 2015-12-11 10:36$" ############################################################### #功能: 鱼丸预约用户信息 ############################################################### import os import sys import datetime import xlrd import xlwt from xlutils.copy import copy from myyutil.DBUtil import DBUtil import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart from myyutil.ScriptExecuteUtil import ScriptExecuteUtil reload(sys) sys.setdefaultencoding('utf8') #######################全局变量#################################### ngTradeDBUtil = DBUtil('netgame_trade') #execute = ScriptExecuteUtil(handleDate = handleDate) #fileDir = '/usr/local/bin/myy_script/report/data/' #fileName = fileDir + execute._reportName fileDir = 'D://' fileName = fileDir+'yuwanyuyue.xls' tempFileName = fileDir+'yuwan_temp.xls' style1 = xlwt.XFStyle() font1 = xlwt.Font() font1.height = 220 font1.name = 'SimSun' style1.font = font1 ################################################################## def createTemplateExcel(): '''创建Excel文件模板''' wb = xlwt.Workbook(encoding = "UTF-8", style_compression = True) sht0 = wb.add_sheet("sheet1", cell_overwrite_ok = True) sht0.col(0).width=5000 sht0.col(1).width=6000 sht0.col(2).width=6000 sht0.write(0, 0, '手机号码', style1) sht0.write(0, 1, '预约时间', style1) sht0.write(0, 2, 'IP', style1) wb.save(tempFileName) def genYuwanAccountAppointment(): sql = "SELECT MOBILE,CREATED_DATE,IP FROM netgame_trade.YUWAN_ACCOUNT_APPOINTMENT WHERE CREATED_DATE < '2015-12-12'" rs = ngTradeDBUtil.queryList(sql, ()) if not rs: return None print rs return rs def writeInfo0(sht, rs, length): '''写入具体数据''' for i in range(length): sht.write(i+1, 0, str(rs[i][0]), style1) sht.write(i+1, 1, str(rs[i][1]), style1) sht.write(i+1, 2, rs[i][2], style1) def writeExcel(): '''写报表''' createTemplateExcel() readFile = tempFileName rb = xlrd.open_workbook(readFile, on_demand = True, formatting_info = True) wb = copy(rb) rs=genYuwanAccountAppointment() length=len(rs) sheet0 = wb.get_sheet(0) writeInfo0(sheet0, rs, length) wb.save(fileName) def sendEmail(): # 创建一个带附件的实例 msg = MIMEMultipart() # 构造附件1 att1 = MIMEText(open(fileDir+'yuwanyuyue.xls', 'rb').read(), 'base64', 'gb2312') att1["Content-Type"] = 'application/octet-stream' # fileName以数据加日期命名 fileName="鱼丸预约信息".decode('utf-8').encode('gbk')+".csv" att1["Content-Disposition"] = 'attachment; filename=%s'%fileName msg.attach(att1) # 写入邮件正文 text=" Hi,本邮件为自动信,若有任何问题请与我联系。谢谢!" # 邮件正文乱码,所以在这里指定编码 part1 = MIMEText(text, 'plain', _charset='utf-8') msg.attach(part1) # 加邮件 msg['to'] = 'wan.zhang@xxx.com' msg['from'] = 'datacentre@xxx.com' msg['subject'] = '预约信息'.decode('utf-8') # 发送邮件 try: server = smtplib.SMTP() # 数据中心测试时 server.connect('mail.xxx.com') # 用户名,密码 server.login('datacentre@xxx.com', 'pwd') server.sendmail(msg['from'], msg['to'], msg.as_string()) server.quit() print '发送成功'.decode("utf-8") except Exception, e: print str(e) def main(): print "===%s start===%s"%(sys.argv[0], datetime.datetime.strftime(datetime.datetime.now(), "%Y-%m-%d %H:%M:%S")) writeExcel() sendEmail() print "===%s end===%s"%(sys.argv[0], datetime.datetime.strftime(datetime.datetime.now(), "%Y-%m-%d %H:%M:%S")) if __name__ == '__main__': try: main() #createTemplateExcel() #execute.start(main) #execute.addMailTask() #execute.pushStart(fileDir) #execute.end() finally: if ngTradeDBUtil: ngTradeDBUtil.close()
【发送邮件给多人版】
主要是发送邮件的函数变化了
def sendEmail(): # 创建一个带附件的实例 msg = MIMEMultipart() # 构造附件1 att1 = MIMEText(open(fileDir+'yuwanyuyue.xls', 'rb').read(), 'base64', 'gb2312') att1["Content-Type"] = 'application/octet-stream' # fileName以数据加日期命名 fileName="鱼丸预约信息".decode('utf-8').encode('gbk')+".csv" att1["Content-Disposition"] = 'attachment; filename=%s'%fileName msg.attach(att1) # 写入邮件正文 text=" Hi,本邮件为测试自动信,若有任何问题请与我联系。谢谢!" # 邮件正文乱码,所以在这里指定编码 part1 = MIMEText(text, 'plain', _charset='utf-8') msg.attach(part1) # 加邮件 strTo = ['wan.zhang@xxx.com', 'wangxin.xie@xxx.com'] msg['to'] = ','.join(strTo) msg['from'] = 'datacentre@xxx.com' msg['subject'] = '用户预约信息'.decode('utf-8') # 发送邮件 try: server = smtplib.SMTP() # 数据中心测试时 server.connect('mail.xxx.com') # 用户名,密码 server.login('datacentre@xxx.com', 'pwd') server.sendmail(msg['from'], strTo, msg.as_string()) server.quit() print '发送成功'.decode("utf-8") except Exception, e: print str(e)
不一样的地方就三行代码
strTo = ['wan.zhang@xxx.com', 'wangxin.xie@xxx.com'] msg['to'] = ','.join(strTo)
server.sendmail(msg['from'], strTo, msg.as_string())
相关文章推荐
- [Python]将Excel文件中的数据导入MySQL
- python产生随机字符串
- python登陆教学系统
- 【Python】命令行进度条模拟
- ice python lib编译
- python读书笔记-django架站过程总结(from the django book)
- 解决python进程池中无法使用multiprocessing.Queue
- [No000064]python 变量命名规范
- 简单的python爬虫——贴吧上取邮箱
- python round() round函数
- [No000063]Python格式化输出
- python连接Mysql操作
- Windows Python Extension Packages
- python --批量重命名文件名
- Windows下Python添加库(模块)路径
- Ubuntu选择python版本
- php之与python进行socket通信
- Python爬虫入门案例:获取百词斩已学单词列表
- python_类包装
- python编码问题1