python 发送email邮件带附件
EMAIL功能实现:
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.压缩文件夹及文件代码:
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: 测试组
python 发送email邮件带附件的更多相关文章
- 【Python开发】python发送各类邮件的方法
转载: python发送各类邮件的主要方法 python中email模块使得处理邮件变得比较简单,今天着重学习了一下发送邮件的具体做法,这里写写自己的的心得,也请高手给些指点. 一.相关模块介绍 发送 ...
- [Python] 发送email的几种方式
python发送email还是比較简单的,能够通过登录邮件服务来发送,linux下也能够使用调用sendmail命令来发送,还能够使用本地或者是远程的smtp服务来发送邮件,无论是单个,群发,还是抄送 ...
- 使用python调用email模块发送邮件附件
使用python调用email模块实现附件发送 需要模块: import datetime import time import sys import mimetypes import smtplib ...
- Python 发送 email 的两种方式
Python发送email的两种方式,分别为使用登录邮件服务器.调用sendmail命令来发送三种方法 Python发送email比较简单,可以通过登录邮件服务来发送,linux下也可以使用调用sen ...
- 使用python发送163邮件 qq邮箱
使用python发送163邮件 def send_email(title, content): import smtplib from email.mime.multipart import MIME ...
- C#发送Email邮件(实例:QQ邮箱和Gmail邮箱)
下面用到的邮件账号和密码都不是真实的,需要测试就换成自己的邮件账号. 需要引用: using System.Net.Mail; using System.Text; using System.Net; ...
- [转]C#发送Email邮件 (实例:QQ邮箱和Gmail邮箱)
下面用到的邮件账号和密码都不是真实的,需要测试就换成自己的邮件账号. 需要引用:using System.Net.Mail;using System.Text;using System.Net; 程序 ...
- 【转】C#发送Email邮件
转自:http://hi.baidu.com/bluesky_cn/item/8bb060ace834c53f020a4df2 下面用到的邮件账号和密码都不是真实的,需要测试就换成自己的邮件账号. 需 ...
- python 发邮件-带附件-文本-html
#!/usr/bin/python # encoding=utf-8 # Filename: send_email.py from email.mime.image import MIMEImage ...
随机推荐
- MXNET:卷积神经网络
介绍过去几年中数个在 ImageNet 竞赛(一个著名的计算机视觉竞赛)取得优异成绩的深度卷积神经网络. LeNet LeNet 证明了通过梯度下降训练卷积神经网络可以达到手写数字识别的最先进的结果. ...
- OraclePLSQL编程
PL/SQL编程 pl/sql(procedural language/sql)是Oracle在标准的sql语言上的扩展.pl/sql不仅允许嵌入式sql语言,还可以定义变量和常量,允许使用条件语句和 ...
- 框架源码系列九:依赖注入DI、三种Bean配置方式的注册和实例化过程
一.依赖注入DI 学习目标1)搞清楚构造参数依赖注入的过程及类2)搞清楚注解方式的属性依赖注入在哪里完成的.学习思路1)思考我们手写时是如何做的2)读 spring 源码对比看它的实现3)Spring ...
- pytest学习 一
网上有很多这样的资料,学起来还是比较简单,为了将学到的东西应用于工程化,参考这样的样板代码: https://github.com/jeffmacdonald/pytest_test 将其下载到C:\ ...
- vlc-ts
https://github.com/jiayayao/vlc_2.1.0-vs_2010 https://wenku.baidu.com/view/a0634d26336c1eb91a375d70. ...
- python内建时间模块 time和datetime
时间模块 UTC(Coordinated Universal Time,世界协调时)亦即格林威治天文时间,世界标准时间.在中国为UTC+8.DST(Daylight Saving Time)即夏令时. ...
- “Java是编译执行的语言”这句话对吗?
现在让你谈谈对Java平台的理解,你是否会感觉内容过于庞大?这个问题是比较宽泛的,Java发展到现在已经不仅仅是语言这么简单了,Java平台涉及的,包括但不仅限于下面提到的这些内容: Java语言本身 ...
- Java开发工程师面试题1
时间2019-1-2 地点上海 package service; import java.text.SimpleDateFormat; import java.util.Date; public cl ...
- 【转】Linux netstat命令详解,高级面试必备
简介 Netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Member ...
- Spark RDD的默认分区数:(spark 2.1.0)
本文基于Spark 2.1.0版本 新手首先要明白几个配置: spark.default.parallelism:(默认的并发数) 如果配置文件spark-default.conf中没有显示的配置,则 ...