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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • phony 详解_phoning翻译

    phony 详解_phoning翻译phony详解1:一个目标,可以产生target文件,也可以不产生target文件echo目标就不产生echo文件不产生文件,则每次makeecho。都将执行recipe。因为make总是妄图产生一个比temp更新的target–echo文件。echo:temp@echo”$(shellls-ltemp)”2:一个目标,可以

    2022年10月27日
  • mysql 找不到或无法加载已注册的 .Net Framework Data Provider。

    mysql 找不到或无法加载已注册的 .Net Framework Data Provider。mysql 找不到或无法加载已注册的 .Net Framework Data Provider。

  • ffmpeg hevc_ffmpeg视频解码

    ffmpeg hevc_ffmpeg视频解码本次目标:1)将容器中的音频码流和视频码流分离出来。2)针对mp4文件中的码流情况进行修复。解封装的基本过程:#include<stdio.h>#include”libavcodec/avcodec.h”#include”libavformat/avformat.h”//MPEG-TS文件解封装得到的码流可播放,MP4解封装得到的码流不可播放;//这与容器的封装方式有关。voiddemuxer(constchar*url){//初始化格式上下文

    2022年10月16日
  • hp中国区总裁孙振耀职场圣经

    hp中国区总裁孙振耀职场圣经

  • opencv 人脸识别 (二)训练和识别

    opencv 人脸识别 (二)训练和识别上一篇中我们对训练数据做了一些预处理,检测出人脸并保存在\pic\color\x文件夹下(x=1,2,3,…类别号),本文做训练和识别。为了识别,首先将人脸训练数据转为灰度、对齐、归一化,再放入分类器(EigenFaceRecognizer),最后用训练出的model进行predict。—————————————–环境:vs2010+op

  • 微信小程序跳转传值(微信怎样打开小程序)

    前情:首先我们有这么一种需求,就是我在一个列表中点击了某个item,跳转到详情界面,那么我就需要把item的实体数据从列表页面传递到详情页面,那么我们来看看微信小程序给我们提供的API:先看api:这里大家可以清楚看到api中说到的如何传递参数,其实它这里指的参数仅仅是一些普通的数据类型具体分析:这里我们要传递的实体是object类型,那么我们需要先把实体转…

发表回复

您的电子邮箱地址不会被公开。

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