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

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

说到邮件放松,相信大家对Spring Framework提供的接口  JavaMailSender  都不陌生。 那么Spring Boot是否有开箱即用的邮件发送呢?
答案是肯定的。 Spring Boot为发送邮件提供了starter: spring-boot-starter-mail  。
本文详细探讨如何用Spring Boot发送邮件。

一、邮箱配置

以126邮箱为例:
1 开启SMTP服务

640?wx_fmt=png

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

640?wx_fmt=png

二、编码

2.1 准备工作

1 加依赖
<dependency>	
  <groupId>org.springframework.boot</groupId>	
  <artifactId>spring-boot-starter-mail</artifactId>	
</dependency>
2 写配置
spring:	
  mail:	
    host: smtp.126.com	
    username: eacdy0000@126.com	
    password: 上面设置的授权码

2.2 发送简单邮件

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";	
}
结果类似下图:

640?wx_fmt=png

2.3 发送HTML邮件

简单邮件是没有样式的,很多时候,我们希望发送的邮件内容带有样式,此时可发送HTML邮件。
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("<h1>HTML内容..</h1>", true);	

	
    this.javaMailSender.send(message);	
    return "success";	
}
结果类似下图:

640?wx_fmt=png

2.4 发送带附件的邮件

很多场景下,需要为邮件插入附件,此时该怎么办呢? 继续上代码——
@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("<h1>HTML内容..</h1>", true);	
    messageHelper.addAttachment("附件名称",	
            new ClassPathResource("wx.jpg"));	

	
    this.javaMailSender.send(message);	
    return "success";	
}
结果类似下图:

640?wx_fmt=png

2.5 发送带内联附件的邮件

附件 + HTML基本能满足日常工作中多数需求。 但如果能将附件内联在邮件内容中,那么体验就更好啦! 如何实现附件的内联呢?
@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("<h1>HTML内容..<img src=\"cid:attach\"/></h1>", true);	
    messageHelper.addInline("attach", new ClassPathResource("wx.jpg"));	

	
    this.javaMailSender.send(message);	
    return "success";	
}
由代码可知,只需在想要内联的地方使用  cid:xx  引用内联附件,然后用  addInline(xx, file) 指定附件即可。 两处的  xx  必须一致。
结果类似下图:

640?wx_fmt=png

2.6 发送基于Freemarker模板的邮件

上面的例子中,邮件内容是直接以字符串体现的,这通常不适合生产,因为实际项目中邮件往往带有变量。 此时,可考虑使用Freemarker模板(或者其他模板,Spring Boot 2.x默认支持Freemarker、Groovy、Thymeleaf、Mustache四种模板引擎,也可根据需求使用其他模板引擎)。
创建Freemarker模板文件 mail.ftl ,并将其存放在 resources/templates/  目录中
<h1>亲爱的${username}, 欢迎关注${event}</h1>
编码:
@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<String, Object> 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";	
}
此时,结果类似下图:

640?wx_fmt=png

References

[1]  GitHub: https://github.com/eacdy/spring-boot-study/tree/master/spring-boot-mail
[2]  Gitee: https://gitee.com/itmuch/spring-boot-study/tree/master/spring-boot-mail
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值