python3+selenium框架設計10-發送郵件

使用python3的email模塊和smtplib模塊能夠實現發送郵件的動能。email模塊用來生成email,smtplib模塊用來發送郵件,接下來看如何在生成測試報告以後,並將報告放在郵件附件中併發送給項目組的人,在framework文件夾下新建my_email.py文件,項目結構以下。html

 

以qq郵箱爲例,在使用qq郵箱的SMTP服務時,須要在qq郵箱-帳戶中先開啓,而且生成受權碼,而後密碼那裏填寫受權碼python

具體代碼以下。數組

#!/usr/bin/python3

import smtplib from email.mime.text import MIMEText from email.utils import formataddr from email.mime.multipart import MIMEMultipart import getcwd import os from Logs.log import log1 import time rq = time.strftime('%Y%m%d', time.localtime(time.time()))#獲取本地時間 轉換成日期
sender = '2474xxx48@qq.com'  #發件人郵箱
password = 'kfsxmczzlinbbifj'  #發件人郵箱密碼
addressed_eamil = '2474xxx48@qq.com' #收件人郵箱
 path = getcwd.get_cwd() file = os.path.join(path, 'report/xxxUI自動化測試報告.html')#測試報告地址

def mail(): try: # 建立一個帶附件的實例
        message = MIMEMultipart() message['From']=formataddr(['發件人姓名',sender])  # 括號裏的對應發件人郵箱暱稱、發件人郵箱帳號
        log1.info('發件人郵箱:%s' % sender) message['To']= formataddr(['收件人姓名',addressed_eamil])    # 括號裏的對應收件人郵箱暱稱、收件人郵箱帳號
        log1.info('收件人郵箱:%s' % addressed_eamil) message['Subject']=rq+"xxxUI自動化測試報告"    # 郵件的主題,也能夠說是標題

        # 郵件正文內容
        message.attach(MIMEText('附件爲xxxUI自動化測試報告', 'plain', 'utf-8')) # 構造附件1
        att1 = MIMEText(open(file, 'rb').read(), 'base64', 'utf-8') log1.info('讀取附件') att1["Content-Type"] = 'application/octet-stream'
        # filename是附件名,附件名稱爲中文時的寫法
        att1.add_header("Content-Disposition", "attachment", filename=("gbk", "", "xxxUI自動化測試報告.html")) # 附件名稱非中文時的寫法
        # att["Content-Disposition"] = 'attachment; filename="test.html")'
 message.attach(att1) log1.info('添加附件') server = smtplib.SMTP_SSL("smtp.qq.com", 465)  # 發件人郵箱中的SMTP服務器,通常端口是25
        log1.info('鏈接QQ郵箱smtp服務') server.login(sender,password) # 括號中對應的是發件人郵箱帳號、郵箱密碼
        log1.info('鏈接成功') server.sendmail(sender, addressed_eamil, message.as_string()) # 括號中對應的是發件人郵箱帳號、收件人郵箱帳號、發送郵件
        server.quit()  # 關閉鏈接
        log1.info("郵件發送成功") except Exception: log1.error("郵件發送失敗",exc_info=1) mail()

收件人和發件人能夠都填本身的QQ郵箱,from是發件人那一欄的展現。to是收件人的展現。若是要顯示多個收件人,須要使用‘,’.join(郵箱數組)。最下面sendmail中第二個傳收件人郵箱,若是要發給多我的,傳數組。服務器

email展現內容能夠跟代碼中對照着來看,更容易理解一點併發

 

 

這樣雖然實現了發郵件,可是也把郵件的收發人寫死了,因此仍是要完善。經過讀取配置文件來肯定收發人,在framework文件夾下Base_Page.py文件增長以下代碼app

def config_options(self,section): '''讀取配置文件某section下全部鍵''' config = configparser.ConfigParser() config.read(config_path,encoding="utf-8-sig") username = config.options(section) return username def get_addkey(self,user): '''遍歷得到配置文件收件人email''' sum = 0 L = [] for i in user: if sum < len(user): emails = self.config_get(i,'addressed') L.append(emails) sum += 1
        return L

而後修改配置文件框架

sender是設置發件人的,username是發件人的姓名,email是發件人郵箱,password是郵箱密碼測試

addressed是設置收件人的,以後隨便往下加就好了。xxx = 郵箱就能夠了。ui

這樣誰發郵件,哪些人收到郵件,都是能夠配置的。spa

將my_email.py文件代碼修改爲以下

#!/usr/bin/python3

import smtplib from email.mime.text import MIMEText from email.utils import formataddr from email.mime.multipart import MIMEMultipart import getcwd import os from Logs.log import log1 from framework.Base_Page import BasePage import time rq = time.strftime('%Y%m%d', time.localtime(time.time()))#獲取本地時間 轉換成日期
my_mail = BasePage(driver=1) sender = my_mail.config_get('email','sender')  # 發件人郵箱帳號
password = my_mail.config_get('password','sender')  # 發件人郵箱密碼
usernmae = my_mail.config_get('username','sender') #發件人姓名
users = my_mail.config_options('addressed')     #收件人
addressed_eamils = my_mail.get_addkey(users)  #收件人郵箱
 path = getcwd.get_cwd() file = os.path.join(path, 'report/xxxUI自動化測試報告.html') def mail(): try: # 建立一個帶附件的實例
        message = MIMEMultipart() message['From']=formataddr([usernmae,sender])  # 括號裏的對應發件人郵箱暱稱、發件人郵箱帳號
        log1.info('發件人姓名:%s' % usernmae) log1.info('發件人郵箱:%s' % sender) message['To']=';'.join(addressed_eamils)    # 括號裏的對應收件人郵箱暱稱、收件人郵箱帳號
        log1.info('收件人郵箱:' + ';'.join(addressed_eamils)) message['Subject']=rq + "xxxUI自動化測試報告.html"    # 郵件的主題,也能夠說是標題

        # 郵件正文內容
        message.attach(MIMEText('附件爲xxxUI自動化測試報告.html', 'plain', 'utf-8')) # 構造附件1,傳送當前目錄下的 test.txt 文件
        att1 = MIMEText(open(file, 'rb').read(), 'base64', 'utf-8') log1.info('讀取附件') att1["Content-Type"] = 'application/octet-stream'
        # 這裏的filename能夠任意寫,寫什麼名字,郵件中顯示什麼名字
        att1.add_header("Content-Disposition", "attachment", filename=("gbk", "", "xxxUI自動化測試報告.html")) # 附件名稱非中文時的寫法
        # att["Content-Disposition"] = 'attachment; filename="test.html")'
 message.attach(att1) log1.info('添加附件') server = smtplib.SMTP_SSL("smtp.qq.com", 465)  # 發件人郵箱中的SMTP服務器,端口是25
        log1.info('鏈接QQ郵箱smtp服務') server.login(sender,password) # 括號中對應的是發件人郵箱帳號、郵箱密碼
        log1.info('鏈接成功') server.sendmail(sender, addressed_eamils, message.as_string()) # 括號中對應的是發件人郵箱帳號、收件人郵箱帳號、發送郵件
        server.quit()  # 關閉鏈接
        log1.info("郵件發送成功") except Exception: log1.error("郵件發送失敗",exc_info=1)

在entrance.py文件開頭加上from framework.my_email import mail,在最後加上mail(),而後執行

 

這樣在執行完測試以後郵件就發送出去了,也能夠在配置文件中加上開關,好比0發送郵件,1不發送郵件,方便調試代碼。整個框架就寫到這裏,其實還有不少能夠完善的。

相關文章
相關標籤/搜索