【实操系列】| Python发送邮件的一个具体应用
想要更好的阅读体验,点击文末阅读原文。
简单介绍
本人是自动化测试工程师,主要语言为Python, 实操系列是结合我平时工作中遇到的情况写的一些脚本,总结分享出来的东西。
因为真实的场景难以模拟,只能说个大概,但是因为真实场景的总结分享,应该来说有一定的参考和学习价值。
不过有没有通用性完全是和业务相关,业务场景决定脚本逻辑,写代码主要还是锻炼解决问题的能力。
需求
公司测试场景是用远端PC(windows10)连接测试物料,现在大部分都是这种场景:远端PC连接测试物料,本地PC连接远端PC操作,直接自动化测试。
现在的问题是,在测试场景不稳定的情况下,经常会测试中断,然后登陆远端服务器排查问题后继续跑起来。
因为不知道何时异常中断,需要频繁的登陆(这个环节还没集成到CI)查看情况,所以想定时将环境截屏或者搜集log,然后通过邮件发送给指定人员,如果有异常,再登陆查看(每次输账号密码也很烦人)。
如果没有此应用场景,可以忽略此文章。
回顾
更多Python发送邮件资料访问此链接:
https://www.runoob.com/python/python-email.html
代码
导包
# -*- coding: UTF-8 -*-
import os
import time
import socket
import smtplib
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.header import Header
from 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邮箱带SSL
smtpObj.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
如有其它问题,欢迎找我交流
相关推荐