EMAIL功能實現:html
1.發送EMAIL帶附件,而且帶壓縮文件夾作爲附件服務器
#_*_coding:utf-8_*_
import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart from email.mime.base import MIMEBase from email.header import Header from email import encoders import time import yaml,os,base64 from pos.lib import gl,scripts class EmailClass(object): def __init__(self): self.curDateTime = str(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime())) #當前日期時間
self.config = scripts.getYamlfield(gl.configFile) #配置文件路徑
self.sender = self.config['EMAIL']['Smtp_Sender'] # 從配置文件獲取,發件人
self.receivers = self.config['EMAIL']['Receivers'] # 從配置文件獲取,接收人
self.msg_title = self.config['EMAIL']['Msg_Title'] #從配置文件獲取,郵件標題
self.sender_server = self.config['EMAIL']['Smtp_Server'] #從配置文件獲取,發送服務器
self.From = self.config['EMAIL']['From'] self.To = self.config['EMAIL']['To'] ''' 配置郵件內容 ''' @property def setMailContent(self): print self.receivers msg = MIMEMultipart() msg['From'] = Header(self.From,'utf-8') msg['To'] = self.To msg['Subject'] = Header('%s%s'%(self.msg_title,self.curDateTime),'utf-8') #附件路徑
dirpath = gl.reportPath zipfile = os.path.join(os.path.dirname(dirpath), 'report.zip') reportfile = os.path.join(gl.reportPath, 'Report.html') scripts.zipDir(dirpath,zipfile) #壓縮報告
#增長郵件內容爲html
fp = open(reportfile, 'rb') reportHtmlText = fp.read() msg.attach(MIMEText(reportHtmlText,'html','utf-8')) fp.close() #增長附件
html = self.addAttach(zipfile,filename='Report%s.zip'%self.curDateTime) #自動化測試報告附件
msg.attach(html) return msg ''' 增長附件 '''
def addAttach(self,apath,filename='Report.html'): with open(apath, 'rb') as fp: attach = MIMEBase('application','octet-stream') attach.set_payload(fp.read()) attach.add_header('Content-Disposition', 'attachment', filename=filename) encoders.encode_base64(attach) fp.close() return attach ''' 發送電子郵件 '''
def sendEmail(self,message): try: smtpObj = smtplib.SMTP() smtpObj.connect(self.sender_server,25) smtpObj.login(self.sender,self.config['EMAIL']['Password']) smtpObj.sendmail(self.sender,self.receivers , message.as_string()) smtpObj.quit() print "郵件發送成功"
except smtplib.SMTPException as ex: print "Error: 沒法發送郵件.%s"%ex #發送調用
@property def send(self): self.sendEmail(self.setMailContent) if __name__=="__main__": EmailClass().send
2.壓縮文件夾及文件代碼:app
def zipDir(dirpath,outFullName): """ 壓縮指定文件夾 :param dirpath: 目標文件夾路徑 :param outFullName: 壓縮文件保存路徑+xxxx.zip :return: 無 """ zip = zipfile.ZipFile(outFullName,"w",zipfile.ZIP_DEFLATED) for path,dirnames,filenames in os.walk(dirpath): # 去掉目標跟路徑,只對目標文件夾下邊的文件及文件夾進行壓縮
fpath = path.replace(dirpath,'') for filename in filenames: zip.write(os.path.join(path,filename),os.path.join(fpath,filename)) zip.close()
3.配置文件config.yaml測試
Smtp_Server: smtp.exmail.qq.com Smtp_Sender: xxxx@163.com Password: xxxxxx Msg_Title: UI自動化測試結果 Receivers: ['xxxx@126.com'] #收件人
From: 自動化測試系統 To: 測試組