測試執(zhí)行結(jié)束后通常會將測試結(jié)果發(fā)送郵件給相關(guān)人員遍蟋。我們先來了解下python對于發(fā)送郵件這件事的一些相關(guān)知識:SMTP是發(fā)送郵件的協(xié)議仲器。Python內(nèi)置對SMTP的支持开呐,可以發(fā)送純文本郵件穿仪、HTML郵件以及帶附件的郵件障癌。 Python對SMTP支持有 smtplib 和 email 兩個模塊桐智,email 負(fù)責(zé)構(gòu)造郵件末早,smtplib 負(fù)責(zé)發(fā)送郵件,下面來詳解一下這兩個模塊:
email模塊負(fù)責(zé)構(gòu)造郵件
email模塊下的mime模塊下有常用的三個模塊说庭,三個模塊中有三個大類:MIMEText然磷,MIMEImage,MIMEMultipart刊驴。
簡單說下他們的關(guān)系姿搜,如果構(gòu)造一個MIMEText對象寡润,就表示一個文本郵件對象,如果構(gòu)造一個MIMEImage對象舅柜,就表示一個作為附件的圖片對象梭纹,要把多個對象組合起來,就用MIMEMultipart對象致份,他代表的是整個郵件变抽。以下例舉一個實現(xiàn)構(gòu)造郵件,郵件內(nèi)容需要包含正文和附件氮块,具體實現(xiàn):
msg = MIMEMultipart(_charset='utf-8')
msg['From'] = Header("{}".format(self.my_sender),'utf-8')? # 括號里的對應(yīng)發(fā)件人郵箱賬號
msg['To'] = Header("{}".format(to),'utf-8')? # 收件人郵箱賬號
msg['Subject'] = Header(subject,'utf-8')??# 郵件主題
# 郵件正文內(nèi)容绍载,content為正文的內(nèi)容
html = MIMEText(content, 'html', 'utf-8')??
msg.attach(html)
# 郵件附件,zip_file為要上傳的附件文件雇锡,“report.zip” 為附件在郵件中的展示名稱逛钻,可自定義
att = MIMEText(open(zip_file,'rb').read(),'base64','utf-8')
att["Content-Type"] ='application/octet-stream'
att["Content-Disposition"] ='attachment; filename="report.zip"'
msg.attach(att)
smtplib模塊負(fù)責(zé)發(fā)送郵件
構(gòu)建完郵件內(nèi)容后,我們就需要發(fā)送郵件了锰提,發(fā)送郵件分為幾個步驟:
1.創(chuàng)建SMTP的操作對象并連接smtp目標(biāo)服務(wù)器
2.登錄目標(biāo)服務(wù)器
3.調(diào)用對象中的方法曙痘,發(fā)送郵件到目標(biāo)地址
4.關(guān)閉連接
具體實現(xiàn):
server = smtplib.SMTP_SSL("smtp.163.com", 465)? # 發(fā)件人郵箱中的SMTP服務(wù)器
server.login(self.my_sender, self.my_pass)? # 括號中對應(yīng)的是發(fā)件人郵箱賬號、郵箱授權(quán)碼立肘,授權(quán)碼是需要登錄郵箱到設(shè)置中進行開啟SMTP服務(wù)再添加的
server.sendmail(self.my_sender, rcpt, msg.as_string())# 括號中對應(yīng)的是發(fā)件人郵箱賬號边坤、收件人郵箱賬號、發(fā)送郵件的內(nèi)容
server.quit()
以上是解決方案思路谅年,再具體的實現(xiàn)大家可以自行到項目中進行組裝