# coding=gbk
import zipfile
import os
import mimetypes
import smtplib # 发送邮件模块
from email import encoders
from email.mime.multipart import MIMEMultipart # 使用 MIMEMultipart 来标示这个邮件是多个部分组成的
from email.mime.base import MIMEBase
from email.mime.text import MIMEText # 定义邮件内容
import datetime
from email.utils import formataddr
def zipDir(dirpath, outFullName):
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()
print(' 压缩成功 ')
def send_email():
filepath = "D:\Email\ 接口测试报告 .zip" # 要发送的压缩文件路径
smtp_server = "smtp.163.com" # 发送邮箱服务器
username = "abc@163.com" # 用于发送邮箱的用户账号
password = "xxxxx" # 密码 ( 即授权码 )
sender = 'abc@163.com' # 发送者的邮箱
receivers = ['123@qq.com', '456@qq.com', '789@qq.com'] # 接收者的邮箱
EMAIL_FROM_NAME = ' 测试平台 ' # 自定义发件人名称
time = datetime.datetime.today().strftime("%m-%d %H : %M")
msg = MIMEMultipart()
# 邮件正文
msg.attach(MIMEText("hi , all ! \r\njmeter 接口测试报告结果请查看附件 ",'plain','utf-8')) # 文本内容换行 \r\n
msg['From'] = formataddr(pair=(EMAIL_FROM_NAME, sender)) # 自定义发件人的名称
# msg['To'] = receivers[0] # 外汇跟单gendan5.com 发送给 receivers 里的第一个用户
msg['To'] = ";".join(receivers) # 发送给多个好友
subject = "{}--jmeter 接口测试报告 ".format(time)
msg['Subject'] = subject
data = open(filepath, 'rb')
ctype, encoding = mimetypes.guess_type(filepath)
if ctype is None or encoding is not None:
ctype = 'application/octet-stream'
maintype, subtype = ctype.split('/', 1)
file_msg = MIMEBase(maintype, subtype)
file_msg.set_payload(data.read())
data.close()
encoders.encode_base64(file_msg) # 把附件编码
file_msg.add_header('Content-Disposition', 'attachment', filename=" 测试报告 .zip") # 修改邮件头
msg.attach(file_msg)
try:
server = smtplib.SMTP(smtp_server)
server.login(username,password)
server.sendmail(sender,receivers,msg.as_string())
server.quit()
print(" 发送成功 ")
except Exception as err:
print(" 发送失败 ")
print(err)
if __name__ =='__main__':
# dirpath 为要压缩的文件夹路径, outFullName 为压缩完后要存放的路径
dirpath = r'D:\ 接口测试报告 \ 接口测试报告 '
outFullName = r'D:\Email\ 接口测试报告 .zip'
zipDir(dirpath, outFullName)
send_email()