測試平臺系列(87) 搞個精美的郵件模板

米洛丶發表於2022-01-05

大家好~我是米洛

我正在從0到1打造一個開源的介面測試平臺, 也在編寫一套與之對應的教程,希望大家多多支援。

歡迎關注我的公眾號米洛的測開日記,獲取最新文章教程!

回顧

上一節我們初步傳送了測試郵件,由於定時任務的存在,導致我的郵箱還一直有收到每天測試計劃的執行記錄

image.png

但它總歸是一個半成品,只有空蕩蕩的文字資訊,所以我們還是得適當對他美化一下。

成果展示

功夫不負有心人,忙碌了1個多小時的米師傅終於搞出了像樣點的郵件報告:

怎麼樣,效果還湊合吧

當然,這裡只有樣式哈,(因為資料我暫時是寫死的)。

開始研究(卷王模式)

其實有時候我一直在想,如果沒有antdelement-ui,那我寫的東西該多麼醜陋

這其實也說明了,本人前端功底真的是太不紮實了,也只有用這樣的元件才能拯救自己了。

好了,認清現實以後,我不打算自己手擼css樣式了。於是我開始找有沒有啥好看的郵件模板,你別說,還真給我找到了。

看了一下,是某鵝雲的郵件模板,看起來還是很好看的。作者給出了對應的原始碼:

emmm,原始碼貼了以後效果不好,有需要的可以私信我。

想起來我還沒解釋為什麼要手擼css,因為在郵件裡,雖然支援你使用html作為正文,但是它有一些限制

  • 無法使用js

    所以點選事件我們用連結來完成

  • 只對行內樣式能友好支援

    這2點就很讓人難受了,所以我這邊就打算借鑑他人的程式碼,在他們基礎上修改

接下來幹嘛

拿到這塊程式碼以後,首先我想的是把它改成jinja2的模板程式碼,預置對應的話術,在需要動態展示的地方用{{變數}}進行替換。相信大家寫過舊時代,前後端一體web系統的時候都用過template,也就對這種方式(模板引擎)很熟悉。

我們通過jinja2生成html,傳送html郵件到對應的接收人就好了。

但html裡面樣式雖然正常,到了郵件又會怎麼樣呢?我們試試看

調整樣式

到這個地步就差不多了

可以看到裡面有很多變數,到時候都會通過jinja2傳遞進去。

然後我為了測試效果,先寫死了資料:

用yagmail測試

由於yagmail很易用,所以我們之前都是用它來傳送郵件。那麼它發html郵件效果會咋樣呢?

這是真實的效果,可以看到,慘不忍睹

但這怎麼能摧毀我的鬥志呢?

於是我決定試試最原始的smtplib,說實話,現在不查資料我完全不會用的一個庫:

發現樣式沒問題,但要點選顯示圖片才能展示圖片,這個顯然在可以接受的範圍,因為我看阿里雲的圖片也被遮蔽了。zzz

所以我們還是採用smtplib來發郵件吧~~~

最後附上粗略版的發郵件程式碼,備個份。

import smtplib
from email.mime.text import MIMEText
from email.header import Header

sender = 'xxx@126.com'
password="客戶端token"
receivers = ['xxxx@qq.com']  # 接收郵件,可設定為你的QQ郵箱或者其他郵箱

mail_msg = """html程式碼"""
message = MIMEText(mail_msg, 'html', 'utf-8')
message['From'] = 'wuranxu1993@126.com'
message['To'] = Header("測試", 'utf-8')

subject = 'Python SMTP 郵件測試'
message['Subject'] = Header(subject, 'utf-8')

try:
    smtp = smtplib.SMTP()
    smtp.connect('smtp.126.com')
    # 我們用set_debuglevel(1)就可以列印出和SMTP伺服器互動的所有資訊。
    # smtp.set_debuglevel(1)
    smtp.login(sender, password)
    smtp.sendmail(sender, receivers, message.as_string())
except Exception as e:
    print(e)

下一節我們們直接完成郵件通知這塊內容,敬請期待。

相關文章