👨🎓作者:bug菌
✏️博客:CSDN、掘金、infoQ、51CTO等
🎉简介:CSDN博客专家,C站历届博客之星Top50,掘金/InfoQ/51CTO等社区优质创作者,全网合计8w粉+,对一切技术感兴趣,重心偏Java方向;硬核公众号「 猿圈奇妙屋」,欢迎小伙伴们的加入,一起秃头,一起变强。
..
✍️温馨提醒:本文字数:1999字, 阅读完需:约 5 分钟
嗨,家人们,我是bug菌呀,我又来啦。今天我们来聊点什么咧,OK,接着为大家更《springboot零基础入门教学》系列文章吧。希望能帮助更多的初学者们快速入门!
小伙伴们在批阅文章的过程中如果觉得文章对您有一丝丝帮助,还请别吝啬您手里的赞呀,大胆的把文章点亮👍吧,您的点赞三连(收藏⭐+关注👨🎓+留言📃)就是对bug菌我创作道路上最好的鼓励与支持😘。时光不弃🏃🏻♀️,创作不停💕,加油☘️
一、前言🔥
环境说明:Windows10 + Idea2021.3.2 + Jdk1.8 + SpringBoot 2.3.1.RELEASE
首先我们先来回顾上期内容:我们是把所有需要配置的准备工作都搞定了,对吧!一是qq邮箱校验码的获取,二 是pom依赖引入,三是yaml文件配置。如果有小伙伴直接中途插入,还请麻烦先去看准备篇《Springboot系列(十二):如何代码实现发送邮件提醒(准备篇)》,好伐?要不然直接开启这期跟着敲,肯定是会踩坑的。
ok!咱们开始今天的主题吧!如何实现简单邮件发送?咱们接着往下看。
二、正文
1、首先我们先来定义一个builder,用来专门写邮件发送等相关的业务代码块。
/**
* @author luoYong
* @version 1.0
* @date 2022/1/18 9:36
*/
@Component
public class SendMailBuild {
@Autowired
private JavaMailSender javaMailSender;
@Autowired
private SpringTemplateEngine templateEngine; //创建模板引擎
//定义方法
}
其实这么做也是为了方便日后代码维护,如果是直接进行邮件内容的赋值发送,那假如邮件发送字段增加或者字段更改,那你就只要去动这段发送方法了,基本低耦合的思想就跟你没啥关系了,再者,基本一个模块都会讲究封装、代码尽量能封装就封装,能复用就复用,前往别造成冗余代码,提高代码质量是我们在日常务必要注意的东西。这样解释就很通俗易懂了吧。
接下来,我们再定义一个邮件消息体,用来存放发送邮件内容。
package com.example.demo.component.mail.model;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.util.Date;
/**
* 基本邮件参数
*
* @author luoYong
* @version 1.0
* @date 2022/1/18 9:37
*/
@ApiModel(value = "基本邮件参数",description = "基本邮件参数")
public class Mail {
@ApiModelProperty("发件人邮箱账号")
private String sendMailAccount;
@ApiModelProperty("收件人邮箱账号")
private String acceptMailAccount;
@ApiModelProperty("邮件主题")
private String theme;
@ApiModelProperty("邮件内容")
private String mailText;
@ApiModelProperty("发送时间")
private Date sendTime = new Date();
public String getTheme() {
return theme;
}
public void setTheme(String theme) {
this.theme = theme;
}
public String getSendMailAccount() {
return sendMailAccount;
}
public void setSendMailAccount(String sendMailAccount) {
this.sendMailAccount = sendMailAccount;
}
public String getAcceptMailAccount() {
return acceptMailAccount;
}
public void setAcceptMailAccount(String acceptMailAccount) {
this.acceptMailAccount = acceptMailAccount;
}
public Date getSendTime() {
return sendTime;
}
public void setSendTime(Date sendTime) {
this.sendTime = sendTime;
}
public String getMailText() {
return mailText;
}
public void setMailText(String mailText) {
this.mailText = mailText;
}
}
接下来,咱们就先来写一个发送邮件的方法,先实现能发送邮件功能先。
构建邮件内容体,需要定义收发邮件人邮箱,邮件主题,邮件正文及邮件通知时间。
先看如下代码:
/**
* 发送简单邮件
*/
public void sendSimpleMail(Mail model) {
//构建邮件内容对象
SimpleMailMessage msg = new SimpleMailMessage();
//邮件发送者
msg.setFrom(model.getSendMailAccount());
//邮件接收者
msg.setTo(model.getAcceptMailAccount());
//邮件主题
msg.setSubject(model.getTheme());
//邮件正文
msg.setText(model.getMailText());
//邮件发送时间
msg.setSentDate(model.getSendTime());
//邮件发送
javaMailSender.send(msg);
}
代码解读:
由于Spring Boot的starter模块提供了自动化配置,在引入了spring-boot-starter-mail依赖之后,会根据配置文件中的内容去创建JavaMailSender实例,因此我们可以直接在需要使用的地方直接@Autowired来引入 JavaMailSender 邮件发送对象。即,最后你直接通过
javaMailSender
的send()
方法即可实现邮件发送。
如上发送邮件的方法就已经定义好了,接着我们就测试一下是否邮件能发送成功吧?
一般测试方法,建议是开个test类进行测试,比如我就字节写个test case进行测试一下。把邮件发送的前置条件都自己手动定义好,最后再调用方法
package com.example.demo.component.build;
import com.example.demo.component.mail.build.SendMailBuild;
import com.example.demo.component.mail.model.*;
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import javax.mail.MessagingException;import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
class MailTest {
@Autowired
private SendMailBuild sendMailBuild;
/**
* 发送简单邮件
*/
@Test
void testSendSimpleMail() {
Mail mailModel = new Mail();
mailModel.setTheme("title:这是一封测试邮件哈!");// 设置邮件主题
mailModel.setSendMailAccount("xxx@foxmail.com"); // 设置邮箱发送者
mailModel.setAcceptMailAccount("xxx@foxmail.com"); // 设置邮件接收者,可以有多个接收者
mailModel.setSendTime(new Date()); // 设置邮件发送日期
mailModel.setMailText("text:这是测试邮件的正文内容:我是testMail"); // 设置邮件的正文
sendMailBuild.sendSimpleMail(mailModel);
}
}
那怎么验证邮件算真正成功发送呢?
项目代码没有任何报错信息打印
邮箱收到刚发的邮件
邮件内容由你发送内容一致
以上都满足,即邮件发送功能就算真正成功了。
接下来,就是见证奇迹的时刻到了,咱们运行testcase走起!
完蛋!报错了啊!起不来,咋整,解决呐。这不是提示缺少ognl 的 jar 包嘛,那我们就给他导入一个试试。
如下是ognl的依赖:
<dependency>
<groupId>ognl</groupId>
<artifactId>ognl</artifactId>
<version>3.1.12</version>
</dependency>
我们再测试运行一下,哎嘿,解决了,果然是缺ognl依赖的问题。小插曲,问题不大,我们继续测试,查看下邮件是否发送成功?
微信倒是先提醒了,接收到邮件。证明邮件发送成功了,开心。
登录qq邮箱查看一下,看看是否正常内容显示。如下实际截图:
这不就是我们刚test 测试发送的邮件啊,内容也是自己定义好的,控制台也没有任何报错,这就表明,发送邮件功能没有问题,可以上线生产环境。
... ...
OK,以上就是这期所有的内容啦,如果有任何问题欢迎评论区批评指正,咱们下期见。
三、往期热门推荐
- springboot系列(一):如何创建springboot项目及启动
- springboot系列(二):yaml、properties两配置文件介绍及使用
- springboot系列(三):多环境切换,实例演示
- springboot系列(四):stater入门
- springboot系列(五):史上最最最全springboot常用注解
- springboot系列(六):mysql配置及数据库查询
- springboot系列(七):如何通过mybatis-plus实现接口增删改查
- springboot系列(八):mybatis-plus之条件构造器使用手册
- springboot系列(九):mybatis-plus之如何自定义sql
- springboot系列(十):mybatis之xml映射文件>、<=等特殊符号写法
- springboot系列(十一):实现多数据源配置,开箱即用
- springboot系列(十二):如何实现邮件发送提醒,你一定得会(准备篇)
- springboot系列(十三):如何实现发送普通邮件?你一定得会
- springboot系列(十四):如何实现发送图片、doc文档等附件邮件?你一定得会
- springboot系列(十五):如何实现静态邮件模板发送?你一定得会
- springboot系列(十六):如何实现发送邮件提醒,附完整源码
- springboot系列(十七):集成在线接口文档Swagger2
- springboot系列(十八):如何Windows安装redis?你玩过么
- springboot系列(十九):如何集成redis?不会我教你
- springboot系列(二十):如何通过redis实现手机号验证码功能
- ... ...
文末🔥
如果还想要学习更多,小伙伴们可关注bug菌专门为大家创建的专栏《springboot零基础入门教学》,从无到有,从零到一!希望能帮助到更多小伙伴们。
我是bug菌,一名想走👣出大山改变命运的程序猿。接下来的路还很长,都等待着我们去突破、去挑战。来吧,小伙伴们,我们一起加油!未来皆可期,fighting!
感谢认真读完我博客的铁子萌,在这里呢送给大家一句话,不管你是在职还是在读,绝对终身受用。
时刻警醒自己:
抱怨没有用,一切靠自己;
想要过更好的生活,那就要逼着自己变的更强,生活加油!!!