java编写两邮件传输_走进Java接口测试之使用JavaMailSender发送邮件

f7ad34923854c02aa3fb8ea8fbdf86f9.png

引言

一般我们在做接口自动化时,都会通过钉钉或者邮件的方式通知测试结果信息。而且基本上邮件的内容都是测试报告。所以,今天就来讲讲如何利用 pring提供的 JavaMailSender接口,实现邮件发送功能。

背景

讲解前,我们先来简单了解下相关邮件知识。最早期的时候我们会使用 JavaMail相关 api来写发送邮件的相关代码,后来spring推出了 JavaMailSender更加简化了邮件发送的过程,在之后 springboot对此进行了封装就有了现在的 spring-boot-starter-mail,本文的介绍主要来自于此包。

JavaMail介绍

JavaMail是由 Sun定义的一套收发电子邮件的 API,不同的厂商可以提供自己的实现类。但它并没有包含在 JDK中,而是作为 JavaEE的一部分。而 JavaMailSender底层也是基于 JavaMailjar包的。

邮件通信协议

SMTP:简单邮件传输协议,用于发送电子邮件的传输协议;

POP3:用于接收电子邮件的标准协议;

IMAP:互联网消息协议,是POP3的替代协议。

这三种协议都有对应 SSL加密传输的协议,分别是 SMTPS, POP3S和 IMAPS。除 JavaMail服务提供程序之外, JavaMail还需要 JAF( JavaBeansActivationFramework)来处理不是纯文本的邮件内容,这包括 MIME(多用途互联网邮件扩展)、 URL页面和文件附件等内容

JavaMail关键对象

Properties:属性对象。针对不同的的邮件协议,JavaMail规定了服务提供者必须支持一系列属性。

4554f107df7fe55682fb82fe9b039217.png

Session会话对象 这个不要混淆了,和web中的session不一样的,简单来说,它就是配置的集合。Session的主要作用包括两个方面:

接收各种配置属性信息:通过Properties对象设置的属性信息;

初始化JavaMail环境:根据JavaMail的配置文件,初始化JavaMail环境,以便通过Session对象创建其他重要类的实例。

Transport和Store:传输和存储邮件操作只有发送或接收两种处理方式,JavaMail将这两种不同操作描述为传输(javax.mail.Transport)和存储(javax.mail.Store),传输对应邮件的发送,而存储对应邮件的接收。

Message:消息对象一旦获得Session对象,就可以继续创建要发送的消息。Message是个抽象类,常用的实现类为:javax.mail.internet.MimeMessage

Address:地址创建了Session和Message,并将内容填入消息后,就可以用Address确定信件地址了。Address也是个抽象类。对应常用实现类:javax.mail.internet.InternetAddress。

Spring封装后,使用起来基本上都不需要去关心这些对象值了,简单了解下即可。有兴趣,可以去官网查看:https://java.net/projects/javamail/pages/Home

SpringBoot集成

pom包配置

pom包里面添加包引用

7dd72830dba22711a023bd93477c7f4f.png

邮箱配置

在 application.yml中添加邮箱配置

612d798780e5bc2476b076c53d36bbe7.png

发送纯文本格式

编写mailService接口并实现

08defdf27a9b7c42f287097b454a0a4e.png

编写test类进行测试

77d732cff102e11a5ed7ee8eb680cbbb.png

查看收件箱

e947733b12ba9cfdc034ab904be31546.png

本发送就完成了。

发送html邮件

但是在正常接口测试的过程中,我们通常在邮件中加入附件完整HTML测试报告来通知测试结果,下面讲介绍如何使用springboot来发送html报告的邮件。

发送html格式邮件

其它都不变在 MailService添加 sendHtmlMail方法

6d78129573adacdaace4bb419e745d01.png

编写test类进行测试

4795675bae2f3055841fd3d3f8ecc12c.png

查看收件箱

d3229a5e3d2a892cbc54aa2017cfb1e8.png

发送带附件的邮件

在 MailService添加 sendAttachmentsMail方法

41521e9e878d3dd715dd6ca1d9c36bf6.png

添加多个附件可以使用多条helper.addAttachment(fileName,file)

编写test类进行测试

846324e0af791101bee9f5e45dd0c117.png

查看收件箱

d1b1a8dee184c5f5a26c2508cbfa6d9c.png

发送带静态资源的邮件

邮件中的静态资源一般就是指图片,在MailService添加sendAttachmentsMail方法

7e84ad58eccbc48fde821b960efce008.png

测试类中添加test方法

6f054e1ca59f2f59ee4f32d2f29f5c25.png

查看收件箱

9f4b05c10bbcf1b187f04b10a0e6f822.png

添加多个图片可以使用多条和helper.addInline(rscId,res)来实现

发送模板邮件

b66fac245df1b01564e99c578147c8c1.png

我们希望收到这样的ExtentReports邮件

其中只有邮件这个报告内容在变化,其它邮件内容均不变,因此对于这类邮件需求,都建议做成邮件模板来处理。模板的本质很简单,就是在模板中替换变化的参数,转换为html字符串即可,这里以thymeleaf为例来演示。

把emailable-report.html放到在resorces/templates下(正式测试需要修改其生成目录)

dcca0015a0102a55cb9334ceb8656503.png

c58491a18f1a7df35f9983041ef797dd.png

解析Html报告并发送

ba040ebbab8b348af4376bf1aa3dfa74.png

查看收件箱

843c7330487a99d8cc26f0fcb26f8216.png

发送失败

因为各种原因,总会有邮件发送失败的情况,比如:邮件发送过于频繁、网络异常等。在出现这种情况的时候,我们一般会考虑重新重试发送邮件,会分为以下几个步骤来实现:

接收到发送邮件请求,首先记录请求并且入库。

调用邮件发送接口发送邮件,并且将发送结果记录入库。

启动定时系统扫描时间段内,未发送成功并且重试次数小于3次的邮件,进行再次发送

本文代码:

https://github.com/7DGroup/Java-API-Test-Examples

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值