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

59 篇文章 1 订阅
42 篇文章 0 订阅

欢迎关注微信公众号“Python小灶,和我一起每天学习Python新知识”
在这里插入图片描述

简单介绍

本人是自动化测试工程师,主要语言为Python。
实操系列是结合我平时工作中遇到的情况写的一些脚本,总结分享出来的东西;
因为真实的场景难以模拟,只能说个大概,但是因为真实场景的总结分享,应该来说有一定的参考和学习价值。
不过有没有通用性就不好讲了,因为这个完全是和业务相关,业务场景决定脚本逻辑,写代码主要还是锻炼解决问题的能力。

需求

公司测试场景是用远端PC(windows10)连接测试物料,具体测试啥就不说了哈,现在大部分都是这种场景:远端PC连接测试物料,本地PC连接远端PC操作,直接自动化测试。
现在的问题是,在测试场景不稳定的情况下,经常会测试中断,然后登陆远端服务器排查问题后继续跑起来。
因为不知道何时异常中断,需要频繁的登陆(这个环节还没集成到CI)查看情况,所以想定时将环境截屏或者搜集log,然后通过邮件发送给指定人员,如果有异常,再登陆查看(每次输账号密码也很烦人)。

如果没有此应用场景,可以作为参考。

回顾

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

更多Python发送邮件资料点击此处

代码

导包
# -*- 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('<p>status check</p>'

                        '<html><body><img src="cid:imageid" alt="imageid"></body></html>', '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)

总结

这是一个临时的小需求,不过确实可以帮助节省很多精力,省去了频繁登陆查看的低效,事实上也可以发送日志,附件等等,看具体场景。

可能遇到的问题

截屏失败及解决方法

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值