python 怎么生出成一个表格,并发送邮件

Python014

python 怎么生出成一个表格,并发送邮件,第1张

# -*- coding: utf-8 -*-

#程序名称:自动化缺陷报告脚本

#程序描述:实现从本地路径读取excel文件内容,并绘制HTML表格,将内容写入邮件正文区发送

#编写时间:2014.11.29-2014.12.4

#作者:刘琳泽

#解释环境:Windows 7家庭高级版 Python 2.7.8IDLE

#引入excel文档相关库

import xlrd

import os,time

#引入邮件相关库

import smtplib

from email.mime.text import MIMEText

from email.header import Header

import base64

#处理从excel中读取的float类型数据的类

#目前集成两种处理:(1)float到int型的转换(2)float到str型的转换,后续有需要可以增加方法以集成其他类型的转换

class judgeFloat:

def floatToInt(self,variable):

variable="%d"%variable

return variable

def floatToStr(self,variable):

variable=xlrd.xldate_as_tuple(variable,0)

variable=list(variable)

if variable[1]<10:

variable[1]='0'+str(variable[1])

variable=str(variable[0])+str(variable[1])+str(variable[2])

return variable

#确定文档是否修改的函数:获取文档的修改时间与本地时间对比,不一致要求用户确认是否继续执行,一致则直接执行

def openFile(filename,address):

filetime=time.strftime("%Y/%m/%d",time.localtime(os.stat(address+filename).st_mtime))

local=time.strftime("%Y/%m/%d",time.localtime())

if filetime!=local:

single=input("文档今天还没有修改过,请确认是否继续?确认请输入1后点击回车,否则输入2点击回车。")

if single==1:

pass

elif single==2:

exit()

else:

print '您的输入有误!脚本即将结束。'

time.sleep(5)

exit()

else:

pass

#写邮件的函数

def mailWrite(filename,address):

header='<html><head><meta http-equiv="Content-Type" content="text/htmlcharset=utf-8" /></head>'

th='<body text="#000000">committed缺陷详情:<table border="1" cellspacing="0" cellpadding="3" bordercolor="#000000" width="1800" align="left" ><tr bgcolor="#F79646" align="left" ><th>标识</th><th>摘要</th><th>状态</th><th>优先级</th><th>严重性</th><th>标记</th><th>所有者</th><th>创建时间</th><th>修改时间</th></tr>'

#打开文件

filepath=address+filename

book=xlrd.open_workbook(filepath)

sheet=book.sheet_by_index(0)

#获取行列的数目,并以此为范围遍历获取单元数据

nrows = sheet.nrows-1

ncols = sheet.ncols

body=''

cellData=1

for i in range(1,nrows+1):

td=''

for j in range(ncols):

#读取单元格数据,赋给cellData变量供写入HTML表格中

cellData=sheet.cell_value(i,j)

#调用浮点型转换方法解决读取的日期内容为浮点型数据的问题

if isinstance(cellData,float):

if j==0 and i>0:

cellDataNew=judgeFloat()

cellData=cellDataNew.floatToInt(cellData)

else:

cellDataNew=judgeFloat()

cellData=cellDataNew.floatToStr(cellData)

else:

pass

tip='<td>'+cellData+'</td>'

#并入tr标签

td=td+tip

tr='<tr>'+td+'</tr>'

#为解决字符串拼接问题增设语句,tr从excel中读取出来是unicode编码,转换成UTF-8编码即可拼接

tr=tr.encode('utf-8')

#并入body标签

body=body+tr

tail='</table></body></html>'

#将内容拼接成完整的HTML文档

mail=header+th+body+tail

return mail

#发送邮件

def mailSend(mail):

#设置发件人

sender = '***'

#设置接收人

receiver = '***@***.com'

#设置邮件主题

subject = '测试邮件,请忽略!'

#设置发件服务器,即smtp服务器

smtpserver = 'smtp.***.net'

#设置登陆名称

username = '***@***.net'

#设置登陆密码

password = '******'

#实例化写邮件到正文区,邮件正文区需要以HTML文档形式写入

msg = MIMEText(mail,'html','utf-8')

#输入主题

msg['Subject'] = subject

#调用邮件发送方法,需配合导入邮件相关模块

smtp = smtplib.SMTP()

#设置连接发件服务器

smtp.connect('smtp.***.net')

#输入用户名,密码,登陆服务器

smtp.login(username, password)

#发送邮件

smtp.sendmail(sender, receiver, msg.as_string())

#退出登陆并关闭与发件服务器的连接

smtp.quit()

#入口函数,配置文件地址和文件名

def main():

filename='Sheet1.xlsx'

address='d:/defectManage/'

openFile(filename,address)

mail=mailWrite(filename,address)

mailSend(mail)

#调用执行main函数

if __name__=="__main__":

main()

生成excel表格可以用pyExcelerator模块

类似

from pyExcelerator import *

wb = Workbook()

ws = wb.add_sheet('Sheet1')

ws.write(0,0,'host')

ws.write(0,1,'asker')

ws.write(0,2,'head')

ws.write(0,3,'main')

ws.write(0,4,'time')

发送邮件可以用email模块,需要加附件

类似

from email.mime.text import MIMEText

from email.MIMEMultipart import MIMEMultipart

import email.MIMEText

import email.MIMEBase

sender = '[email protected]'#发件人地址

receiver = '[email protected]'#收件人地址

smtpserver = 'smtp.qq.com'#邮件服务器

username = '307212178'#用户名

password = 'aaaaaa111111'#密码

smtp = smtplib.SMTP()

def send_email(msg,file_name):

msgRoot = MIMEMultipart()

msgRoot['Subject'] = 'DO not see it!!!!!'#邮件标题,这里我把标题设成了你所发的附件名

msgText = MIMEText('%s'%msg,'html','utf-8')#你所发的文字信息将以html形式呈现

msgRoot.attach(msgText)

att = MIMEText(open('%s'%file_name, 'rb').read(), 'base64', 'utf-8')#添加附件

att["Content-Type"] = 'application/octet-stream'

att["Content-Disposition"] = 'attachmentfilename="%s"'%file_name

msgRoot.attach(att)

while 1:#持续尝试发送,直到发送成功

try:

smtp.sendmail(sender, receiver, msgRoot.as_string())#发送邮件

break

except:

try:

smtp.connect(smtpserver)#连接至邮件服务器

smtp.login(username, password)#登录邮件服务器

except:

print "failed to login to smtp server"#登录失败

if __name__ == "__main__":

MSG="表格"#要发送的文字

FILE="C:\\Users\1.txt"#要发送的文件

send_email(MSG,FILE)

里面的内容有删减,你可以自己添加删减