申请一个邮箱账号 ,我这里使用的是网易邮箱
修改网易邮箱的设置 进去之后默认是关闭的需要开启他 POP3/SMTP服务
开启的时候有一个授权码,记录好他,下面要用到
有的邮箱设置可能需要保存,记得保存修改
在pom.xml中引入依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> <version>2.3.1.RELEASE</version> </dependency>
编写application.yml文件
spring: mail: host: smtp.163.com # 你使用的邮箱的域名 port: 465 # 邮箱的端口一般都是465 不知道可以查一下 username: XXXX@163.com # 你的邮箱账号 password: XXXXX # 上面开启的时候保存的授权码 protocol: smtp # 发送邮件的协议 properties.mail.smtp.ssl.enable: true #开启SSL安全连接
发送邮件的客户端类
@Component //这个类会别spring托管,在这个项目中所有地方都可以使用,只需要注入一下即可 public class MailClient { private static final Logger logger = LoggerFactory.getLogger(MailClient.class); /** * 发送邮件的核心组件 */ @Autowired private JavaMailSender mailSender; /** * 邮件发件人 */ @Value("${spring.mail.username}") //这里是从application.yml中取得值springboot 中可以使用@Value 来获取到yml文件中的值 spring.mail.username 就是他的key private String from; /** 发送邮件的方法 * @param to 发送给谁 * @param subject 邮件主题 * @param content 邮件内容 */ public void sendMail(String to,String subject,String content){ try { //创建一个发送邮件的类 MimeMessage message = mailSender.createMimeMessage(); //使用发送邮件的帮助类 MimeMessageHelper helper = new MimeMessageHelper(message); //发送人 helper.setFrom(from); //接收人 helper.setTo(to); //发送的主题 helper.setSubject(subject); //以html的形式的邮件内容 helper.setText(content,true); //发送邮件 mailSender.send(helper.getMimeMessage()); } catch (MessagingException e) { logger.error("发送邮件失败"+e.getMessage()); } } }
好了现在发送邮件的功能已经写完了,现在测试一下吧
新建一个测试类
@Autowired private MailClient mailClient; //将刚才写好的邮件发送的客户端注入进来 @Test //测试发送一个普通文本的邮件 public void sendMailText(){ mailClient.sendMail("你要发送邮件的邮箱","测试","我在测试啊"); }
是不是很神奇,收到了邮件了,那么接下来我们来试试发送一个html的邮件看看
在templates新建一个mail 文件夹,建一个名为demo.html的文件
<!DOCTYPE html> <html lang="en" xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>邮件发送例子</title> </head> <body> <p>欢迎 <span style="color: red" th:text="${username}"></span>使用我的邮箱!</p> </body> </html>
回到我们的测试类
import org.thymeleaf.TemplateEngine; import org.thymeleaf.context.Context; @Autowired private MailClient mailClient; //模板引擎 这是springboot 已经将thymeleaf封装成了一个对象,可以直接使用他``` @Autowired private TemplateEngine templateEngine; @Test public void sendHTMLMail(){ Context context = new Context(); //在这里我们是将html要获取的username传进去 context.setVariable("username","小王"); String content = templateEngine.process("/mail/demo", context);//指定他的html路径,并且将我们设置的一个信息给他 System.out.println(content); //在控制台打印一下看看 mailClient.sendMail("你要发送的邮箱","HTML发送",content); //执行发送邮件的方法 }
在这里一定要注意不要导错包了,我们用的是 thymeleaf
的,所以要到 thymeleaf
的包
在检查一下有没有收到邮件
收到邮件了
好了,现在spring boot 发送邮件功能已经完成了,快去发邮件把!