Springboot系列(十二):如何代码实现发送邮件提醒,你一定得会!(中篇)

「这是我参与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】;

❤ 鉴于个人经验有限,所有观点及技术研点,如有异议,请直接回复参与讨论(请勿发表攻击言论,谢谢);

❤ 版权声明:本文为博主原创文章,转载请附上原文出处链接和本文声明,版权所有,盗版必究!(*^▽^*);

猜你喜欢

转载自juejin.im/post/7055096057817989157