前言
每当测试结束后,测试人员都会输出一份详细的测试报告给到领导或者组内人员,那么当我们自动化测试结束后的时候,也可以让其自动发送测试报告。
这样领导和组内的成员就能看到自动化测试每次测试的内容了。安静先介绍下如何通过Python发送邮件,再通过简单的小例子在自动化测试过程中自动发送报告。
smtplib
smtplib是属于Python发送邮件的一个库。其简单的原理是通过SMTP的方式来实现发送报告的。SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。
smtplib中对其SMTP的协议进行了一个封装,其中email是用来支持发送文本、图片和携带附件等功能。
登录邮箱
发送邮件前肯定需要登录邮箱了,这里安静先通过163的邮箱进行介绍,登录是通过smtplib这个库进行来完成的。
这里需要先确认发件人的邮箱是否开通了SMTP邮箱权限,可以登录到163邮箱中,选择SMTP/IMAP中选择开启SMTP服务。勾选后进行连接登录:
import smtplib
# 创建smtplib服务
smtp = smtplib.SMTP()
# 服务器地址
smtpserver = 'smtp.163.com'
# 发送账号
user = 'XXXXXXXX@163.com'
# 发送密码
password = 'xxxxxxx'
# 收件人
receivers = '821006052@qq.com'
# 连接服务器
smtp.connect(smtpserver)
# 登录邮箱账号
smtp.login(user, password)
(左右滑动查看完整代码)
邮件发送类型
邮件发送通过Python中的email的库来实现的,其中email发送邮件可以支持多类型,比如纯文本、纯图片、文本加附件等方法,这里安静会一个个进行介绍。
文本发送
发送邮件肯定包含发送人、收件人、邮件标题、邮件内容等内容,这里email中的Mimetext的方法可以帮助我们实现发送纯文本内容。
import smtplib
from email.mime.text import MIMEText
# 创建smtplib服务
smtp = smtplib.SMTP()
# 服务器地址
smtpserver = 'smtp.163.com'
# 发送账号
user = 'xxxxxxx@163.com'
# 发送密码
password = 'xxxxxxx'
# 收件人
receivers = '821006052@qq.com'
# 邮件标题
subject = '自动化测试报告'
# 发送内容 (文本内容,发送格式,编码格式)
message = MIMEText('这是测试文本内容,自动化测试通过', 'html', 'utf-8')
# 发送地址
message['From'] = user
# 接收地址
message['To'] = receivers
# 邮件标题
message['subject'] =subject
# 连接服务器
smtp.connect(smtpserver)
# 登录邮箱账号
smtp.login(user, password)
# 发送账号信息
smtp.sendmail(user,receivers,message.as_string())
# 关闭
smtp.quit()
(左右滑动查看完整代码)
通过执行后可以发现,QQ邮箱已经成功的收到了邮件信息。
图片发送
正常发送邮件只需要将邮件全部都复制粘贴到邮件中就行了。但是这里我们通过Python进行发送邮箱,需要用到email中的MIMEimage的模块了。
这个模块可以帮助我们将我们需要的图片内容添加到邮件中,需要我们将本地的图片导入到html中,通过html中进行发送,如果你通过链接的形式发送会失败,邮件会识别成恶意链接,从而进行拦截。这里安静这接在上面的代码中进行加入HTML格式,将图片嵌套在html文本中发送:
import smtplib
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
# 创建smtplib服务
smtp = smtplib.SMTP()
# 服务器地址
smtpserver = 'smtp.163.com'
# 发送账号
user = 'xxxxxx@163.com'
# 发送密码
password = 'xxxxxx'
# 收件人
receivers = '821006052@qq.com'
# 邮件标题
subject = '自动化测试报告中加入图片'
# 发送内容 (文本内容,发送格式,编码格式)
text = '''
<html>
<head>自动化测试报告中带图片</head>
<body>
<p>
<p><img src="cid:anjing"></p>
<p>
</body>
</html>
'''
message = MIMEMultipart()
body = MIMEText(text, 'html', 'utf-8')
f = open('123.jpg','rb')
mag = MIMEImage(f.read())
f.close()
# 定义图片ID在HTML中展示
mag.add_header('Content-ID', 'anjing')
# 添加图片信息
message.attach(mag)
# 添加正文
message.attach(body)
# 发送地址
message['From'] = user
# 接收地址
message['To'] = receivers
# 邮件标题
message['subject'] =subject
# 连接服务器
smtp.connect(smtpserver)
# 登录邮箱账号
smtp.login(user, password)
# 发送账号信息
smtp.sendmail(user,receivers,message.as_string())
# 关闭
smtp.quit()
(左右滑动查看完整代码)
通过执行上面的代码可以看到QQ邮箱,已经接收到了邮件信息,打开邮箱清楚的看到,图片已经在文本中添加了。
附件发送
发送邮件需要带附件的情况下,我们可以使用email库中的MIMEMUltipart模块
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
# 创建smtplib服务
smtp = smtplib.SMTP()
# 服务器地址
smtpserver = 'smtp.163.com'
# 发送账号
user = 'xxxxxx@163.com'
# 发送密码
password = 'xxxxxx'
# 收件人
receivers = '821006052@qq.com'
# 邮件标题
subject = '自动化测试报告中附件'
message = MIMEMultipart()
body = MIMEText('自动化测试报告携带附件内容', 'html', 'utf-8')
# 添加正文
message.attach(body)
att = MIMEText(open('123.jpg', 'rb').read(), 'base64', 'utf-8')
att["Content-Type"] = 'application/octet-stream' # 死格式
# filename 表示附件的名称
att["Content-Disposition"] = 'attachment; filename="fujian.jpg"'
# 邮件中添加附件
message.attach(att)
# 发送地址
message['From'] = user
# 接收地址
message['To'] = receivers
# 邮件标题
message['subject'] =subject
# 连接服务器
smtp.connect(smtpserver)
# 登录邮箱账号
smtp.login(user, password)
# 发送账号信息
smtp.sendmail(user,receivers,message.as_string())
# 关闭
smtp.quit()
(左右滑动查看完整代码)
通过执行代码清楚的看到邮件中已经携带了附件内容,并且成功发送了。
zmail邮件
一些测试同学看到上面这么多代码估计脑袋就大,安静在给大家介绍一种简单方便的发送邮件库zmail,这个库的目的就是为了方便发送邮件。
但是要注意zmail这个库目前只支持Python3不支持Python2,想必都2021年了,没人再用Python2了吧。
安装:
pip install zmail
(左右滑动查看完整代码)
文本发送
继续从文本发送,先创建一个zmail服务,将其发件人邮箱账号以及邮箱授权码(163设置中的SMTP打开)进行连接通过zmail服务连接。编辑文本进行发送:
import zmail
# 发件人
username = 'xxxxxx@163.com'
# 授权码密码
password = 'xxxxxx'
# 创建zmail服务
server= zmail.server(username,password)
# 邮件主题
body = {
'subject': "自动化测试报告", # 邮件标题
"content_text": '这是邮件的文本内容,自动化测试结果', # 邮件文本
}
# 收件人
receivers = '821006052@qq.com'
# 发送邮件
server.send_mail(receivers,body)
(左右滑动查看完整代码)
通过代码就可以看出来很清楚的就讲邮件内容展现出来,执行代码,成功的收到邮件信息。
图片发送
同样文本发送完成后,继续来我们的图片发送。这里可以通过图片的base64的格式加入到html的代码中,然后放入到文本中进行发送。
import zmail
# 发件人
username = 'xxxxx@163.com'
# 授权码密码
password = 'xxxxxx'
# 创建zmail服务
server= zmail.server(username,password)
html = '''
<p> 这是邮件的文本内容,自动化测试结果 </p>
<img src='data:image/jpg;base64,/9j/4AAQSkZJRgABAgAAAQABAAD//gAQTGF2YzU3LjI0LjEwMgD/2wBDAAgMDA4MDhAQEBAQEBMSExQUFBMTExMUFBQVFRUZGRkVFRUUFBUVGBgZGRscGxoaGRocHB4eHiQkIiIqKiszMz7/xAGiAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgsBAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKCxAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6EQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4+Tl5ufo6ery8/T19vf4+fr/wAARCAH0AfQDARIAAhIAAxIA/9oADAMBAAIRAxEAPwD3aigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACsV9Y0yJ2je/skdTgq1xCrA+hBcEGgAA2qarBgCpDA9CDkUAADqKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAA898VWetX1v5OnPGkRRxOvmBJJckYRSU+UYBz+8XduIbisPxzros7U6fCx8+5X95jPyQHIPOR80mNuOfl3ZxkUAAHzRSUAAGja313YsXtriWAnqY3Zcj0OCM/jWdQAAe1aJ49uYpVj1MiaFuPOWNRJGezFUwrKO4C7u4zjB8VoAAPuu1uoL2CO4t5BLFIMq69COnfBBBBBB5BGK+VvDfim40NxE4M1ozZeP+JM9XiPHPTIPyt7daAAD60pAQwBHfmgAAWigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAAPFn8AveXTXN/qck7SHdJshVHJxwFdndVC8ADy8bRgAV7TQAAcTZeEtFsowgtI5zxl7gCV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/IVwPjTUEs9LaDzBG94fJUnPCYzIcBWJG35D/vigAA+WLmdrmeWZ/vSyPI3+87Fj+pqrQAAW7ZZHniWIFpC6BABkl8jaAO/Nd74J083uro+50W1XzyVxyQygISQRhs8/7IPTrQAAfV1FAAAUUAABRQAAeAfEHSZmli1GJC8YjEU21c7CrMVdsdm3bc9sAdxXv3WgAA+Cq9d8X+GDY3AuLCCZoJEeSVURnSApjJ3AfKhByN3TB7UAAHkVLQAAfYnhWD7Nodgm8PmLzMjoPNYybe/K7tp9wa8++HuqtIk2nSMx8oedD3CoWAdfb5mBH1PSgAA9yooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAADy3x5aNcaUsolKeRMjCPC4lZyIxzwwZQxIxxjOR0I7PW7WO80y8hkV3Uwu2EyX3IN67QMZO5Rgd+lAABNpF39u0+0uC4dpIULsP+egXDjHbDggj2rxnwHrdtbK2mTYieWXzIXJ+V2YKpjP91/lG3+9yOuMgAB7/RQAAFFAAAUUAABRQAAeMeOtE8+D7fBCGdObhlGZCoXCv1+4nR9ozjB6LXpWqatY6VCZLuVV4O2PgySf7KJ1bqM/wjPzEUAAHyjoutS6PfQ3CD92uUkjH8UTkFlzkEnjcuTgMB24rI1GW1nu5pLSEwQM37uNmLlRgDknn5jlsZOM4ycUAAG34h1t9bv2uBvjiUBIYyRlEHUnaBy5yx69cZIArkKAABa918DeHY5lTVbj5trsII/lIyvBkbqchvuj5SCufSgAA7nwdobaRYmSYYnutjuuGBjQD5IyDjDDJLcA5OO1ej0AABRQAAFFAAAUUAABRQAAFFAAB5frfgmy1WY3EMn2OVvv7EDo7Z++U3JhvXB569evqFAAB5roPg630S4+0m4luJgrKpx5UYDDBygZix/3m289MgGvSqAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAAPlbxposWkX6SW+xIrkM6xDP7tkI3cc/IxIK/iMYFfRWraNZ61AIbpM7TlJFwJIycZ2MQcbsDI6HA9BQAAeBaf481O0EUVwkNyi4Bd9wmK44JdWKsR3JQs3c55rQvvh3dpIPsdxFLGf+e26N168Harqw6cjHJ6UAAGm3xIALAaduGSA32ojI7HH2fI+lcJ/wAIbraqd1i5Y42bZ7baPXf+8Pbp05oAAOwl+JE5x5dhEnrvmZ/5InvXDr4P15uli/TPMkCjB+so546dfzoAALF54w1y/DAXAt1xkrbqIyMHqHyZfTPz1px+ANZcjcbSPKKxLSscE9UOyNvmXvjKejGgAA81mle4kMksryuwyzyFmYnHQscsfTNfQlj8O7OIhru5lucEHYgEKEdw3Luf+AspoAAPAbOxudQmENtC80hx8qjOBkDcx6KvIyTgCvtKy0+006PyrWCOBf8AYHLY7s3LMfdiTQAAfNM3gTWobdZVSGVzjdCkg8xOM8ltqHHQ7Gb2zX1TQAAfKmiahfeGpFZoZMXG9WtpPl81o32fLwWjdG3D5gd3THNfQ+p6FYathp4iJVGEnjYxzJ9GHXHYPuA545oAANGwv4dRgSaIkBhko+BInJG11ydpyD+VVtJ086XaR2xmafZu+cqFJBckcAnnBwT/ABYzQAAblFAAAUUAABRQAAFFAAAUUAABRQAAFFAAAUUAABRQAAFFAAAUUAABRQAAFFAAAUUAABRQAAFFAAAUUAABRQAAFFAAAUUAABRQAAFFAAAUUAABRQAAFFAAAUUAABRQAAFFAAAUUAABRQAAFFAAAUUAABRQAAFFAAAUUAABRQAAFFAAAUUAABRQAAFFAAAUUAABRQAAFFAAAUUAABRQAAFFAAAUUAABRQAAFFAAAUUAABRQAAFFAAAUUAABRQAAFFAAAUUAABRQAAFFAAAV5nrniz+yb5LWO2NztCtPhjlVcHAXAOGxhju6gj60AAHplVreeO6hiniO5JUWRD0yrAEHHbg0AAFmigAAKKAAAooAACigAAKKAAAooAACuL8QeJLXQYwG/e3EgzHApwcf33PO1M8Dux6dDgAAOuM0ayLEXUO4YqmRuYLjJC9SBkZ+teA+D7+51fX57q7kZ5BaPtwSqqvmRgIFXC7RuJx6/N15oAAPoSigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAzdQvY9OtJ7qTG2GNnwSF3ED5UB55dsKPcivLPH+pCK3gsQf9afNlAbB8tDhAR3DPlv8AtnQAAeGzT3WpXbSuXmluZcKQT8zMQoVepA6Ko6AcYrv/AAbYC91JZWU7YEWbcP7yvhBn7vznkjG75KAAD3/SbI6dp9rasctDEisdzMN2MttLc7dxO30XAwOlbNAAAUUAABRQAAFFAAAUUAABXnHinxOmiRiKDZJdSdFJyIl/vuoOcnPyDjue2CAAE/iTxPDocfloBNdOpKJkbU6YaXkHHOQP4sdq+UnkaZ2eRmd3bczMxLEsSSSTnJJPJPNAABfM1xqd1mXdcTTuFzn53ZjgAHn2AGMY4xXvng/wq+nEX16MTkERQ8fulbgu5/56MOAv8IJz8xwAAA3vCfhz+w7dpJsG5nA34wfKQciINzk/3yPlyBjOMn0SgAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKQkKCSQABkk9APU/1oAAFpoYMAQQQRkEdCPUH+VAAA6igAAKzNRvEsLK4uXOBFEzc45bHyjnjLNgD3NAAB80+J7l9U1uYIquIm+zRqxVSfJ3FmJJxt3lyOeRisC2sZL6SIQfvXmkwiv8APl8bju+YcepZe2WwAaAAD3bwLYfZtNa5YfPdP68eXEWVdo7Zbcff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FFAAAUUAABRQAAFFAAAUUAABRQAAFFAAAUUAABRQAAFFAAAUUAABRQAAFFAAAUUAABRQAAFFAAAUUAABRQAAFFAAAUUAABRQAAFFAAAUUAABRQAAFFAAAUUAAFO6XdBKMbsqeCBz7cgjmrTDIP0oAAMyxiSOMGM4DZYqDkbmwd3OW6dPrTbGNo1w0bRYJ4LK2dwBJynDemWGeuOKAADXooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACqd1IYYXlAZvLG/aoyzBeSoUZyWGQKAAC5UcbrKodDlWGQR/n86AACSigAAKKAACrA+7fyTh2XnGRg9OMfh3p8cfl7sEkFieecZ6j88nn1oAAJ6KAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAAPM9D1Ge0v59HvkZG8yR7N9vyPDy+zcv8As/MpP+0rEMMVt6zoMWpvHcq0sdzApEbRyGLd1Kq7LlgFYkjbt6mgAA7GuC0/VbqyjS31ZW85I8tOiExvtUHG7JLybDlyq7chqAADva5U61HNlLdW3/LzINgALMpPf7pXkHb95fWgAA6SNtwJxj5mH5MRn8cZrOsWmYN5nTqpAXBLEltpGcjJ4zzQAAa9FAAAUUAABRQAAFFAAAUUAABRQAAFFAAAUUAABRQAAFFAAAUUAABRQAAFFAAAUUAABRQAAFFAAAUUAABRQAAFFAAAUUAABRQAAFFAAAUUAABRQAAFFAAAUUAABRQAAFFAAAUUAABRQAAFFAAAUUAABRQAAFFAAAUUAABRQAAFFAAAUUAABRQAAFFAAAUUAABRQAAFFAAAUUAABRQAAFFAAAUUAABRQAAFFAAAUUAABRQAAFFAAAUUAABRQAAFFAAAUUAABRQAAFFAAAUUAABRQAARuiuMMoYe49Rg/oSDUlAABhy6Vay5wHiJYNuidkPUEjjjDYwfbpitygAAaAF6AD6U6gAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAD/2Q=='/>
'''
# 邮件主题
body = {
'subject': "自动化测试报告添加图片", # 邮件标题
"content_html": html, # html格式
}
# 收件人
receivers = '821006052@qq.com'
# 发送邮件
server.send_mail(receivers,body)
(左右滑动查看完整代码)
通过代码执行后可以发现,邮件成功的收到了并且图片和文本都存在邮件中:
附件发送
通过上面的两个例子这里应该很清楚的就能知道了,我们只需要将附件信息直接写在我们的body文本中就行了。
import zmail
# 发件人
username = 'xxxxx@163.com'
# 授权码密码
password = 'xxxxx'
# 创建zmail服务
server= zmail.server(username,password)
html = '''
<p> 这个邮件中携带附件,自动化测试结果 </p>
<img src='data:image/jpg;base64,/9j/4AAQSkZJRgABAgAAAQABAAD//gAQTGF2YzU3LjI0LjEwMgD/2wBDAAgMDA4MDhAQEBAQEBMSExQUFBMTExMUFBQVFRUZGRkVFRUUFBUVGBgZGRscGxoaGRocHB4eHiQkIiIqKiszMz7/xAGiAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgsBAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKCxAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6EQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4+Tl5ufo6ery8/T19vf4+fr/wAARCAH0AfQDARIAAhIAAxIA/9oADAMBAAIRAxEAPwD3aigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACsV9Y0yJ2je/skdTgq1xCrA+hBcEGgAA2qarBgCpDA9CDkUAADqKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAA898VWetX1v5OnPGkRRxOvmBJJckYRSU+UYBz+8XduIbisPxzros7U6fCx8+5X95jPyQHIPOR80mNuOfl3ZxkUAAHzRSUAAGja313YsXtriWAnqY3Zcj0OCM/jWdQAAe1aJ49uYpVj1MiaFuPOWNRJGezFUwrKO4C7u4zjB8VoAAPuu1uoL2CO4t5BLFIMq69COnfBBBBBB5BGK+VvDfim40NxE4M1ozZeP+JM9XiPHPTIPyt7daAAD60pAQwBHfmgAAWigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAAPFn8AveXTXN/qck7SHdJshVHJxwFdndVC8ADy8bRgAV7TQAAcTZeEtFsowgtI5zxl7gCV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/IVwPjTUEs9LaDzBG94fJUnPCYzIcBWJG35D/vigAA+WLmdrmeWZ/vSyPI3+87Fj+pqrQAAW7ZZHniWIFpC6BABkl8jaAO/Nd74J083uro+50W1XzyVxyQygISQRhs8/7IPTrQAAfV1FAAAUUAABRQAAeAfEHSZmli1GJC8YjEU21c7CrMVdsdm3bc9sAdxXv3WgAA+Cq9d8X+GDY3AuLCCZoJEeSVURnSApjJ3AfKhByN3TB7UAAHkVLQAAfYnhWD7Nodgm8PmLzMjoPNYybe/K7tp9wa8++HuqtIk2nSMx8oedD3CoWAdfb5mBH1PSgAA9yooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAADy3x5aNcaUsolKeRMjCPC4lZyIxzwwZQxIxxjOR0I7PW7WO80y8hkV3Uwu2EyX3IN67QMZO5Rgd+lAABNpF39u0+0uC4dpIULsP+egXDjHbDggj2rxnwHrdtbK2mTYieWXzIXJ+V2YKpjP91/lG3+9yOuMgAB7/RQAAFFAAAUUAABRQAAeMeOtE8+D7fBCGdObhlGZCoXCv1+4nR9ozjB6LXpWqatY6VCZLuVV4O2PgySf7KJ1bqM/wjPzEUAAHyjoutS6PfQ3CD92uUkjH8UTkFlzkEnjcuTgMB24rI1GW1nu5pLSEwQM37uNmLlRgDknn5jlsZOM4ycUAAG34h1t9bv2uBvjiUBIYyRlEHUnaBy5yx69cZIArkKAABa918DeHY5lTVbj5trsII/lIyvBkbqchvuj5SCufSgAA7nwdobaRYmSYYnutjuuGBjQD5IyDjDDJLcA5OO1ej0AABRQAAFFAAAUUAABRQAAFFAAB5frfgmy1WY3EMn2OVvv7EDo7Z++U3JhvXB569evqFAAB5roPg630S4+0m4luJgrKpx5UYDDBygZix/3m289MgGvSqAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAAPlbxposWkX6SW+xIrkM6xDP7tkI3cc/IxIK/iMYFfRWraNZ61AIbpM7TlJFwJIycZ2MQcbsDI6HA9BQAAeBaf481O0EUVwkNyi4Bd9wmK44JdWKsR3JQs3c55rQvvh3dpIPsdxFLGf+e26N168Harqw6cjHJ6UAAGm3xIALAaduGSA32ojI7HH2fI+lcJ/wAIbraqd1i5Y42bZ7baPXf+8Pbp05oAAOwl+JE5x5dhEnrvmZ/5InvXDr4P15uli/TPMkCjB+so546dfzoAALF54w1y/DAXAt1xkrbqIyMHqHyZfTPz1px+ANZcjcbSPKKxLSscE9UOyNvmXvjKejGgAA81mle4kMksryuwyzyFmYnHQscsfTNfQlj8O7OIhru5lucEHYgEKEdw3Luf+AspoAAPAbOxudQmENtC80hx8qjOBkDcx6KvIyTgCvtKy0+006PyrWCOBf8AYHLY7s3LMfdiTQAAfNM3gTWobdZVSGVzjdCkg8xOM8ltqHHQ7Gb2zX1TQAAfKmiahfeGpFZoZMXG9WtpPl81o32fLwWjdG3D5gd3THNfQ+p6FYathp4iJVGEnjYxzJ9GHXHYPuA545oAANGwv4dRgSaIkBhko+BInJG11ydpyD+VVtJ086XaR2xmafZu+cqFJBckcAnnBwT/ABYzQAAblFAAAUUAABRQAAFFAAAUUAABRQAAFFAAAUUAABRQAAFFAAAUUAABRQAAFFAAAUUAABRQAAFFAAAUUAABRQAAFFAAAUUAABRQAAFFAAAUUAABRQAAFFAAAUUAABRQAAFFAAAUUAABRQAAFFAAAUUAABRQAAFFAAAUUAABRQAAFFAAAUUAABRQAAFFAAAUUAABRQAAFFAAAUUAABRQAAFFAAAUUAABRQAAFFAAAUUAABRQAAFFAAAUUAABRQAAFFAAAUUAABRQAAFFAAAV5nrniz+yb5LWO2NztCtPhjlVcHAXAOGxhju6gj60AAHplVreeO6hiniO5JUWRD0yrAEHHbg0AAFmigAAKKAAAooAACigAAKKAAAooAACuL8QeJLXQYwG/e3EgzHApwcf33PO1M8Dux6dDgAAOuM0ayLEXUO4YqmRuYLjJC9SBkZ+teA+D7+51fX57q7kZ5BaPtwSqqvmRgIFXC7RuJx6/N15oAAPoSigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAzdQvY9OtJ7qTG2GNnwSF3ED5UB55dsKPcivLPH+pCK3gsQf9afNlAbB8tDhAR3DPlv8AtnQAAeGzT3WpXbSuXmluZcKQT8zMQoVepA6Ko6AcYrv/AAbYC91JZWU7YEWbcP7yvhBn7vznkjG75KAAD3/SbI6dp9rasctDEisdzMN2MttLc7dxO30XAwOlbNAAAUUAABRQAAFFAAAUUAABXnHinxOmiRiKDZJdSdFJyIl/vuoOcnPyDjue2CAAE/iTxPDocfloBNdOpKJkbU6YaXkHHOQP4sdq+UnkaZ2eRmd3bczMxLEsSSSTnJJPJPNAABfM1xqd1mXdcTTuFzn53ZjgAHn2AGMY4xXvng/wq+nEX16MTkERQ8fulbgu5/56MOAv8IJz8xwAAA3vCfhz+w7dpJsG5nA34wfKQciINzk/3yPlyBjOMn0SgAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKQkKCSQABkk9APU/1oAAFpoYMAQQQRkEdCPUH+VAAA6igAAKzNRvEsLK4uXOBFEzc45bHyjnjLNgD3NAAB80+J7l9U1uYIquIm+zRqxVSfJ3FmJJxt3lyOeRisC2sZL6SIQfvXmkwiv8APl8bju+YcepZe2WwAaAAD3bwLYfZtNa5YfPdP68eXEWVdo7Zbcff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FFAAAUUAABRQAAFFAAAUUAABRQAAFFAAAUUAABRQAAFFAAAUUAABRQAAFFAAAUUAABRQAAFFAAAUUAABRQAAFFAAAUUAABRQAAFFAAAUUAABRQAAFFAAAUUAAFO6XdBKMbsqeCBz7cgjmrTDIP0oAAMyxiSOMGM4DZYqDkbmwd3OW6dPrTbGNo1w0bRYJ4LK2dwBJynDemWGeuOKAADXooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACqd1IYYXlAZvLG/aoyzBeSoUZyWGQKAAC5UcbrKodDlWGQR/n86AACSigAAKKAACrA+7fyTh2XnGRg9OMfh3p8cfl7sEkFieecZ6j88nn1oAAJ6KAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAAPM9D1Ge0v59HvkZG8yR7N9vyPDy+zcv8As/MpP+0rEMMVt6zoMWpvHcq0sdzApEbRyGLd1Kq7LlgFYkjbt6mgAA7GuC0/VbqyjS31ZW85I8tOiExvtUHG7JLybDlyq7chqAADva5U61HNlLdW3/LzINgALMpPf7pXkHb95fWgAA6SNtwJxj5mH5MRn8cZrOsWmYN5nTqpAXBLEltpGcjJ4zzQAAa9FAAAUUAABRQAAFFAAAUUAABRQAAFFAAAUUAABRQAAFFAAAUUAABRQAAFFAAAUUAABRQAAFFAAAUUAABRQAAFFAAAUUAABRQAAFFAAAUUAABRQAAFFAAAUUAABRQAAFFAAAUUAABRQAAFFAAAUUAABRQAAFFAAAUUAABRQAAFFAAAUUAABRQAAFFAAAUUAABRQAAFFAAAUUAABRQAAFFAAAUUAABRQAAFFAAAUUAABRQAAFFAAAUUAABRQAAFFAAAUUAABRQAAFFAAAUUAABRQAARuiuMMoYe49Rg/oSDUlAABhy6Vay5wHiJYNuidkPUEjjjDYwfbpitygAAaAF6AD6U6gAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAAooAACigAAKKAAD/2Q=='/>
'''
# 邮件主题
body = {
'subject': "自动化测试报告添加附件", # 邮件标题
"content_html": html, # html格式
"attachments": "123.jpg" # 附件
}
# 收件人
receivers = '821006052@qq.com'
# 发送邮件
server.send_mail(receivers,body)
(左右滑动查看完整代码)
通过制定代码后发现,邮件已经成功发送且携带了附件内容。
yagmail
yagmail也是属于Python发送邮件的一个库,这种库相比前面两种依旧做了很大的简介,使用更加方便,因为属于Python的第三方库,我们安装。
安装:
pip install yagmail
(左右滑动查看完整代码)
发送文本
这里一样先将yagmail创建一个服务对象,通过将发件人的账号,授权码进行连接登录。
import yagmail
# 发件人
username = 'xxxxxx@163.com'
# 授权码密码
password = 'xxxxxx'
# 创建yagmail服务,需要加上服务器地址
server = yagmail.SMTP(username,password, host='smtp.163.com')
# 收件人
receivers = '821006052@qq.com'
text = '这是测试报告内容' # 报告内容
title = '自动化测试报告' # 邮件标题
server.send(contents=text,to=receivers,subject=title)
(左右滑动查看完整代码)
通过发现yagmail的代码比zmail的代码更加简洁了一些,但是整体内容是差不多的。执行代码,发现我们已经将其报告发送成功了。
图片发送
yagmail中携带了发送图片的方法,直接将图片路径方进入就可以了,其中这里需要使用yagmai.inline的方法将图片添加到正文中:
import yagmail
# 发件人
username = 'xxxx@163.com'
# 授权码密码
password = 'xxxxx'
# 创建yagmail服务,需要加上服务器地址
server = yagmail.SMTP(username,password, host='smtp.163.com')
# 收件人
receivers = '821006052@qq.com'
text = '这是测试报告内容加上图片显示内容' # 报告内容
title = '自动化测试报告携带图片' # 邮件标题
img = yagmail.inline('123.jpg') # 图片地址
server.send(contents=text,to=receivers,subject=title,attachments=img)
(左右滑动查看完整代码)
执行代码发现,我们已经成功的将图片添加到了邮件中:
附件发送
附件形式yagmail中也提到了单独的方法,通过attachments的方法来添加附件文件。
import yagmail
# 发件人
username = 'xxxxxx@163.com'
# 授权码密码
password = 'xxxxx'
# 创建yagmail服务,需要加上服务器地址
server = yagmail.SMTP(username,password, host='smtp.163.com')
# 收件人
receivers = '821006052@qq.com'
text = '这是测试报告内容加上附件内容' # 报告内容
title = '自动化测试报告携带附件' # 邮件标题
fujian = '123.jpg' # 附件
server.send(contents=text,to=receivers,subject=title, attachments=fujian)
(左右滑动查看完整代码)
通过执行代码发现,我们已经成功的将邮件携带附件发送成功了。
实战演示
前面已经将Python几种发送报告的库都做了一个简单的介绍,安静在这里在给大家通过UnitTest生成一份测试报告,然后在通过邮件的形式发送出去来进行演示,方便大家记忆。
古话说,好记性不如烂笔头,脑子笨,咱多写几遍,就记住了。
UnitTest生成报告并发送报告
安静随便写几个测试用例,然后通过HTMLTestRunner的方式生成测试报告。
import unittest
import HTMLTestRunner
class Test(unittest.TestCase):
def test_01(self):
print('测试用例1')
def test_02(self):
print('测试用例2')
def test_03(self):
print('测试用例3')
if __name__ == '__main__':
# 测试报告地址
fp = open('result.html', "wb")
# 报告详情
runner = HTMLTestRunner.HTMLTestRunner(stream=fp,
title=u'自动化测试报告,测试结果如下:',
description=u'用例执行情况:')
# 实例化
testunit = unittest.TestSuite()
# 加载用例
testunit.addTests(unittest.TestLoader().loadTestsFromTestCase(Test))
# 执行用例
runner.run(testunit)
# 关闭报告
fp.close()
(左右滑动查看完整代码)
通过执行代码发现测试报告已经生成了,接下来我们需要通过将其测试报告内容添加到邮件中然后在进行发送。
邮件加入测试报告结果
上面已经通过UnitTest单元测试框架生成了测试报告,接下来就是需要我们通过邮件库来进行发送了,安静这里选择了yagmail,别问为什么,想用哪个就用了。
import yagmail
# 发件人
username = 'xxxxxx@163.com'
# 授权码密码
password = 'xxxxxx'
# 创建yagmail服务,需要加上服务器地址
server = yagmail.SMTP(username,password, host='smtp.163.com')
# 收件人
receivers = '821006052@qq.com'
with open('result.html', 'rb')as f:
text = f.read()
title = '自动化测试结果' # 邮件标题
fujian = r'E:\web\result.html' # 附件
server.send(contents=text.decode('utf-8'), to=receivers, subject=title,attachments=fujian)
(左右滑动查看完整代码)
通过执行代码后发现测试报告内容已经成功发送了(这里有个问题就是排版可能发生了一些改变),但是整体的报告内容以及附件全部都发送了。
总结
安静分别简单的介绍了Python发送邮件的方法,其中有简单的,也有复杂操作的,但是据图使用哪种就要看个人的喜好了。
无论用哪一种,最终都是可以达到我们的最终需求,给领导发送我们的测试报告内容。好了,感谢大家的阅读,希望对您有所帮助。
最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:
这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!