javamailsender注入失败_SpringBoot - 使用JavaMailSender发送邮件教程3(使用HTML邮件模版)...

本文介绍了如何在SpringBoot应用中使用FreeMarker和Thymeleaf构建邮件模板,详细讲解了添加依赖、改造MailService、创建邮件模板、创建实体类并进行测试的过程,展示了通过模板发送HTML邮件的方法。
摘要由CSDN通过智能技术生成

对于格式复杂的邮件,如果像前文一样采用字符串进行 HTML拼接,不但容易出错,而且不易维护,使用 HTML模版可以很好地解决这一问题。我们既可以使用 FreeMarker构建邮件模版,也可以使用 Thymeleaf构建邮件模版,下面通过样例进行演示。

五、使用 FreeMarker 构建邮件模版

1,添加依赖

编辑项目的pom.xml 文件,加入 FreeMarker依赖:

org.springframework.boot

spring-boot-starter-freemarker

2,改造 MailService

这里对前文封装的邮件发送类 MailService 做个改造,增加一个可以发送 html内容的方法:

@Component

public class MailService {

// JavaMailSender 在Mail 自动配置类 MailSenderAutoConfiguration 中已经导入,这里直接注入使用即可

@Autowired

JavaMailSender javaMailSender;

// 发送带HTML内容的邮件

// 方法4个参数分别表示:邮件发送者、收件人、邮件主题、html格式的邮件内容

public void sendHtmlMail(String from, String to, String subject, String content){

try {

MimeMessage message = javaMailSender.createMimeMessage();

MimeMessageHelper helper = new MimeMessageHelper(message, true);

helper.setTo(to);

helper.setFrom(from);

helper.setSubject(subject);

helper.setText(content, true);

javaMailSender.send(message);

} catch (MessagingException e) {

System.out.println("发送失败");

}

}

}

3,创建邮件模版

在项目 resources 目录下创建 ftl目录作为模版存放位置,在该目录下创建 mailtemplate.ftl 作为邮件模版,内容如下:

邮箱激活
您的注册信息是:
用户名${username}
用户性别${sex}

4,创建实体类

接着创建一个简单的 User实体类,后面会将这个实体类对象内容填充到模版中,并通过邮件发送。

@NoArgsConstructor

@Setter

@Getter

public class User {

private String username;

private String sex;

}

5,开始测试

(1)首先我们创建一个 Controller来发送邮件,这次我们通过 FreeMarker模版渲染出邮件正文内容:

@RestController

public class HelloController {

@Autowired

MailService mailService;

//

@GetMapping("/hello")

public void hello() {

try {

// 首先配置 FreeMarker 模版位置

Configuration configuration =

new Configuration(Configuration.VERSION_2_3_0);

ClassLoader loader = DemoApplication.class.getClassLoader();

configuration

.setClassLoaderForTemplateLoading(loader,"ftl");

// 配置模版文件

Template template = configuration.getTemplate("mailtemplate.ftl");

// 结合 User 对象渲染模版

StringWriter mail = new StringWriter();

User user = new User();

user.setUsername("hangge");

user.setSex("男");

template.process(user, mail);

// 将渲染结果发送出去

mailService.sendHtmlMail("123@qq.com",

"service@hangge.com",

"这个是邮件的标题",

mail.toString());

} catch (Exception e) {

e.printStackTrace();

}

}

}

(2)启动项目,访问http://localhost:8080/hello 地址发送一个邮件,可以发现目标邮箱可以成功收到邮件。

六、使用 Thymeleaf 构建邮件模版

1,添加依赖

编辑项目的pom.xml 文件,加入 Thymeleaf依赖:

org.springframework.boot

spring-boot-starter-thymeleaf

2,封装邮件发送类 MailService

MailService里的代码同上面一样,就是提供一个可以发送 html内容的方法:

@Component

public class MailService {

// JavaMailSender 在Mail 自动配置类 MailSenderAutoConfiguration 中已经导入,这里直接注入使用即可

@Autowired

JavaMailSender javaMailSender;

// 发送带HTML内容的邮件

// 方法4个参数分别表示:邮件发送者、收件人、邮件主题、html格式的邮件内容

public void sendHtmlMail(String from, String to, String subject, String content){

try {

MimeMessage message = javaMailSender.createMimeMessage();

MimeMessageHelper helper = new MimeMessageHelper(message, true);

helper.setTo(to);

helper.setFrom(from);

helper.setSubject(subject);

helper.setText(content, true);

javaMailSender.send(message);

} catch (MessagingException e) {

System.out.println("发送失败");

}

}

}

3,创建邮件模版

Thymeleaf模版默认位置是resources/templates,我们在该目录下创建一个邮件模版 mailtemplate.html,内容如下:

邮件
邮箱激活
您的注册信息是:
用户名
用户性别

4,开始测试

(1)首先我们创建一个 Controller来发送邮件,这次我们通过 Thymeleaf模版渲染出邮件正文内容:

注意:不同于 FreeMarker,Thymeleaf提供了 TemplateEngine来对模版进行渲染,通过 Context构造模版中变量需要的值,这种方式比 FreeMarker构建邮件模版更加方便。

@RestController

public class HelloController {

@Autowired

MailService mailService;

@Autowired

TemplateEngine templateEngine;

@GetMapping("/hello")

public void hello() {

// 通过 Context 构造模版中变量需要的值

Context ctx = new Context();

ctx.setVariable("username", "hangge");

ctx.setVariable("sex", "男");

// 使用TemplateEngine 对模版进行渲染

String mail = templateEngine.process("mailtemplate.html", ctx);

// 将渲染结果通过邮件发出

mailService.sendHtmlMail("380552225@qq.com",

"yuhang0385@163.com",

"这个是邮件的标题",

mail);

}

}

(2)启动项目,访问 http://localhost:8080/hello 地址发送一个邮件,可以发现目标邮箱可以成功收到邮件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值