「这是我参与2022首次更文挑战的第3天,活动详情查看:2022首次更文挑战」
嗨,家人们,我是bug菌呀,我又来啦。今天我们来聊点什么咧,OK,接着为大家更《springboot零基础入门教学》系列文章吧。希望能帮助更多的初学者们快速入门!
小伙伴们如果觉得文章不错,欢迎点赞、关注、留言呀。您的素质三连即是对bug菌我写作道路上最好的鼓励与加油!
一:前言
续上篇,我们已经成功实现了邮件发送提醒,对吧,小伙伴跟着我一路看过来,是不是感觉轻松多了,毕竟篇幅我都不会很长。这样下去,每天学习一个知识点,一个月下来就是三十个知识点,日积月累,你就是下一个大佬啦。如果有小伙伴直接中途插入,还请麻烦先去看上几期的内容,要不然贸然跟着学,肯定要吃大亏,去我的专栏《SpringBoot零基础入门》从头开始跟进。
今天我就给大家带来点稍微花哨的知识点,通常邮件除了正文内容,也有添加附件或者正文出现图片,像这种需求,我们应该怎么实现呢?好啦,废话不多说,请接招!
二、业务场景
1、如何实现发送带附件的邮件?
a、首先我们先定义一个[发送带图片资源邮件参数]model,代码需规范。继承下mail这个vo,需要的小伙伴可以去上篇取,这里就不多重复了哈。
package com.example.demo.component.mail.model;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.util.List;
/**
* 发送带图片资源邮件参数
*
* @author luoYong
* @version 1.0
* @date 2022/1/18 10:54
*/
@ApiModel(value = "发送带图片资源邮件参数",description = "发送带图片资源邮件参数")
public class ImgResMail extends Mail{
@ApiModelProperty("对于的图片标记id")
private List<String> contentIds;
@ApiModelProperty("图片地址")
private List<String> paths;
public List<String> getContentIds() {
return contentIds;
}
public void setContentIds(List<String> contentIds) {
this.contentIds = contentIds;
}
public List<String> getPaths() {
return paths;
}
public void setPaths(List<String> paths) {
this.paths = paths;
}
}
复制代码
b、定义发送带有附件邮件的方法
/** * 发送带附件的邮件 */
public void sendAccessoryMail(AccessoryMail model) throws MessagingException {
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
MimeMessageHelper msg = new MimeMessageHelper(mimeMessage, true); //邮件发送者
msg.setFrom(model.getSendMailAccount()); //邮件接收者
msg.setTo(model.getAcceptMailAccount()); //邮件主题
msg.setSubject(model.getTheme()); //邮件正文
msg.setText(model.getMailText()); //邮件发送时间
msg.setSentDate(model.getSendTime()); //添加附件
msg.addAttachment(model.getAttachmentName(), new File(model.getAttachmentPath()));
javaMailSender.send(mimeMessage);
}
复制代码
c、接下来,就是进行测试了,还是老地方,去MailTest测试类中,写一个testcese,测试该方法是否有报错等逻辑问题。
/** * 发送带附件的邮件 */
@Testvoid sendSimpleMailForDoc() throws MessagingException {
AccessoryMail mailModel = new AccessoryMail();
mailModel.setTheme("这是一封测试邮件"); // 设置邮件主题
mailModel.setSendMailAccount("[email protected]"); // 设置邮箱发送者
mailModel.setAcceptMailAccount("[email protected]"); // 设置邮件接收者,可以有多个接收者
mailModel.setSendTime(new Date()); // 设置邮件发送日期
mailModel.setMailText("这是测试邮件的正文");// 设置邮件的正文
mailModel.setAttachmentName("2022.png");//附件名
mailModel.setAttachmentPath("C:\\Users\\Administrator\\Desktop\\2022.png");//附件地址
//测试方法
sendMailBuild.sendAccessoryMail(mailModel);
}
复制代码
d、运行testcase ,可见,邮件发送成功,邮件成功接收!如下图:
我传的附件是一张图片,你们也可以试试,文档doc啊,txt等文件看看是否也能成功。
图片作为附件进行邮件发送,你们测试通过了么?
2、如何实现发送带正文存在图片的邮件?
与上一场景不同的是,一个是附件图片,一个是正文图片,这二者得区别开。
a、我们也是定义一个参数体:ImgResMail
package com.example.demo.component.mail.model;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.util.List;
/**
* 发送带图片资源邮件参数
*
* @author luoYong
* @version 1.0
* @date 2022/1/18 10:54
*/
@ApiModel(value = "发送带图片资源邮件参数",description = "发送带图片资源邮件参数")
public class ImgResMail extends Mail {
@ApiModelProperty("对于的图片标记id")
private List<String> contentIds;
@ApiModelProperty("图片地址")
private List<String> paths;
public List<String> getContentIds() {
return contentIds;
}
public void setContentIds(List<String> contentIds) {
this.contentIds = contentIds;
}
public List<String> getPaths() {
return paths;
}
public void setPaths(List<String> paths) {
this.paths = paths;
}
}
复制代码
b、定义方法
/**
* 发送带图片资源的邮件
*/
public void sendImgResMail(ImgResMail model) throws MessagingException {
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
MimeMessageHelper msg = new MimeMessageHelper(mimeMessage, true); //邮件发送者
msg.setFrom(model.getSendMailAccount()); //邮件接收者
msg.setTo(model.getAcceptMailAccount()); //邮件主题
msg.setSubject(model.getTheme()); //邮件发送时间
msg.setSentDate(model.getSendTime()); //邮件正文
msg.setText(model.getMailText(),true); //添加图片链接
for (int i = 0; i < model.getContentIds().size(); i++) {
msg.addInline(model.getContentIds().get(i), new FileSystemResource(new File(model.getPaths().get(i))));
}
javaMailSender.send(mimeMessage);
}
复制代码
c、接下来,就是进行测试了,还是老地方,去MailTest测试类中,写一个testcese,测试该方法是否有报错等逻辑问题。
@Test
public void sendImgResMail() throws MessagingException {
ImgResMail mailModel = new ImgResMail();
mailModel.setTheme("这是一封测试邮件"); // 设置邮件主题
mailModel.setSendMailAccount("[email protected]"); // 设置邮箱发送者
mailModel.setAcceptMailAccount("[email protected]"); // 设置邮件接收者,可以有多个接收者
mailModel.setSendTime(new Date()); // 设置邮件发送日期
mailModel.setMailText("<p>hello 大家好,我是一封测试邮件,我包含了两张图片,分别如下</p><p>第一张图片:</p><img src='cid:img1'/><p>第二张图片:</p><img src='cid:img2'/>");
List<String> paths = new ArrayList<>();
//举例添加两张图片
paths.add("C:\\Users\\Administrator\\Desktop\\2022.png");
paths.add("C:\\Users\\Administrator\\Desktop\\test.png");
mailModel.setPaths(paths);
List<String> contentIds = new ArrayList<>();
//如下的与你邮件正文text匹配图片名,必须一样,要不然图片无法找到进行展示。
contentIds.add("img1");
contentIds.add("img2");
mailModel.setContentIds(contentIds);
sendMailBuild.sendImgResMail(mailModel);
}
复制代码
d、运行testcase ,可见,邮件发送成功,邮件成功接收!如下图:
... ...
OK,以上就是这期所有的内容啦,如果有任何问题欢迎评论区批评指正,咱们下期见。
三、往期热门推荐
Springboot系列(十二):如何代码实现发送邮件提醒之环境配置(准备篇)
Springboot系列(十二):如何代码实现简单邮件发送(上篇)
Springboot系列(十二):如何代码实现静态模板邮件发送(下篇)
Springboot系列(十二):如何代码实现邮件发送之大复盘(总结篇)
... ...
如果还想要学习更多,小伙伴们可关注bug菌专门为大家创建的专栏《SpringBoot零基础入门》,从无到有,从零到一!希望能帮到大家。
*************************************************************************************
做你想做的人,没有时间限制,只要愿意,什么时候都可以start,
你能从现在开始改变,也可以一成不变,这件事,没有规矩可言,你可以活出最精彩的自己。
*************************************************************************************
❤ 如果文章对您有所帮助,就请在文章末尾的左上角把大拇指点亮吧!(#^.^#);
❤ 如果喜欢bug菌分享的文章,就请给bug菌点个关注吧!(๑′ᴗ‵๑)づ╭❤~;
❤ 如果对文章有任何问题,欢迎小伙伴们下方留言或者入群探讨【扣扣群号:708072830】;
❤ 鉴于个人经验有限,所有观点及技术研点,如有异议,请直接回复参与讨论(请勿发表攻击言论,谢谢);
❤ 版权声明:本文为博主原创文章,转载请附上原文出处链接和本文声明,版权所有,盗版必究!(*^▽^*);