python 邮件发送

各种邮件类型参考https://www.runoob.com/python/python-email.html

import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.utils import  formataddr
import os,sys
import time
from config.config import  reportpath
reportPath = reportpath  # 测试报告的路径

class SendEmail():
    def __init__(self):
        #第三方SMTP服务
        self.email_host = "smtp.exmail.qq.com"# 设置服务器
        self.send_user = "xx@qq.com"  # 登录邮箱的用户名
        self.password= "xxxxx"  # 授权码

    def get_report(self):# 该函数的作用是为了在测试报告的路径下找到最新的测试报告
        dirs = os.listdir(reportPath)
        dirs.sort()
        print("路径%s"%dirs)
        newreportname = dirs[0]
        print('The new report name: {0}'.format(newreportname))
        return newreportname  # 返回的是测试报告的名字

    def send_mail(self,user_list,sub,content):
        #创建一个带附件的实例
        message=MIMEMultipart()
        message['Subject']=sub#发送邮件主题
        message['From']=self.send_user#发送邮件用户
        message['To']=";".join(user_list)#发送对象
        newreport = self.get_report()#获取最新报告文件
        message['date'] = time.strftime('%a, %d %b %Y %H:%M:%S %z')
        with open(os.path.join(reportPath, newreport), 'rb') as f:
            mailbody = f.read()  # 读取测试报告的内容
        html = MIMEText(mailbody, _subtype='html', _charset='utf-8')  # 将测试报告的内容放在 邮件的正文当中
        message.attach(html)  # 将html附加在msg里
        # html附件    下面是将测试报告放在附件中发送
        att1 = MIMEText(mailbody, 'base64', 'gb2312')
        att1["Content-Type"] = 'application/octet-stream'
        att1["Content-Disposition"] = 'attachment; filename="TestReport.html"'  # 这里的filename可以任意写,写什么名字,附件的名字就是什么
        message.attach(att1)

        # 异常处理
        try:
            #连接邮箱服务
            server=smtplib.SMTP()
            server.connect(self.email_host)
            server.login(self.send_user,self.password)
            server.sendmail(self.send_user,user_list,message.as_string())
            print("发送成功")
            server.close()

        except smtplib.SMTPException:
            print ("Error:无法发送邮件")


    def send_main(self,pass_list=[],fail_list=[]):

        pass_num=float(len(pass_list))
        fail_num=float(len(fail_list))
        count_num=pass_num +fail_num
        user_list = ['jenny.zhang@wetax.com.cn']
        sub = "接口自动化测试报告"
        content = "此次一共运行接口个数为%s个,通过个数为%s个,失败个数为%s" % (count_num, pass_num, fail_num)
        self.send_mail(user_list, sub, content)#调用发送邮件的方法


if __name__=="__main__":#发送邮件包含成功与失败个数调试
    sen=SendEmail()
    user_list=["jenny.zhang@wetax.com.cn"]
    sub="接口自动化测试"
    content='hehheheheh'
    sen.send_mail(user_list,sub,content)
    
原文地址:https://www.cnblogs.com/xiaozeng6/p/10991982.html