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

共 2466字,需浏览 5分钟

 ·

2021-01-25 15:38


想要更好的阅读体验,点击文末阅读原文。

简单介绍

本人是自动化测试工程师,主要语言为Python, 实操系列是结合我平时工作中遇到的情况写的一些脚本,总结分享出来的东西。 

因为真实的场景难以模拟,只能说个大概,但是因为真实场景的总结分享,应该来说有一定的参考和学习价值。

不过有没有通用性完全是和业务相关,业务场景决定脚本逻辑,写代码主要还是锻炼解决问题的能力。

需求

公司测试场景是用远端PC(windows10)连接测试物料,现在大部分都是这种场景:远端PC连接测试物料,本地PC连接远端PC操作,直接自动化测试。

现在的问题是,在测试场景不稳定的情况下,经常会测试中断,然后登陆远端服务器排查问题后继续跑起来。

因为不知道何时异常中断,需要频繁的登陆(这个环节还没集成到CI)查看情况,所以想定时将环境截屏或者搜集log,然后通过邮件发送给指定人员,如果有异常,再登陆查看(每次输账号密码也很烦人)。

如果没有此应用场景,可以忽略此文章。

回顾

用Python发送邮件的基本实现参考我之前的公众号文章

更多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

如有其它问题,欢迎找我交流


相关推荐

【阅读】| 又一人被抓,程序员如何避免面向监狱编程
【Python·翻译】| 周刊481期
【入门】从零开始建网站



浏览 11
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报