python發送郵件——smtplib、email模塊的基本操作

設計自動化框架時,希望可以直接將運行後的html報告發送給自己,需要用到smtplib模塊和email模塊,所以就寫個小的教程吧。

email模塊:負責構建郵件

stmplib模塊:負責發送郵件

一、配置163郵箱

自動發送郵件,我們需要一個郵件服務器來支持郵件的發送,所以我們先看下如何設置163郵箱爲stmp服務器。

1、登錄163郵箱後,選擇設置下的“POP3/SMTP/IMAP”

 2、進入設置界面之後,選擇開始POP3/SMTP服務,因爲我自己已經開啓了該服務,所以我截圖的界面和你們沒開啓的界面不一樣。不用在意這個差別,直接點擊“開啓”就行了。開啓之後,會要求驗證你的短信,之後會生成一個字符串的密鑰,這個密鑰一定要保存好!!!獲取到密鑰之後我們第一步就結束了,接下來來看命令具體應該如何來寫

二、smtplib模塊和email模塊部分命令

smtplib:

connect(host, port):鏈接smtp服務器,第一個參數是服務器地址,第二個參數時服務器端口

login(user,password):登錄smtp服務器,第一個參數是登錄郵箱用戶名,第二個參數是登陸密碼,注意此處密碼不是指郵箱的真是登錄密碼,而是在第一步中獲取到的那個密鑰

sendmail(from_addr, to_addr, msg):第一個參數是發送方的郵箱地址,第二個參數是接收方的郵件地址,第三個參數是郵件的正文

quit():結束當前會話

close():關閉和SMTP服務器的連接

email:

MIMEText(郵件正文,郵件內容格式,編碼格式):創建郵件正文的類

發送郵件要遵循郵件發送的規則,即需要有發件人、收件人以及郵件標題,所以我們需要對MIMEText類所創建的對象依次添加內容From、To、Subject

三、發送文本郵件

import smtplib
from email.mime.text import MIMEText
# 發送純文本格式的郵件,郵件正文一定要是有意義的內容,不然會被163服務器識別爲垃圾郵件,無法發送
msg = MIMEText('dear wong,this is the work mail ,if you getted please receive now!!!','plain','utf-8')
#發送郵箱地址
sender = '發件人郵箱'
#郵箱授權碼,非登陸密碼
password = '授權碼'
#收件箱地址
receiver = '收件人郵箱'
#smtp服務器
smtp_server = 'smtp.163.com'
#發送郵箱地址
msg['From'] = sender
#收件箱地址
msg['To'] = receiver
#主題,主題也必須是有意義的內容,否則同樣會被識別爲垃圾郵件,無法發送
msg['Subject'] = 'new dream reject email'

server = smtplib.SMTP(smtp_server,25)    # SMTP協議默認端口是25
server.login(sender,password)    #ogin()方法用來登錄SMTP服務器
server.set_debuglevel(1)    #打印出和SMTP服務器交互的所有信息。
server.sendmail(sender,receiver,msg.as_string())    #msg.as_string()把MIMEText對象變成str server.quit()

發送結果如圖

四、發送HTML格式郵件

其實發送html格式的郵件和發送純文本的格式區別不是很大,只需要修改MIMEText實例化時的入參,第一個參數改爲html的源碼格式內容,第二個參數改爲html即可

因爲我自己是用來發送自動化生成的html報告,所以例子就直接寫的是怎麼講HTMLTestRunner生成的html報告寫入到郵件裏面

import smtplib
import time
import unittest
from HTMLTestRunner import HTMLTestRunner
from email.mime.text import MIMEText


class NewDream(unittest.TestCase):
    def test_new(self):
        self.assertTrue(True)
    def test_dream(self):
        self.assertEqual(1, 1)

if __name__ == '__main__':
    # 創建testsuite  測試集合對象
    suite = unittest.TestSuite()
    # 完成測試用例的添加
    # addTest(case類名('test開頭的測試方法'))
    suite.addTest(NewDream('test_new'))
    suite.addTest(NewDream('test_dream'))

    # 創建文件流對象
    file_name = time.strftime('%Y_%m_%d_%H_%M_%S', time.localtime(time.time()))     # 根據時間生成了文件名  testfile.txt
    file = open(file_name+".html", "w+", encoding='utf-8')

    # 實例化HTMLTestRunner對象
    runer = HTMLTestRunner(stream=file,
                           title=u"測試登錄網頁功能的報告生成",
                           description=u"驗證下HTMLTestRunner模塊的具體使用"
                           )
    runer.run(suite)
    file.seek(0, 0)
    html_content = file.read()
    print("這是文件內容:%s" % html_content)
    # 發送純文本格式的郵件
    msg = MIMEText("dear sir,\nthis is the test report" + html_content, 'html', 'utf-8')
    # 發送郵箱地址
    sender = '發件人郵箱地址'
    # 郵箱授權碼,非登陸密碼
    password = '授權碼'
    # 收件箱地址
    receiver = '收件人郵箱地址'
    # smtp服務器
    smtp_server = 'smtp.163.com'
    # 發送郵箱地址
    msg['From'] = sender
    # 收件箱地址
    msg['To'] = receiver
    # 主題,需要是一些有實際意義的內容
    msg['Subject'] = 'the auto_test report'

    server = smtplib.SMTP(smtp_server, 25)  # SMTP協議默認端口是25
    server.login(sender, password)  # ogin()方法用來登錄SMTP服務器
    server.set_debuglevel(1)  # 打印出和SMTP服務器交互的所有信息。
    server.sendmail(sender, receiver, msg.as_string())  # msg.as_string()把MIMEText對象變成str
    server.quit()

實際效果

 

寫在最後,本文只是一些非常簡單的模塊命令使用,頂多幫你實現郵件的發送,如果相對模塊有更深入的學習,建議直接閱讀官方文檔

 

 

 

超全面的測試IT技術課程,0元立即加入學習!有需要的朋友戳:

騰訊課堂測試技術學習地址

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章