【实操系列】| Python发送邮件的一个具体应用


想要更好的阅读体验,点击文末阅读原文。
简单介绍
本人是自动化测试工程师,主要语言为Python, 实操系列是结合我平时工作中遇到的情况写的一些脚本,总结分享出来的东西。
因为真实的场景难以模拟,只能说个大概,但是因为真实场景的总结分享,应该来说有一定的参考和学习价值。
不过有没有通用性完全是和业务相关,业务场景决定脚本逻辑,写代码主要还是锻炼解决问题的能力。
需求
公司测试场景是用远端PC(windows10)连接测试物料,现在大部分都是这种场景:远端PC连接测试物料,本地PC连接远端PC操作,直接自动化测试。
现在的问题是,在测试场景不稳定的情况下,经常会测试中断,然后登陆远端服务器排查问题后继续跑起来。
因为不知道何时异常中断,需要频繁的登陆(这个环节还没集成到CI)查看情况,所以想定时将环境截屏或者搜集log,然后通过邮件发送给指定人员,如果有异常,再登陆查看(每次输账号密码也很烦人)。
如果没有此应用场景,可以忽略此文章。
回顾
更多Python发送邮件资料访问此链接:
https://www.runoob.com/python/python-email.html
代码
导包
# -*- coding: UTF-8 -*-import osimport timeimport socketimport smtplibfrom email.mime.image import MIMEImagefrom email.mime.multipart import MIMEMultipartfrom email.mime.text import MIMETextfrom email.header import Headerfrom PIL import ImageGrab
邮件的一些常规设置
# 第三方SMTP服务mail_host = "smtp.qq.com" # 设置服务器mail_user = "xxx@qq.com" # 你的用户名mail_pass = "xxx" # 你生成的口令,不知道的请看回顾# 设置发送人和收件人sender = "xxx@qq.com" # 会显示由这个邮箱代发receivers = "xxx@qq.com" # 你要发送给的人,可以固定,可以读取文件pic_name = time.strftime("%Y%m%d_%H%M%S", time.localtime())hostname = socket.gethostname()ip = socket.gethostbyname(hostname)
截图功能
def pic():im = ImageGrab.grab()im.save(r'C:\Python_Code\email\picture\{}.jpeg'.format(pic_name))time.sleep(2)
发送邮件功能
def send_email(info):# 发送邮件subject = 'IP:{} Time:{}'.format(ip, pic_name) # 邮件主题msg = MIMEMultipart('related')# 第一个参数为邮件内容,第二个参数为设置文本格式,第三个参数为编码设置content = MIMEText('status check
''', 'html', 'utf-8')msg.attach(content)msg['Subject'] = Header(subject, 'utf-8') # 标题msg['From'] = Header("blyang", 'utf-8') # 发件人file = open(r'C:\Python_Code\email\picture\{}.jpeg'.format(pic_name), "rb")img_data = file.read()file.close()img = MIMEImage(img_data)img.add_header('Content-ID', 'imageid')msg.attach(img)try:smtpObj = smtplib.SMTP_SSL(mail_host, 465) # qq邮箱带SSLsmtpObj.login(mail_user, mail_pass) # 登陆smtpObj.sendmail(sender, receivers, msg.as_string())print("send success")except smtplib.SMTPException:print("Error: send fail")if __name__ == "__main__":while True:pic()send_email()time.sleep(60 * 60)
总结
这是一个临时的小需求,不过确实可以帮助节省很多精力,省去了频繁登陆查看的低效,事实上也可以发送日志,附件等等,看具体场景。
可能遇到的问题
截屏失败及解决方法:https://www.iteye.com/blog/ncs123-2247416
如有其它问题,欢迎找我交流
相关推荐
