# coding=utf8
"""发送邮件模块"""
from __future__import division
import os
import smtplib
from os.pathimport basename
from email.mime.applicationimport MIMEApplication
from email.mime.multipartimport MIMEMultipart
from email.mime.textimport MIMEText
from email.utilsimport formatdate
import resultFolder
from commonLibraryimport logUtility
from commonLibrary.commonConfigurationimport EmailConfig
emailConfig = EmailConfig()
def send_email(send_to, subject, text, files=None):
"""
:param send_to: 收件人列表
:param subject: 邮件主题
:param text: 正文内容,本函数中格式为html
:param files: 附件"""
mail_host = emailConfig.mail_host#发件箱smtp服务器域名
mail_user = emailConfig.mail_user#发件人用户名
mail_pass = emailConfig.mail_pass#发件人邮箱
mail_postfix = emailConfig.mail_postfix#发件人邮箱后缀
me = mail_user +"<" + mail_user +"@" + mail_postfix +">"
msg = MIMEMultipart(_charset='utf-8')
msg['From'] = me#发件人
msg['To'] =';'.join(send_to)#收件人
msg['Date'] = formatdate(localtime=True)#发件日期
msg['Subject'] = subject#邮件主题
# msg.attach(MIMEText('Hi all,附件是自动化测试报告,请查阅!', _subtype='plain', _charset='utf-8')) #直接输入邮件正文,包含中文时需要制定编码
msg.attach(MIMEText(text, _subtype='html', _charset='utf-8'))#邮件正文,格式为html,本框架的报告发送失败
for attachFilein files:#附件
with open(attachFile, "rb")as f:
part = MIMEApplication(f.read(), Name=basename(attachFile))
msg.attach(part)
try:
s = smtplib.SMTP()
s.connect(mail_host)
s.login(mail_user, mail_pass)
s.sendmail(me, send_to, msg.as_string())
s.close()
return True
except Exception, e:
print str(e)
return False
def send_report(total, success, fail, error, skip, reportName) :
s1 = reportName.split('.')[0]
browsers ='/'.join(s1.split('_')[3:-1])
send_t = emailConfig.mail_receivers#收件人列表
passing_rate ='%.2f%%'% (success / (total - skip)*100)
subject = emailConfig.mail_subjectprefix +'('+ browsers +'),总数:'+str(total)+',通过:'+str(success) \
+',失败:'+str(fail)+',错误:'+str(error)+',跳过:'+str(skip)+',通过率:'+ passing_rate
file = os.path.join(resultFolder.getRunDirectory(), 'des.html')
with open(file, 'r')as f:#邮件正文
text = f.read()
targetDir = resultFolder.getRunDirectory()
# attachFiles = [ os.path.join(targetDir, f) for f in os.listdir(targetDir) ] # 附件
attachFiles = []#附件
try:
if send_email(send_t, subject, text, attachFiles):
logUtility.info('邮件发送成功!')
else:
logUtility.info("邮件发送失败!")
except Exception, e:
logUtility.error('邮件发送异常: ' + str(e))
if __name__ =='__main__':
send_report(91, 1, 2, 3, 4)