测试平台系列(87) 搞个精美的邮件模板.md

2022/6/13 测试平台接口测试FastApiPythonReact

大家好~我是米洛
我正在从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)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

下一节咱们直接完成邮件通知这块内容,敬请期待。