你有没有觉得邮件发送人固定配置在yml文件中是不妥当的呢(SpringBoot|你有没有觉得邮件发送人固定配置在yml文件中是不妥当的呢?SpringBoot 动态设置邮件发送人)
明月当天,不知道你有没有思念的人
前言
之前其实已经写过SpringBoot异步发送邮件,但是今天在一个小项目中要用到发送邮件时,我突然觉得邮件发送人只有一个,并且固定写在yml文件中,就是非常的不妥当,就想着怎么整成一个动态的。
在写之前已经翻过很多博客了,该踩的坑都踩的差不多了,我是实现之后写的文章,有问题大家可以一起交流。
小声bb(对于CSDN我真的逐渐变得麻木了,简称CV大法现场,虽然我本人也是CSDN的一名小小博主,也是资深用户,对于文章的这块很多时候真的没法说,除了能说加油也没有了吧)。
于是就有了下面这篇文章啦....
一、需求分析
默认大家都已经会 SpringBoot 集成 邮件发送啦哈,不行的,点一下上文的链接啦。
我先说说我想要达到什么样的效果:
- 邮件发送人可以是多个,yml文件中是兜底配置(即数据库中没有一个可用时,使用yml文件中配置的邮件发送人)
- 项目启动后,我也可以临时增加邮件发送人,或者禁用掉某个邮件发送人(操作完也无需重启项目即可生效)
- 发送邮件内容为html;另外异步发送邮件(可有可无,大家都会)
JavaSendMailImpl
这个类重新初始化即可。这个地方没啥可讲的,就是不让框架给我们自动配置,我们手动来即可。二、详细步骤 2.1、编码
1)yml配置文件
spring:
mail:
host: smtp.163.com
username: nxxxxxx@163.com
password: IXXXXXXXXXN(开启允许第三方登录后的授权码)
default-encoding: utf-8
protocol: smtps
properties:
mail:
smtp:
port: 465
auth: true
starttls:
enable: true
required: true
注意
:关于邮件的协议protocol:smtps
的配置,我最开始也是配置的smtp
,我当时报的错误是一个no provider for smtp错误
,我之前也写过一直用的是这个smtp协议
,但是报了这个错误,我就去搜索,然后找到有篇博客说,SMTPS协议所以实际上我们使用的配置应该是
SMTPS
(SMTP-over-SSL)是SMTP
协议基于SSL
安全协议之上的一种变种协议,它继承了SSL
安全协议的非对称加密的高度安全可靠性,可防止邮件泄露。SMTPS
和SMTP
协议一样,也是用来发送邮件的,只是更安全些,防止邮件被黑客截取泄密,还可实现邮件发送者抗抵赖功能。防止发送者发送之后删除已发邮件,拒不承认发送过这样一份邮件。端口465和587便是基于SMTPS
协议开放的。
465端口(SMTPS)
︰它是SMTPS
协议服务所使用的其中一个端口,它在邮件的传输过程中是加密传输(SSL/TLS)
的,相比于SMTP
协议攻击者无法获得邮件内容,邮件在一开始就被保护了起来。
stmps
。另外建个
properties
资源类 与 配置文件一一对应/**
* @author crush
*/
@Data
@Component
@ConfigurationProperties(prefix = "spring.mail")
public class MailProperties {
/*** 用户名 */
private String username;
/** * 授权码 */
private String password;
/** * host */
private String host;
/** * 端口 */
private Integer port;
/*** 协议 */
private String protocol;
/** * 默认编码*/
private String defaultEncoding;
}
2.2、建表
根据yml文件,我们大致知道了要建立张什么样的数据表了哈。
文章图片
这些大家都可以自定义哈,根据自己需求来建哈。
根据数据表建一个pojo类。
/**
* @Author: crush
* @Date: 2021-11-26 18:28
* version 1.0
*/
@Data
@Accessors(chain = true)
@TableName("tb_email")
public class MailPO {private String emailHost;
private String emailUsername;
private String emailPassword;
private Integer emailPort=465;
/** * 协议 */
private String protocol="smtps";
/** * 默认编码 */
private String defaultEncoding="utf-8";
/**
* 使用状态,1:正在使用,2:禁用,3:停用
* TODO 后期应该更改为 枚举类来进行实现
*/
private Integer state=1;
/** * 创建时间 */
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;
/*** 修改时间 */
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTimeupdateTime;
}
如果不是用mybatis-plus 可以把创建时间和修改时间去掉
@TableField(fill = FieldFill.INSERT)
是Mybatis-plus中的注解。另外我主键是设置了自增,所以就空了。至于返回的类我用的vo包下的。2.3、mapper、service层
@Repository
public interface MailMapper extends BaseMapper {
}
service
/**
* @Author: crush
* @Date: 2021-11-26 15:55
* version 1.0
*/
public interface MailService {void send(MailDTO mailDTO);
boolean addMailPerson(MailPO mailPO);
}
impl
import cn.hutool.core.util.IdUtil;
/**
* @author crush
* 邮箱发送实现类
*/
@Service
public class MailServiceImpl implements MailService {@Autowired
MailSenderConfig senderConfig;
@Autowired
MailProperties mailProperties;
@Autowired
MailMapper mailMapper;
// 这里之前配置了一个线程池,上文的链接中有,就不说了哈
// @Async("taskExecutor")
@Override
public void send(MailDTO mailDTO) {
String context = "\n" +
"\n" +
"\n" +
"\n" +
"\n" +
"\n" +
"xxxx邮件 - 锐客网 \n" +
"\n" +
"body {\n" +
"margin: 0;
\n" +
"padding: 0;
\n" +
"}\n" +
"\n" +
".email {\n" +
"position: relative;
\n" +
"width: 100%;
\n" +
"/* background-color: rgba(0, 0, 0, 1);
*/\n" +
"}\n" +
"\n" +
".main {\n" +
"left: 0;
\n" +
"right: 0;
\n" +
"margin: auto;
\n" +
"width: 80%;
\n" +
"max-width: 800px;
\n" +
"box-sizing: content-box;
\n" +
"}\n" +
"\n" +
".main .title {\n" +
"/* color: white;
*/\n" +
"display: inline-flex;
\n" +
"align-items: center;
\n" +
"}\n" +
"\n" +
".main .title span {\n" +
"margin: 0 10px;
\n" +
"}\n" +
"\n" +
".main table {\n" +
"width: 100%;
\n" +
"}\n" +
"\n" +
".main table tbody td {\n" +
"/* background-color: white;
*/\n" +
"padding: 20px;
\n" +
"text-align: left;
\n" +
"border-bottom: 1px solid rgb(161, 161, 161);
\n" +
"}\n" +
"\n" +
"tfoot td p {\n" +
"color: rgb(161, 161, 161);
\n" +
"font-size: 13px;
\n" +
"}\n" +
"\n" +
"a {\n" +
"color: rgb(161, 161, 161);
\n" +
"text-decoration: none;
\n" +
"}\n" +
"\n" +
"a:hover {\n" +
"border-bottom: 1px solid rgb(161, 161, 161);
\n" +
"}\n" +
"\n" +
"\n" +
"\n" +
"\n" +
"\n" +
"\n" +
"\n" +
"\n" +
"\n" +
"\n" +
"\n" +
"
文章图片
模板大致就是如下状态吧。
文章图片
?
是添加进去的
文章图片
多点了一次哈。
文章图片
我再点击发送邮件,因为是随机数的方式,我们多测试几次,总会用到这个错误的邮件发送人的,用到了就表示我们已经成功啦哈。
【你有没有觉得邮件发送人固定配置在yml文件中是不妥当的呢(SpringBoot|你有没有觉得邮件发送人固定配置在yml文件中是不妥当的呢?SpringBoot 动态设置邮件发送人)】因为添加的随便输入的,肯定是失败的哈。但是可以确定我们用到了我们项目启动后加入的邮件发送人啦。 你们可以填入争取的试一试。
文章图片
结束了结束啦。
没写小demo,没啥源码。
后语
大家一起加油!!!如若文章中有不足之处,请大家及时指出,在此郑重感谢。
纸上得来终觉浅,绝知此事要躬行。
大家好,我是博主宁在春
:主页
一名喜欢文艺却踏上编程这条道路的小青年。
希望:我们,待别日相见时,都已有所成
。
难得回到后端肝篇文,又拾起后端了,之后还会接着写Vue的,肯定会把专栏写完的。
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 热闹中的孤独
- 放屁有这三个特征的,请注意啦!这说明你的身体毒素太多
- 尽力
- 你到家了吗
- 爱就是希望你好好活着
- 为什么你的路演总会超时()
- 死结。
- 跌跌撞撞奔向你|跌跌撞撞奔向你 第四章(你补英语,我补物理)
- 奔向你的城市
- JS中的各种宽高度定义及其应用