• csdn最牛最全的使用python自动发送邮件


    使用python自动发送邮件

    1、Python 自带的发送邮件功能

     在生成报告后我们希望框架能自动把报告发送到我们的邮箱中。和outlook,foxmail等邮件客户端一样,Python中发送邮件需要通过Email的smtp服务发送。

     首先需要确认用来发送邮件的邮箱是否启用了smtp服务,以126邮箱为例:

    发送邮件分3步 

    1. 编写邮件内容(Email邮件需要专门的MIME格式)

    2. 组装Email头(发件人,收件人,主题)

    3. 连接smtp服务器并发送邮件

     1.1 发送邮件基础实现

    代码实现:

    # -*- coding:utf-8 -*-
    import smtplib  # 用于建立smtp连接
    from email.mime.text import MIMEText  # 邮件需要专门的MIME格式
    
    # 1.编写邮件内容,email邮件需要专门的MIME格式
    msg =MIMEText("这是邮件正文:Hello.yin,this is a test mail", "plain", "utf-8")  # plain指普通文本格式邮件内容
    
    # 2.组装Email头(发件人,收件人,主题)
    msg['From'] = 'zuopuyin@126.com'  # 发件人
    msg['To'] = 'zuopuyin2@126.com'  # 收件人
    msg['Subject'] = '这是邮件主题:Hello yin Api Test Report'  # 邮件主题
    
    # 3.连接smtp服务器并发送邮件
    smtp = smtplib.SMTP_SSL("smtp.126.com")  # smtp服务器地址,采用SSL模式
    smtp.login('zuopuyin@126.com', 'ROFAUSLTHKIIQJM')  # 如果使用126邮箱,需在设置中申请授权密码
    smtp.sendmail('zuopuyin@126.com', 'zuopuyin2@126.com', msg.as_string())
    smtp.quit()

    输出结果:

    1.2 中文邮件主题、HTML邮件内容,及附件 

    实现代码:

    # -*- coding:utf-8 -*-
    import smtplib
    from email.mime.text import MIMEText
    from email.mime.multipart import MIMEMultipart  # 混合MIME格式,支持上传附件
    from email.header import Header   # 用于使用中文邮件主题
    
    # 1.编写邮件内容
    with open("testReport.html", encoding='utf-8') as f:  # 打开html报告
        email_body = f.read()  # 读取报告内容
    
    msg = MIMEMultipart()  # 混合MIME格式
    msg.attach(MIMEText(email_body, 'html', 'utf-8'))  # 添加html格式邮件正文,会丢失css格式
    
    # 2.组装email的头
    msg['From'] = 'zuopuyin@126.com'  # 发件人
    msg['To'] = 'zuopuyin2@126.com'  # 收件人
    msg['Subject'] = Header('接口测试报告', 'utf-8')  # 中文主题邮件,指定utf-8编码
    
    
    # 3.构造附件1,传送到当前目录下的text.txt文件
    att1 = MIMEText(open('testReport.html', 'rb').read(), 'base64', 'utf-8')  # 二进制格式打开
    att1["Content-Type"] = "application/octet-stream"
    att1["Content-Disposition"] = 'attachment; filename="report.html"'  # filename为邮件中附件显示的名字
    msg.attach(att1)
    
    # 连接smtp服务器并发送邮件
    smtp = smtplib.SMTP_SSL("smtp.126.com")  # smtp服务器地址,使用SSL格式
    smtp.login("zuopuyin@126.com", "ROFAUSLTHKIIQJM")  # 用户名和密码
    smtp.sendmail("zuopuyin@126.com", "zuopuyin2@126.com", msg.as_string())
    smtp.sendmail("zuopuyin@126.com", "yinzuopu@qq.com", msg.as_string())  # 发送给另一个邮箱
    smtp.quit()

    输出结果:

     1.3 封装发送邮件办法

    # -*- coding:utf-8 -*-
    import smtplib
    from email.header import Header
    from email.mime.text import MIMEText
    from email.mime.multipart import MIMEMultipart
    from log.config import *
    
    
    def send_email(report_file):
        msg = MIMEMultipart()  # 混合MIME格式
        msg.attach(MIMEText(open(report_file, encoding='utf-8').read(), 'utf-8'))  #  添加html格式邮件正文(会丢失css格式)
        msg['From'] = 'zuopuyin@126.com'  # 发件人
        msg['To'] = 'yinzuopu@qq.com'  # 收件人
        msg['Subject'] = Header('接口测试报告', 'utf-8')  # 中文邮件主题,指定utf-8编码
    
        att1 = MIMEText(open(report_file, 'rb').read(), 'base64', 'utf-8')  # 二进制格式打开
        att1["Content-Type"] = 'application/octet-stream'
        att1["Content-Disposition"] = 'attachment; filename="testReport.html"'  # filename为邮件中附件显示的名字
        msg.attach(att1)
    
        try:
            smtp = smtplib.SMTP_SSL('smtp.126.com')  # smtp服务器地址 使用SSL模式
            smtp.login('zuopuyin@126.com', 'ROFAUSLTHKIIQJM')  # 用户名和密码
            smtp.sendmail("zuopuyin@126.com", "yinzuopu@qq.com", msg.as_string())
            smtp.sendmail("zuopuyin@126.com", "zuopuyin2@126.com", msg.as_string())  # 发送给另一个邮箱
            logging.info("邮件发送完成!")
        except Exception as e:
            logging.error(str(e))
        finally:
            smtp.quit()

    run_all.py中结束后发送邮件

    # -*- coding:utf-8 -*-
    
    import unittest
    from HTMLTestRunner import HTMLTestRunner
    from log.config import *
    from test_send_mail_03 import send_email
    logging.info("================================== 测试开始 ==================================")
    suite = unittest.defaultTestLoader.discover("./")
    with open("report.html", 'wb') as f:  # 改为with open 格式
        HTMLTestRunner(stream=f, title="Api Test", description="测试描述").run(suite)
    send_email('report.html')  # 发送邮件
    logging.info("================================== 测试结束 ==================================") 
  • 相关阅读:
    不做技术不会管理,测试人还有这个职位可以进阶
    通讯录多版本代码归纳
    Java语言程序设计-关键术语(第一弹)
    虹科产品丨HK-TrueNAS SCALE可使用公共云存储
    【ardunio】青少年机器人四级实操代码(2023年9月)
    张成方案——Span Programs
    mysql数据库基本操作中update修改、delete删除基本操作
    Spark 中数据结果传输到 Driver 端
    易云维®工厂能耗管理平台系统方案,保证运营质量,推动广东制造企业节能减排
    MySQL知识点总结(五)——锁
  • 原文地址:https://blog.csdn.net/m0_60054525/article/details/124915022