Loading... # **Spring Boot 2发送邮件手把手图文教程** > **本文基于:Spring Boot 2.1.3,理论支持Spring Boot 2.x所有版本。** > > **作者:大目** > **链接:**[https://www.imooc.com/article/285710](https://www.imooc.com/article/285710) **说到邮件放松,相信大家对Spring Framework提供的接口 **`JavaMailSender` 都不陌生。那么Spring Boot是否有开箱即用的邮件发送呢? **答案是肯定的。Spring Boot为发送邮件提供了starter:**`spring-boot-starter-mail` 。 **本文详细探讨如何用Spring Boot发送邮件。** ## 一、邮箱配置 **以126邮箱为例:** * **开启SMTP服务** ![126邮箱开启SMTP-1](https://img.pelycloud.com/pelyblog/typora/202210182025788.jpeg) * **设置/重置客户端授权密码** ![126邮箱开启SMTP-2](https://img.pelycloud.com/pelyblog/typora/202210182025283.jpeg) ## 二、编码 ### 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"; }` | | ------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | | | **结果类似下图:** ![发送简单邮件](https://img.pelycloud.com/pelyblog/typora/202210182025143.jpeg) ### 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"; }` | | ------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | | | **结果类似下图:** ![发送HTML邮件](https://img.pelycloud.com/pelyblog/typora/202210182025117.jpeg) ### 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"; }` | | ------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | | | **结果类似下图:** ![发送带附件的邮件](https://img.pelycloud.com/pelyblog/typora/202210182025337.jpeg) ### 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` 必须一致。 **结果类似下图:** ![发送带内联附件的邮件](https://img.pelycloud.com/pelyblog/typora/202210182025180.jpeg) ### 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"; }` | | ---------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | | | **此时,结果类似下图:** ![发送基于Freemarker模板的邮件](https://img.pelycloud.com/pelyblog/typora/202210182025669.jpeg) ## 三、配套代码 * [GitHub](https://github.com/eacdy/spring-boot-study/tree/master/spring-boot-mail) * [Gitee](https://gitee.com/itmuch/spring-boot-study/tree/master/spring-boot-mail) 最后修改:2022 年 10 月 18 日 © 转载自他站 赞 如果觉得我的文章对你有用,请点个赞吧~