#用于發送測試報告(帶附件)或其它內容# -*- coding:utf-8 -*-
import os
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipartclass SendEmail(object):def __init__(self, receivers):mail_host = "127.0.0.1" # SMTP服務器mail_user = "username" # 用戶名mail_pass = "password" # 密碼sender = "123456@qq.com" # 發件人郵箱file_path = os.path.dirname(os.path.dirname(__file__)) + '\\report\\test_result.html' # 拼接測試報告的路徑title = '自動化測試結果' # 郵件主題mail_body = "查看測試報告請下載附件!!!"message = MIMEMultipart()message['From'] = "{}".format(sender) # 從哪發出郵件 message['To'] = ",".join(receivers) # receivers:接收人郵箱地址message['Subject'] = title # 標題msgtext = MIMEText(mail_body, _subtype='plain', _charset='utf-8') # 三個參數:第一個為文本內容,第二個 plain 設置文本格式,第三個 utf-8 設置編碼message.attach(msgtext) # 添加主郵件主體內容# 添加一個HTML文本附件ff = open(file_path, 'rb')att = MIMEText(ff.read(), 'base64', 'utf-8')# 附件設置內容類型,設置為二進制流att["Content-Type"] = 'application/octet-stream'# 設置附件頭,添加文件名,filename 可以隨意寫att["Content-Disposition"] = 'attachment; filename="test_result.html"'# 解決中文附件名亂碼問題# att.add_header('Content-Disposition', 'attachment', filename=('utf-8', '', basename))message.attach(att)ff.close()try:smtpObj = smtplib.SMTP(mail_host, 25) # 25 是指定 SMTP 服務使用的端口號,默認 25"""SMTP(Simple Mail Transfer Protocol)即簡單郵件傳輸協議,它是一組用于由源地址到目的地址傳送郵件的規則,由它來控制信件的中轉方式。python的smtplib提供了一種很方便的途徑發送電子郵件。它對smtp協議進行了簡單的封裝。"""smtpObj.login(mail_user, mail_pass) # 登陸郵箱smtpObj.sendmail(sender, receivers, message.as_string()) # 發送郵件(發信人,收件人,郵件內容),這里需要注意郵件內容的格式,這個格式就是 smtp 協議中定義的格式print("郵件已成功發送")smtpObj.quit()except smtplib.SMTPException as e:print(e)if __name__ == "__main__":SendEmail(["123456@qq.com", "123467@qq.com"])