Spring Boot实现发送邮件

摘要:
注意:这篇博客是自己学完发送邮箱之后的一个小总结,不适合新手拿来学习用!
注意:这篇博客是自己学完发送邮箱之后的一个小总结,不适合新手拿来学习用!
分为三步:1.邮箱的设置:在你使用的邮箱内启用客户端SMTP服务2.Spring Email:导入jar包;邮箱参数配置;使用JavaMailSender发送邮件3.模板引擎:使用Thymeleaf发送HTML邮件

1.首先发送邮件需要一个代理发送邮件的邮箱,启用SMTP服务:

改图是使用的新浪邮箱:

Spring Boot实现发送邮件第1张

2.在pom.xml中导入jar包(spring-boot-starter-mail):

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-mail</artifactId>
            <version>2.1.5.RELEASE</version>
</dependency>

在项目的配置文件中配置代理发送邮件的邮箱属性:

1 spring.mail.host=smtp.sina.com
2 spring.mail.port=465
3 spring.mail.username=#这里填邮箱地址
4 spring.mail.password=#这里填邮箱的授权码5 spring.mail.protocol=smtps
6 spring.mail.properties.mail.smtp.ssl.enable=true

然后使用JavaMailSender发送邮件:

1 importorg.slf4j.Logger;
2 importorg.slf4j.LoggerFactory;
3 importorg.springframework.beans.factory.annotation.Autowired;
4 importorg.springframework.beans.factory.annotation.Value;
5 importorg.springframework.mail.javamail.JavaMailSender;
6 importorg.springframework.mail.javamail.MimeMessageHelper;
7 importorg.springframework.stereotype.Component;
8 
9 importjavax.mail.MessagingException;
10 importjavax.mail.internet.MimeMessage;
11 
12 @Component
13 public classMailClient {
14 
15     private static final Logger logger = LoggerFactory.getLogger(MailClient.class);
16 
17 @Autowired
18     privateJavaMailSender mailSender;
19 
20     @Value("${spring.mail.username}")
21     privateString from;
22 
23     public voidsendMail(String to,String subject,String content){
24         try{
25             MimeMessage message =mailSender.createMimeMessage();
26             MimeMessageHelper helper = newMimeMessageHelper(message);
27 helper.setFrom(from);
28 helper.setTo(to);
29 helper.setSubject(subject);
30             helper.setText(content,true);
31 mailSender.send(helper.getMimeMessage());
32         } catch(MessagingException e) {
33             logger.error("发送邮箱失败:"+e.getMessage());
34 }
35 
36 }
37 }

这里看JavaMailSender源码就可以发现这个JavaMailSender只做两件事情

创建MimeMessage还有发送邮件,如下代码:

1 public interface JavaMailSender extendsMailSender {
2 MimeMessage createMimeMessage();
3 
4     MimeMessage createMimeMessage(InputStream var1) throwsMailException;
5 
6     void send(MimeMessage var1) throwsMailException;
7 
8     void send(MimeMessage... var1) throwsMailException;
9 
10     void send(MimeMessagePreparator var1) throwsMailException;
11 
12     void send(MimeMessagePreparator... var1) throwsMailException;
13 }

使用JavaMailSender创建MimeMessage之后可以使用一个名为MimeMessageHelper的类来set参数,然后用JavaMailSender执行发送方法.

1 MimeMessage message =mailSender.createMimeMessage();
2 MimeMessageHelper helper = newMimeMessageHelper(message);
3 helper.setFrom(from);
4 helper.setTo(to);
5 helper.setSubject(subject);
6 helper.setText(content,true);
7 mailSender.send(helper.getMimeMessage());        

3.使用Thymeleaf模板引擎发送HTML格式的邮件

在templates下创建一个html:

1 <!DOCTYPE html>
2 <html lang="en"xmlns:th="http://www.thymeleaf.org">
3 <head>
4     <meta charset="UTF-8">
5     <title>邮箱示例</title>
6 </head>
7 <body>
8     <p>欢迎你,<span style="color: red"th:text="${username}"></span>!</p>
9 </body>
10 </html>

在测试类中测试:

1 importcom.nowcoder.community.util.MailClient;
2 importorg.junit.Test;
3 importorg.junit.runner.RunWith;
4 importorg.springframework.beans.factory.annotation.Autowired;
5 importorg.springframework.boot.test.context.SpringBootTest;
6 importorg.springframework.test.context.ContextConfiguration;
7 importorg.springframework.test.context.junit4.SpringRunner;
8 importorg.thymeleaf.TemplateEngine;
9 importorg.thymeleaf.context.Context;
10 
11 
12 @RunWith(SpringRunner.class)
13 @SpringBootTest
14 @ContextConfiguration(classes = CommunityApplication.class)
15 public classMailTests {
16 
17 @Autowired
18     privateMailClient mailClient;
19 
20 @Autowired
21     privateTemplateEngine templateEngine;
22 
23 @Test
24     public voidtestHtmlMail(){
25         Context context = newContext();
26         context.setVariable("username","sunday");
27 
28         String content = templateEngine.process("/mail/demo",context);
29 System.out.println(content);
30 
31         mailClient.sendMail("目标邮箱","邮件标题","邮件内容");
32 }
33 }

测试之后邮箱就会发送给目标邮箱!

免责声明:文章转载自《Spring Boot实现发送邮件》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇ORACLE SQLloader详细语法《JavaScript面向对象编程指南》下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Dubbo端口占用错误信息

SEVERE: Exception sending context initialized event to listener instance of class com.common.SysContextLoaderListener com.alibaba.dubbo.rpc.RpcException: Fail to start server(url...

ASP.NET Core:使用EntityFrameworkCore操作MySql来丰富仓储模块

概述 上一篇简单介绍了Dapper的基本用法,数据的存储为SqlServer。那么这一篇就记录一下使用EFCore来操作MySql的一些方式,这种模式比较适合那种一个项目中需要操作多种数据库的模式。不过因为微软官方并没有提供其驱动,所以我们需要借助MySql官方提供的驱动进行基本的增删改查操作。这样一来我们也可以将数据库迁移到Linux服务器上了,是不是很...

ASP.NET Core WebApi + EF Core(实现增删改查,使用Swagger测试API)

EF有两个不同版本,即Entity Framework Core 和 Entity Framework 6 EF Core:轻量级,可扩展,跨平台,参考EF6,全新平台,学习曲线小,引入一些新功能(批量删除) EF 6 :笨重,稳定,微软已经不打算进行大版本升级,无法跨平台。 如何实现EF Core功能 1、创建ASP.NET Core Web应用程序 ...

Android夜间模式的几种实现

一、直接修改widget颜色,这种方式实现起来最简单,但需要每个控件都去修改,太过复杂。例如: /** * 相应交互,修改控件颜色 * @param view */ public void onMethod1Click(View view) { if (view.getId() == R.id....

多个类用@feignclient标注同一个服务,出错问题:Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.Caused by: org.springframework.beans.factory.support.Bea..

如果标注了两个或以上类 @FeignClient 标注同一个 服务名称 调用方会主配置类启动会报错   测试类报错   java.lang.IllegalStateException: Failed to load ApplicationContext at org.springframework.test.context.cache.D...

Neo4J图库的基础介绍(二)-图库开发应用

我们接着Neo4J图库的基础介绍(一)继续介绍Neo4J图库。 JAX-RS是一个用于构建REST资源的Java API,可以使用JAX-RS注解装饰每一个扩展类,从而让服务器处理对应的http请求,附加注解可以用来控制请求和响应的格式,http头和URI模板的格式。 下面看一个服务器扩展实现的示例,允许客户端请求社交网络的两个成员之间的距离 @Pa...