服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Java教程 - SpringBoot 集成短信和邮件的配置示例详解

SpringBoot 集成短信和邮件的配置示例详解

2022-11-17 13:10tansci Java教程

这篇文章主要介绍了SpringBoot 集成短信和邮件的相关知识,项目中使用lombok插件和swagger依赖,无相关依赖的请自行修改,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下

准备工作

1、集成邮件

以QQ邮箱为例

在发送邮件之前,要开启POP3和SMTP协议,需要获得邮件服务器的授权码,获取授权码:

1、设置>账户

在账户的下面有一个开启SMTP协议的开关并进行密码验证:

SpringBoot 集成短信和邮件的配置示例详解

2、获取成功的授权码

SpringBoot 集成短信和邮件的配置示例详解

2、集成短信

以阿里云短信服务为例

1、登陆阿里云—>进入控制台—>开通短信服务

进入后根据提示开通短信服务即可。

2、充值

后期发短信测试需要,暂时可以跳过此步骤。

3、获取AccessKey和AccessSercet

文档使用指引: https://help.aliyun.com/document_detail/59210.html?spm=a2c6h.13066369.0.0.4b3516b4kN0052

4、API

OpenAPI地址: https://next.api.aliyun.com/document/Dysmsapi/2017-05-25/overview

依赖

1、邮件

?
1
2
3
4
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
</dependency>

2、短信

?
1
2
3
4
5
<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>dysmsapi20170525</artifactId>
    <version>2.0.4</version>
</dependency>

配置

1、配置邮箱基本信息

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
spring:
  mail:
    # 配置 SMTP 服务器地址
    host: smtp.qq.com
    # 发送者邮箱
    username: 742354529@qq.com
    # 配置密码,注意不是真正的密码,而是申请的授权码
    password: vjstfghblprwbdbd
    # 端口号465587
    port: 587
    # 默认的邮件编码为UTF-8
    default-encoding: UTF-8
    # 配置SSL 加密工厂
    properties:
      mail:
        smtp:
          socketFactoryClass: javax.net.ssl.SSLSocketFactory
        # 表示开启DEBUG模式,邮件发送过程的日志会在控制台打印出来
        debug: true

SMTP 服务器地址

  • 126邮箱SMTP服务器地址:smtp.126.com,端口号:465或者994
  • 2163邮箱SMTP服务器地址:smtp.163.com,端口号:465或者994
  • yeah邮箱SMTP服务器地址:smtp.yeah.net,端口号:465或者994
  • qq邮箱SMTP服务器地址:smtp.qq.com,端口号465或587*

2、短信配置

?
1
2
3
4
5
6
# 阿里云短信配置
sms:
  access-id: LTAI5tDP3SDQC9yvCguiiFDr
  access-key: EGSDQsLxCVS5dwjS8DCxmYQ124XySV
  sign-name:
  endpoint: dysmsapi.aliyuncs.com

编码

1、邮件

1.1、MailService.java

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
package com.tanersci.service;
 
import com.tanersci.dto.MailMessageDto;
import com.tanersci.vo.MessageVo;
/**
 * @ClassName: MailService.java
 * @ClassPath: com.tanersci.service.MailService.java
 * @Description: 邮件
 * @Author: tanyp
 * @Date: 2021/6/7 9:18
 **/
public interface MailService {
    /**
     * @MonthName: sendSimple
     * @Description: 普通邮件发送
     * @Author: tanyp
     * @Date: 2021/6/7 9:30
     * @Param: [dto]
     * @return: void
     **/
    MessageVo sendSimple(MailMessageDto dto);
     * @MonthName: sendAttachFile
     * @Description: 带附件的邮件
    MessageVo sendAttachFile(MailMessageDto dto);
     * @MonthName: sendImgRes
     * @Description: 带图片资源的邮件
    MessageVo sendImgRes(MailMessageDto dto);
}

1.2、MailServiceImpl.java

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
package com.tanersci.service.impl;
 
import com.alibaba.fastjson.JSON;
import com.tanersci.dto.MailMessageDto;
import com.tanersci.vo.MessageVo;
import com.tanersci.constant.Constants;
import com.tanersci.service.MailService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.FileSystemResource;
import org.springframework.mail.MailException;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.Objects;
/**
 * @ClassName: MailServiceImpl.java
 * @ClassPath: com.tanersci.service.impl.MailServiceImpl.java
 * @Description: 邮件
 * @Author: tanyp
 * @Date: 2021/6/7 9:18
 **/
@Slf4j
@Service
public class MailServiceImpl implements MailService {
    @Value("${spring.mail.username}")
    private String sender;
    @Autowired
    private JavaMailSender javaMailSender;
    /**
     * @MonthName: sendSimple
     * @Description: 普通邮件发送
     * @Author: tanyp
     * @Date: 2021/6/7 9:30
     * @Param: [dto]
     * @return: void
     **/
    @Override
    public MessageVo sendSimple(MailMessageDto dto) {
        try {
            log.info("=======普通邮件发送开始,请求参数:{}", JSON.toJSON(dto));
            // 构建一个邮件对象
            SimpleMailMessage message = new SimpleMailMessage();
            // 设置邮件主题
            message.setSubject(dto.getSubject());
            // 设置邮件发送者,这个跟application.yml中设置的要一致
            message.setFrom(sender);
            // 设置邮件接收者,可以有多个接收者,中间用逗号隔开,以下类似
            // message.setTo("10*****16@qq.com","12****32*qq.com");
            message.setTo(dto.getRecipient());
            // 设置邮件抄送人,可以有多个抄送人
            if (Objects.nonNull(dto.getCc())) {
                message.setCc(dto.getCc());
            }
            // 设置隐秘抄送人,可以有多个
            if (Objects.nonNull(dto.getBcc())) {
                message.setBcc(dto.getBcc());
            // 设置邮件发送日期
            message.setSentDate(new Date());
            // 设置邮件的正文
            message.setText(dto.getText());
            // 发送邮件
            javaMailSender.send(message);
            log.info("=======普通邮件发送结束");
            return MessageVo.builder().code(Constants.NEWS_SUCCESS_CODE).message(Constants.NEWS_SUCCESS_MESSAGE).build();
        } catch (MailException e) {
            log.error("====邮件====sendSimple=====异常:{}", e);
            return MessageVo.builder().code(Constants.NEWS_FAIL_CODE).message(Constants.NEWS_FAIL_MESSAGE).build();
        }
    }
     * @MonthName: sendAttachFile
     * @Description: 带附件的邮件
    public MessageVo sendAttachFile(MailMessageDto dto) {
            log.info("=======带附件的邮件开始,请求参数:{}", JSON.toJSON(dto));
            MimeMessage mimeMessage = javaMailSender.createMimeMessage();
            // true表示构建一个可以带附件的邮件对象
            MimeMessageHelper message = new MimeMessageHelper(mimeMessage, true);
            // 第一个参数是自定义的名称,后缀需要加上,第二个参数是文件的位置
            dto.getAttachments().forEach(file -> {
                try {
                    message.addAttachment(file.getName(), file);
                } catch (MessagingException e) {
                    log.error("=========邮件附件解析异常:{}", e);
                }
            });
            javaMailSender.send(mimeMessage);
            log.info("=======带附件的邮件结束");
        } catch (MessagingException e) {
            log.error("==========邮件====sendAttachFile=====异常:{}", e);
     * @MonthName: sendImgRes
     * @Description: 带图片资源的邮件
    public MessageVo sendImgRes(MailMessageDto dto) {
            log.info("=======带图片资源的邮件开始,请求参数:{}", JSON.toJSON(dto));
            // 第一个参数指的是html中占位符的名字,第二个参数就是文件的位置
                    message.addInline(file.getName(), new FileSystemResource(file));
                    log.error("=========邮件图片解析异常:{}", e);
            log.info("=======带图片资源的邮件结束");
            log.error("====邮件====sendImgRes=====异常:{}", e);
}

1.3、VO、DTO及常量类

MailMessageDto.java

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
package com.tanersci.dto;
 
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.File;
import java.io.Serializable;
import java.util.List;
/**
 * @ClassName: MailMessageDto.java
 * @ClassPath: com.tanersci.dto.MailMessageDto.java
 * @Description: 邮件消息
 * @Author: tanyp
 * @Date: 2021/6/7 9:20
 **/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@ApiModel(value = "邮件消息")
public class MailMessageDto implements Serializable {
    private static final long serialVersionUID = 5483400172436286831L;
    @ApiModelProperty(value = "邮件主题")
    private String subject;
    @ApiModelProperty(value = "接收者:可以有多个接收者,中间用逗号隔开")
    private String recipient;
    @ApiModelProperty(value = "抄送人:可以有多个抄送人,中间用逗号隔开")
    private String cc;
    @ApiModelProperty(value = "隐秘抄送人:可以有多个抄送人,中间用逗号隔开")
    private String bcc;
    @ApiModelProperty(value = "正文")
    private String text;
    @ApiModelProperty(value = "模板编码")
    private String code;
    @ApiModelProperty(value = "附件、图片")
    private List<File> attachments;
}

MessageVo.java

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
package com.tanersci.vo;
 
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
 * @ClassName: MessageVo.java
 * @ClassPath: com.tanersci.vo.MessageVo.java
 * @Description: 短信、邮件消息返回值
 * @Author: tanyp
 * @Date: 2021/6/7 11:35
 **/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@ApiModel(value = "短信、邮件消息返回值")
public class MessageVo implements Serializable {
    private static final long serialVersionUID = 5287525465339500144L;
    @ApiModelProperty(value = "状态码")
    private String code;
    @ApiModelProperty(value = "状态码的描述")
    private String message;
    @ApiModelProperty(value = "请求ID")
    private String requestId;
    @ApiModelProperty(value = "发送回执ID")
    private String bizId;
    @ApiModelProperty(value = "模板编码")
    private String templateCode;
}

Constants.java

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package com.tanersci.constant;
 
/**
 * @ClassName: Constants.java
 * @ClassPath: com.tanersci.constant.Constants.java
 * @Description: 常量
 * @Author: tanyp
 * @Date: 2021/5/22 15:54
 **/
public class Constants {
    /**
     * 消息发送状态码
     */
    public final static String NEWS_SUCCESS_CODE = "OK";
    public final static String NEWS_SUCCESS_MESSAGE = "发送成功";
    public final static String NEWS_FAIL_CODE = "FAIL";
    public final static String NEWS_FAIL_MESSAGE = "发送失败";
}

2、短信

2.1、SmsService.java

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
package com.tanersci.service;
 
import com.tanersci.dto.SmsMessageDto;
import com.tanersci.dto.SmsTemplateDto;
import com.tanersci.vo.MessageVo;
/**
 * @ClassName: SmsService.java
 * @ClassPath: com.tanersci.service.SmsService.java
 * @Description: 短信
 * @Author: tanyp
 * @Date: 2021/6/7 10:56
 **/
public interface SmsService {
    /**
     * @MonthName: send
     * @Description: 发短信
     * @Author: tanyp
     * @Date: 2021/6/7 14:50
     * @Param: [dto]
     * @return: com.tanersci.vo.MessageVo
     **/
    MessageVo send(SmsMessageDto dto);
     * @MonthName: addSmsTemplate
     * @Description: 申请短信模板
     * @Param: [template]
    MessageVo addSmsTemplate(SmsTemplateDto template);
     * @MonthName: deleteSmsTemplate
     * @Description: 删除短信模板
    MessageVo deleteSmsTemplate(SmsTemplateDto template);
     * @MonthName: modifySmsTemplate
     * @Description: 修改未通过审核的短信模板
    MessageVo modifySmsTemplate(SmsTemplateDto template);
     * @MonthName: querySmsTemplate
     * @Description: 查询短信模板的审核状态
    MessageVo querySmsTemplate(SmsTemplateDto template);
}

2.2、SmsServiceImpl.java

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
package com.tanersci.service.impl;
 
import com.alibaba.fastjson.JSON;
import com.aliyun.dysmsapi20170525.Client;
import com.aliyun.dysmsapi20170525.models.*;
import com.aliyun.teaopenapi.models.Config;
import com.tanersci.dto.SmsMessageDto;
import com.tanersci.dto.SmsTemplateDto;
import com.tanersci.vo.MessageVo;
import com.tanersci.config.SmsConfig;
import com.tanersci.constant.Constants;
import com.tanersci.service.SmsService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.Objects;
import java.util.UUID;
/**
 * @ClassName: SmsServiceImpl.java
 * @ClassPath: com.tanersci.service.impl.SmsServiceImpl.java
 * @Description: 短信
 * @Author: tanyp
 * @Date: 2021/6/7 10:57
 **/
@Slf4j
@Service
public class SmsServiceImpl implements SmsService {
    @Autowired
    private SmsConfig smsConfig;
    /**
     * @MonthName: createClient
     * @Description: SK初始化账号Client
     * @Author: tanyp
     * @Date: 2021/6/7 15:44
     * @Param: [accessId, accessKey, endpoint]
     * @return: com.aliyun.teaopenapi.Client
     **/
    public Client createClient() throws Exception {
        Config config = new Config();
        config.accessKeyId = smsConfig.getAccessId();
        config.accessKeySecret = smsConfig.getAccessKey();
        config.endpoint = smsConfig.getEndpoint();
        return new Client(config);
    }
     * @MonthName: send
     * @Description: 发短信
     * @Date2021/6/7 14:50
     * @Param: [dto]
     * @return: com.tanersci.vo.MessageVo
    @Override
    public MessageVo send(SmsMessageDto dto) {
        try {
            log.info("======发送短信开始,请求参数:{}", JSON.toJSON(dto));
            Client client = createClient();
            // 组装请求对象
            SendSmsRequest request = new SendSmsRequest();
            // 外部流水扩展字段
            String outId = UUID.randomUUID().toString();
            request.setOutId(outId);
            // 支持对多个手机号码发送短信,手机号码之间以英文逗号(,)分隔。上限为1000个手机号码。批量调用相对于单条调用及时性稍有延迟。
            request.setPhoneNumbers(dto.getPhone());
            // 短信签名名称
            request.setSignName(smsConfig.getSignName());
            // 短信模板ID
            request.setTemplateCode(dto.getTemplateCode());
            // 短信模板变量对应的实际值,JSON格式。如果JSON中需要带换行符,请参照标准的JSON协议处理。
            request.setTemplateParam(JSON.toJSONString(dto.getParam()));
            // 发送短信
            SendSmsResponse res = client.sendSms(request);
            
            MessageVo message = MessageVo.builder().build();
            if (Objects.equals(Constants.NEWS_SUCCESS_CODE, res.body.getCode())) {
                log.info("======发送短信成功,返回值:{}", JSON.toJSON(res.body));
                message.setCode(Constants.NEWS_SUCCESS_CODE);
                message.setMessage(Constants.NEWS_SUCCESS_MESSAGE);
            } else {
                log.info("======发送短信失败,返回值:{}", JSON.toJSON(res.body));
                message.setCode(Constants.NEWS_FAIL_CODE);
                message.setMessage(Constants.NEWS_FAIL_MESSAGE);
            }
            return message;
        } catch (Exception e) {
            log.error("======发送短信异常:{}", e.getMessage());
            e.printStackTrace();
            return MessageVo.builder().code(Constants.NEWS_FAIL_CODE).message(Constants.NEWS_FAIL_MESSAGE).build();
        }
     * @MonthName: addSmsTemplate
     * @Description: 申请短信模板
     * @Param: [template]
    public MessageVo addSmsTemplate(SmsTemplateDto template) {
            log.info("======申请短信模板,请求参数:{}", JSON.toJSON(template));
            AddSmsTemplateRequest request = new AddSmsTemplateRequest();
            request.setTemplateType(template.getTemplateType());
            request.setTemplateName(template.getTemplateName());
            request.setTemplateContent(template.getTemplateContent());
            request.setRemark(template.getRemark());
            AddSmsTemplateResponse res = client.addSmsTemplate(request);
            if (Objects.equals(TeamConstants.NEWS_SUCCESS_CODE, res.body.getCode())) {
                log.info("======申请短信模板,返回值:{}", JSON.toJSON(res.body));
                return MessageVo.builder()
                        .code(Constants.NEWS_SUCCESS_CODE)
                        .message(Constants.NEWS_SUCCESS_MESSAGE)
                        .templateCode(res.getBody().templateCode)
                        .build();
                return MessageVo.builder().code(Constants.NEWS_FAIL_CODE).message(Constants.NEWS_FAIL_MESSAGE).build();
            log.error("======申请短信模板,异常:{}", e.getMessage());
     * @MonthName: deleteSmsTemplate
     * @Description: 删除短信模板
    public MessageVo deleteSmsTemplate(SmsTemplateDto template) {
            log.info("======删除短信模板,请求参数:{}", JSON.toJSON(template));
            DeleteSmsTemplateRequest request = new DeleteSmsTemplateRequest();
            request.setTemplateCode(template.getTemplateCode());
            DeleteSmsTemplateResponse res = client.deleteSmsTemplate(request);
                log.info("======删除短信模板,返回值:{}", JSON.toJSON(res.body));
                return MessageVo.builder().code(Constants.NEWS_SUCCESS_CODE).message(Constants.NEWS_SUCCESS_MESSAGE).build();
            log.error("======删除短信模板,异常:{}", e);
     * @MonthName: modifySmsTemplate
     * @Description: 修改未通过审核的短信模板
    public MessageVo modifySmsTemplate(SmsTemplateDto template) {
            log.info("======修改未通过审核的短信模板,请求参数:{}", JSON.toJSON(template));
            ModifySmsTemplateRequest request = new ModifySmsTemplateRequest();
            ModifySmsTemplateResponse res = client.modifySmsTemplate(request);
                log.info("======修改未通过审核的短信模板,返回值:{}", JSON.toJSON(res.body));
            log.error("======修改未通过审核的短信模板,异常:{}", e.getMessage());
     * @MonthName: querySmsTemplate
     * @Description: 查询短信模板的审核状态
    public MessageVo querySmsTemplate(SmsTemplateDto template) {
            log.info("======查询短信模板的审核状态,请求参数:{}", JSON.toJSON(template));
            QuerySmsTemplateRequest request = new QuerySmsTemplateRequest();
            QuerySmsTemplateResponse res = client.querySmsTemplate(request);
                log.info("======查询短信模板的审核状态,返回值:{}", JSON.toJSON(res.body));
            log.error("======查询短信模板的审核状态,异常:{}", e.getMessage());
}

2.3、SmsConfig.java

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package com.tanersci.config;
 
import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;
/**
 * @ClassName: SmsConfig.java
 * @ClassPath: com.tanersci.config.SmsConfig.java
 * @Description: 短信配置
 * @Author: tanyp
 * @Date: 2021/6/7 16:41
 **/
@Data
@Component
public class SmsConfig {
    @Value("${sms.access-id}")
    private String accessId;
    @Value("${sms.access-key}")
    private String accessKey;
    @Value("${sms.sign-name}")
    private String signName;
    @Value("${sms.endpoint}")
    private String endpoint;
}

2.4、VO、DTO类

MessageVo 同用邮件的

MailMessageDto.java

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
package com.tanersci.dto;
 
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
 * @ClassName: MailMessageDto.java
 * @ClassPath: com.tanersci.dto.SmsMessageDto.java
 * @Description: 短信
 * @Author: tanyp
 * @Date: 2021/6/7 9:20
 **/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@ApiModel(value = "短信消息")
public class SmsMessageDto implements Serializable {
    private static final long serialVersionUID = 3427970548460798908L;
    @ApiModelProperty(value = "手机号,多个以逗号隔开")
    private String phone;
    @ApiModelProperty(value = "模板编码")
    private String templateCode;
    @ApiModelProperty(value = "模板参数")
    private TemplateParamDto param;
    private String code;
}

SmsTemplate.java

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
package com.tanersci.dto;
 
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
 * @ClassName: SmsTemplate.java
 * @ClassPath: com.tanersci.dto.SmsTemplateDto.java
 * @Description: 短信模板
 * @Author: tanyp
 * @Date: 2021/6/7 15:02
 **/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class SmsTemplateDto implements Serializable {
    private static final long serialVersionUID = -8909531614461840038L;
    /**
     * 模板类型:0:验证码,1:短信通知,2:推广短信,3:国际/港澳台消息。
     */
    private Integer templateType;
     * 模板名称,长度为1~30个字符
    private String templateName;
     * 模板内容,长度为1~500个字符
    private String templateContent;
     * 短信模板CODE
    private String templateCode;
     * 短信模板申请说明。请在申请说明中描述您的业务使用场景,长度为1~100个字符
    private String remark;
}

注意

项目中使用lombok插件和swagger依赖,无相关依赖的请自行修改。

到此这篇关于SpringBoot 集成短信和邮件的文章就介绍到这了,更多相关SpringBoot 集成短信和邮件内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://www.cnblogs.com/typ1805/p/14871609.html

延伸 · 阅读

精彩推荐
  • Java教程Java线程通信详解

    Java线程通信详解

    本篇文章主要介绍了Java线程通信问题,线程通信用来保证线程协调运行,有需要的朋友可以了解一下。...

    赵杰A-1241972020-06-28
  • Java教程java实现简单的给sql语句赋值的示例

    java实现简单的给sql语句赋值的示例

    这篇文章主要介绍了java实现简单的给sql语句赋值的示例,需要的朋友可以参考下 ...

    Java教程网4712019-11-22
  • Java教程Java中常见的5种WEB服务器介绍

    Java中常见的5种WEB服务器介绍

    这篇文章主要介绍了Java中常见的5种WEB服务器介绍,它们分别是Tomcat、Resin、JBoss、WebSphere、WebLogic,需要的朋友可以参考下 ...

    junjie3972019-11-24
  • Java教程spring boot项目fat jar瘦身的实现

    spring boot项目fat jar瘦身的实现

    这篇文章主要介绍了spring boot项目fat jar瘦身的实现,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    节奏358392021-05-08
  • Java教程Java 超详细带你掌握矩阵的运算

    Java 超详细带你掌握矩阵的运算

    在学习机器学习算法时,发现运用java 来实现有些算法代码时,会有很大困难,其中有一点就是 java 本身并没有矩阵运算的 api,所以进行要实现矩阵运算就...

    跟着耀杨学编程6722022-10-29
  • Java教程spring中ioc是什么

    spring中ioc是什么

    IoC是一种让服务消费者不直接依赖于服务提供者的组件设计方式,是一种减少类与类之间依赖的设计原则。下面通过本文给大家分享spring中ioc的概念,感兴...

    动力节点4282021-01-04
  • Java教程Java实现简单树结构

    Java实现简单树结构

    这篇文章主要为大家详细介绍了Java实现简单树结构的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    Java开发-搁浅3242020-07-26
  • Java教程JavaScript中你不知道的函数

    JavaScript中你不知道的函数

    在JavaScript中,对于函数的声明有两种表达形式, 声明式 和 表达式 ,至于其他函数(如立即执行函数,箭头函数等)都是基于这两种形式衍生的。...

    掘金2462020-11-06