栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java > SpringBoot

Spring Boot 2发送邮件手把手图文教程

SpringBoot 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring Boot 2发送邮件手把手图文教程

本文基于:Spring Boot 2.1.3,理论支持Spring Boot 2.x所有版本。

最近有童鞋问到笔者如何用Spring Boot发送邮件,故而整理下Spring Boot发送邮件的各种姿势。

说到邮件放松,相信大家对Spring framework提供的接口 JavaMailSender 都不陌生。那么Spring Boot是否有开箱即用的邮件发送呢?

答案是肯定的。Spring Boot为发送邮件提供了starter:spring-boot-starter-mail 。

本文详细探讨如何用Spring Boot发送邮件。

一、邮箱配置

以126邮箱为例:

  • 开启SMTP服务

  • 设置/重置客户端授权密码

二、编码2.1 准备工作
  • 加依赖

    1
    2
    3
    4
    
      org.springframework.boot
      spring-boot-starter-mail
    
  • 写配置

    1
    2
    3
    4
    5
    spring:
      mail:
        host: smtp.126.com
        username: eacdy0000@126.com
        password: 上面设置的授权码
2.2 发送简单邮件

1
2
3
4
5
6
7
8
9
10
11
12
13
public String simple() {
    SimpleMailMessage message = new SimpleMailMessage();
    // 发件人邮箱
    message.setFrom(this.mailProperties.getUsername());
    // 收信人邮箱
    message.setTo("511932633@qq.com");
    // 邮件主题
    message.setSubject("简单邮件测试");
    // 邮件内容
    message.setText("简单邮件测试");
    this.javaMailSender.send(message);
    return "success";
}

结果类似下图:

2.3 发送HTML邮件

简单邮件是没有样式的,很多时候,我们希望发送的邮件内容带有样式,此时可发送HTML邮件。

1
2
3
4
5
6
7
8
9
10
11
12
13
public String html() throws MessagingException {
    MimeMessage message = javaMailSender.createMimeMessage();
    MimeMessageHelper messageHelper = new MimeMessageHelper(message);

    messageHelper.setFrom(this.mailProperties.getUsername());
    messageHelper.setTo("511932633@qq.com");
    messageHelper.setSubject("HTML内容邮件测试");
    // 第二个参数表示是否html,设为true
    messageHelper.setText("HTML内容..", true);

    this.javaMailSender.send(message);
    return "success";
}

结果类似下图:

2.4 发送带附件的邮件

很多场景下,需要为邮件插入附件,此时该怎么办呢?继续上代码——

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@GetMapping("/attach")
public String attach() throws MessagingException {
    MimeMessage message = this.javaMailSender.createMimeMessage();
    // 第二个参数表示是否开启multipart模式
    MimeMessageHelper messageHelper = new MimeMessageHelper(message, true);

    messageHelper.setFrom(this.mailProperties.getUsername());
    messageHelper.setTo("511932633@qq.com");
    messageHelper.setSubject("带附件的邮件测试");
    // 第二个参数表示是否html,设为true
    messageHelper.setText("HTML内容..", true);
    messageHelper.addAttachment("附件名称",
            new ClassPathResource("wx.jpg"));

    this.javaMailSender.send(message);
    return "success";
}

结果类似下图:

2.5 发送带内联附件的邮件

附件 + HTML基本能满足日常工作中多数需求。但如果能将附件内联在邮件内容中,那么体验就更好啦!如何实现附件的内联呢?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@GetMapping("/inline-attach")
public String inlineAttach() throws MessagingException {
    MimeMessage message = this.javaMailSender.createMimeMessage();
    // 第二个参数表示是否开启multipart模式
    MimeMessageHelper messageHelper = new MimeMessageHelper(message, true);
    messageHelper.setFrom(this.mailProperties.getUsername());
    messageHelper.setTo("511932633@qq.com");
    messageHelper.setSubject("内联附件的邮件测试");
    // 第二个参数表示是否html,设为true
    messageHelper.setText("HTML内容..", true);
    messageHelper.addInline("attach", new ClassPathResource("wx.jpg"));

    this.javaMailSender.send(message);
    return "success";
}

由代码可知,只需在想要内联的地方使用 cid:xx 引用内联附件,然后用 addInline(xx, file) 指定附件即可。两处的 xx 必须一致。

结果类似下图:

2.6 发送基于Freemarker模板的邮件

上面的例子中,邮件内容是直接以字符串体现的,这通常不适合生产,因为实际项目中邮件往往带有变量。此时,可考虑使用Freemarker模板(或者其他模板,Spring Boot 2.x默认支持Freemarker、Groovy、Thymeleaf、Mustache四种模板引擎,也可根据需求使用其他模板引擎)。

  • 创建Freemarker模板文件mail.ftl,并将其存放在resources/templates/ 目录中

    1
    亲爱的${username}, 欢迎关注${event}
  • 编码:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    @GetMapping("/freemarker")
    public String freemarker() throws MessagingException, IOException, TemplateException {
        MimeMessage message = this.javaMailSender.createMimeMessage();
        // 第二个参数表示是否开启multipart模式
        MimeMessageHelper messageHelper = new MimeMessageHelper(message, true);
        messageHelper.setFrom(this.mailProperties.getUsername());
        messageHelper.setTo("511932633@qq.com");
        messageHelper.setSubject("基于freemarker模板的邮件测试");
    
        Map model = new HashMap<>();
        model.put("username", "itmuch");
        model.put("event", "IT牧场大事件");
    
        String content = FreeMarkerTemplateUtils.processTemplateIntoString(
                this.freemarkerConfiguration.getTemplate("mail.ftl"), model);
    
        // 第二个参数表示是否html,设为true
        messageHelper.setText(content, true);
    
        this.javaMailSender.send(message);
        return "success";
    }

此时,结果类似下图:

三、配套代码
  • GitHub

  • Gitee


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/234958.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号