【實(shí)操系列】| Python發(fā)送郵件的一個(gè)具體應(yīng)用


想要更好的閱讀體驗(yàn),點(diǎn)擊文末閱讀原文。
簡單介紹
本人是自動(dòng)化測試工程師,主要語言為Python, 實(shí)操系列是結(jié)合我平時(shí)工作中遇到的情況寫的一些腳本,總結(jié)分享出來的東西。?
因?yàn)檎鎸?shí)的場景難以模擬,只能說個(gè)大概,但是因?yàn)檎鎸?shí)場景的總結(jié)分享,應(yīng)該來說有一定的參考和學(xué)習(xí)價(jià)值。
不過有沒有通用性完全是和業(yè)務(wù)相關(guān),業(yè)務(wù)場景決定腳本邏輯,寫代碼主要還是鍛煉解決問題的能力。
需求
公司測試場景是用遠(yuǎn)端PC(windows10)連接測試物料,現(xiàn)在大部分都是這種場景:遠(yuǎn)端PC連接測試物料,本地PC連接遠(yuǎn)端PC操作,直接自動(dòng)化測試。
現(xiàn)在的問題是,在測試場景不穩(wěn)定的情況下,經(jīng)常會(huì)測試中斷,然后登陸遠(yuǎn)端服務(wù)器排查問題后繼續(xù)跑起來。
因?yàn)椴恢篮螘r(shí)異常中斷,需要頻繁的登陸(這個(gè)環(huán)節(jié)還沒集成到CI)查看情況,所以想定時(shí)將環(huán)境截屏或者搜集log,然后通過郵件發(fā)送給指定人員,如果有異常,再登陸查看(每次輸賬號密碼也很煩人)。
如果沒有此應(yīng)用場景,可以忽略此文章。
回顧
用Python發(fā)送郵件的基本實(shí)現(xiàn)參考我之前的公眾號文章
更多Python發(fā)送郵件資料訪問此鏈接:
https://www.runoob.com/python/python-email.html
代碼
導(dǎo)包
#?-*-?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
郵件的一些常規(guī)設(shè)置
# 第三方SMTP服務(wù)mail_host = "smtp.qq.com" # 設(shè)置服務(wù)器mail_user = "[email protected]" # 你的用戶名mail_pass = "xxx" # 你生成的口令,不知道的請看回顧# 設(shè)置發(fā)送人和收件人sender = "[email protected]" # 會(huì)顯示由這個(gè)郵箱代發(fā)receivers = "[email protected]" # 你要發(fā)送給的人,可以固定,可以讀取文件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)
發(fā)送郵件功能
def send_email(info):# 發(fā)送郵件subject = 'IP:{} Time:{}'.format(ip, pic_name) # 郵件主題msg = MIMEMultipart('related')# 第一個(gè)參數(shù)為郵件內(nèi)容,第二個(gè)參數(shù)為設(shè)置文本格式,第三個(gè)參數(shù)為編碼設(shè)置content = MIMEText('status check
''', 'html', 'utf-8')msg.attach(content)msg['Subject'] = Header(subject, 'utf-8') # 標(biāo)題msg['From'] = Header("blyang", 'utf-8') # 發(fā)件人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)
總結(jié)
這是一個(gè)臨時(shí)的小需求,不過確實(shí)可以幫助節(jié)省很多精力,省去了頻繁登陸查看的低效,事實(shí)上也可以發(fā)送日志,附件等等,看具體場景。
可能遇到的問題
截屏失敗及解決方法:https://www.iteye.com/blog/ncs123-2247416
如有其它問題,歡迎找我交流
相關(guān)推薦
