python邮件自动发送测试报告,看这篇文章就够了

python邮件自动发送测试报告,看这篇文章就够了

Python SMTP发送邮件

  • SMTP(Simple Mail Transfer Protocol),简单的邮件传输协议。他是一组用于从源地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式。SMTP协议属于 TCP/IP 协议簇,它帮组每台计算机再送中转信件时找到下一个目的地。SMTP服务器遵循 SMTP 协议的发送邮件服务器

开启SMTP

  • 这里我们以QQ邮箱为例,我们在邮箱设置 – 账户中找到开启服务,然后点击开启STMP
  • 然后设置一下客户端授权码
  • 发短信开启

在这里插入图片描述
然后我们可以通过python实现邮件发送了,下面是一个简单的例子

#! /usr/bin/python3
# -*- coding: UTF-8 -*-

import smtplib
import time
from email.mime.text import MIMEText
from email.header import Header


class TestMail(object):

    def __init__(self):
        self.mail_host = "smtp.qq.com"
        self.mail_user = "xxxxx@qq.com"
        self.mail_pass = ""  # 这里是QQ客户端授权密码

        self.sender = 'xxxxx@163.com' 
        self.receivers = ''

    def send_mail(self):
        body = 'Dear all:\n接口自动化测试报告如下:\n 测试用例集合:{}\n 运行结果:{}'.format('xxxx', 'xxxx')
        tm = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time()))
        message = MIMEText(body, 'plain', 'utf-8')
        message['From'] = self.mail_user
        message['To'] = self.receivers

        subject = '接口自动化报告测试'
        message['Subject'] = Header(subject + '_' + tm, 'utf-8')

        try:
            smtpObj = smtplib.SMTP()
            smtpObj = smtplib.SMTP_SSL(self.mail_host, 465)
            smtpObj.login(self.mail_user, self.mail_pass)
            smtpObj.sendmail(self.sender, self.receivers, message.as_string())
            print('send mail ok')
        except smtplib.SMTPException:
            print('send mail fail')


if __name__ == "__main__":
    send = TestMail()
    send.send_mail()

  • 然后通常在项目中,我们都是把邮箱的发送者和接受者以及一些邮件信息,单独放在config.yaml或者config.ini文件中进行配置化,下面我们来看看如何读取文件配置

读取配置

#! /usr/bin/python3
# -*- coding: UTF-8 -*-

[mail]
#发送邮件信息
mail_host = smtp.qq.com
mail_user = xxx@qq.com
mail_pass =            # 163客户端授权密码

sender = @qq.com
receivers = 

  • 读取配置
#! /usr/bin/python3
# -*- coding: UTF-8 -*-

import smtplib
import time
from pathlib import Path
from email.mime.text import MIMEText
from email.header import Header

from configparser import ConfigParser


class TestMail(object):

    def __init__(self):
        self.config = ConfigParser()
        self.conf_path = str(Path('config.ini').absolute())  # 读取绝对路径

        self.config.read(self.conf_path, encoding='utf-8')

    def send_mail(self):
        body = 'Dear all:\nDEMO 接口自动化测试报告:\n 测试用例集合:{}\n 运行结果:{}'.format('xxxx', 'xxxx')
        tm = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time()))
        message = MIMEText(body, 'plain', 'utf-8')
        message['From'] = self.config.get('mail', 'sender')
        message['To'] = self.config.get('mail', 'receivers')

        subject = '接口自动化测试报告'
        message['Subject'] = Header(subject + '_' + tm, 'utf-8')

        try:
            smtpObj = smtplib.SMTP()
            smtpObj = smtplib.SMTP_SSL(self.config.get('mail', 'mail_host'), 465)
            smtpObj.login(self.config.get('mail', 'mail_user'), self.config.get('mail', 'mail_pass'))
            smtpObj.sendmail(self.config.get('mail', 'sender'), self.config.get('mail', 'receivers'), message.as_string())
            print('send mail ok')
        except smtplib.SMTPException:
            print('send mail fail')


if __name__ == "__main__":
    send = TestMail()
    send.send_mail()

发送邮件带附件

  • 通常我们发邮件有时会需要发送附件,比如测试报告,贴代码
#! /usr/bin/python3
# -*- coding: UTF-8 -*-

import os
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.header import Header


def send_kindle():
    mail_host = "smtp.qq.com"
    mail_user = "@qq.com"
    mail_pass = ""

    sender = '@qq.com'
    receivers = '@kindle.cn'

    message = MIMEMultipart()
    message['From'] = mail_user
    message['To'] = receivers
    subject = '{}'.format(filename)
    message['Subject'] = Header(subject, 'utf-8')

    message.attach(MIMEText('{}'.format(filename), 'plain', 'utf-8'))

    att1 = MIMEText(open('/Users/Documents/book/{}'.format(filename), 'rb').read(), 'base64', 'utf-8')
    att1["Content-Type"] = 'application/octet-stream'
    att1["Content-Disposition"] = 'attachment; filename="book.mobi"'
    message.attach(att1)

    try:
        smtpObj = smtplib.SMTP_SSL(mail_host, 465)
        smtpObj.login(mail_user, mail_pass)
        smtpObj.sendmail(sender, receivers, message.as_string())
        print("发送成功")
    except smtplib.SMTPException:
        print("Error: 发送失败")


if __name__ == '__main__':
    filename = input("请输入您要发送的附件名称")
    os.path.split(filename)
    send_kindle()

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/100698.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 微信第三方开发者答网友问 微信创业靠谱吗

    微信第三方开发者答网友问 微信创业靠谱吗一、基础常识1、所谓的第三方开发,就是腾讯公众平台内开放的开发者模式。用户可以根据个人不同的需求开发不同的功能。2、开发模式后,有两个需要我们去填写的东西:一个是ur,一个是token;简单的解释一下就是:url地址,第三方平台的地址;token是通往地址的接口。3、第三方的开发什么?就是一些功能模块。第三方是一个平台,微信公众平台管理也是一个平台。而url就是一个一条链接

    2022年6月1日
    35
  • onResume无限循环

    onResume无限循环今天在做权限申请,写完后,发现点界面上任何东西都无法响应,整个界面处于卡死状态。查看Log,onResume和onPause在不停的执行,debug排查发现是因为请求权限导致的。由于考虑到权限必须获得,否则没法去读取数据和开启功能,所以就想着放在onResume里。请求权限相当于打开了一个请求权限界面,app会先执行onPause,如果有多个权限申请,点了允许,生命周期会执

    2022年6月2日
    31
  • python七夕表白代码(转载)_2019年倒计时日历

    python七夕表白代码(转载)_2019年倒计时日历520即将来袭~普通人表白,发微信买花程序员表白,用代码给女神画玫瑰,画爱心无线弹窗表白,网页无线弹窗表白第一种:心连心fromturtleimport*color(“black”,”red”)pensize(5)begin_fill()penup()goto(50,50)pendown()right(45)goto(100,0)left(90)fd(120)circle(50,225)penup()goto(0,0)pendown()left(13..

    2022年10月14日
    3
  • gmapping matlab实现_gmapping学习

    gmapping matlab实现_gmapping学习一、机器人地图机器人地图一般分为三种类型:栅格地图,拓扑地图,特征地图1、栅格地图栅格地图栅格地图,在物流信息技术中有所涉猎,其就是构建一个个“小方块”,利用颜色信息来区分的地图的位置信息。在机器人建图中,栅格地图容易构建,表示且保存位置的唯一,对于短路径的规划方便;但栅格地图的路径规划效率不高,空间浪费(栅格的分辨率不依赖于环境的复杂度)并且也需要精确的机器人位置估计,其对于物体识别的人机交互问…

    2022年6月16日
    35
  • flask 教程_python flask快速入门与进阶

    flask 教程_python flask快速入门与进阶Flask入门基础教程Flask简介Flask是一个轻量级的可定制框架,使用Python语言编写,较其他同类型框架更为灵活、轻便、安全且容易上手。它可以很好地结合MVC模式进行开发,开发人员分工合

    2022年8月3日
    10
  • 破解中国电信华为无线猫路由(HG522-C)自己主动拨号+不限电脑数+iTV

    破解中国电信华为无线猫路由(HG522-C)自己主动拨号+不限电脑数+iTV

    2021年12月8日
    62

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号