从零搭建自己的SpringBoot后台框架(十七)

释放双眼,带上耳机,听听看~!

一:添加mail依赖


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

二:添加邮件配置

打开application.properties

添加如下配置


1
2
3
4
5
6
7
8
9
1spring.mail.protocol=smtp
2spring.mail.host=smtp.chuchenkj.xyz  #这里换成自己的邮箱类型   例如qq邮箱就写smtp.qq.com
3spring.mail.port=25
4spring.mail.smtpAuth=true
5spring.mail.smtpStarttlsEnable=true
6spring.mail.smtpSslTrust=smtp.chuchenkj.xyz   #这里换成自己的邮箱类型   例如qq邮箱就写smtp.qq.com
7spring.mail.username=chuchenkf@chuchenkj.xyz  #这里换成自己的邮箱账号
8spring.mail.password=****************         #这里换成自己的邮箱密码或授权码   授权码获取可以百度
9

三:创建邮件实体类


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
1package com.example.demo.model;
2
3import java.util.Map;
4
5public class Mail {
6
7    /**
8     * 发给多个人
9     */
10    private String[] to;
11
12    /**
13     * 抄送
14     */
15    private String[] cc;
16
17    /**
18     * 邮件标题
19     */
20    private String subject;
21
22    /**
23     * 邮件内容   简单文本 和附件邮件必填  其余的不需要
24     */
25    private String text;
26
27    /**
28     * 模板需要的数据   发送模板邮件必填
29     */
30    private Map<String,String> templateModel;
31
32    /**
33     * 选用哪个模板 发送模板邮件必填
34     */
35    private String templateName;
36
37    public String[] getTo() {
38        return to;
39    }
40
41    public void setTo(String[] to) {
42        this.to = to;
43    }
44
45    public String getSubject() {
46        return subject;
47    }
48
49    public void setSubject(String subject) {
50        this.subject = subject;
51    }
52
53    public String getText() {
54        return text;
55    }
56
57    public void setText(String text) {
58        this.text = text;
59    }
60
61    public Map<String, String> getTemplateModel() {
62        return templateModel;
63    }
64
65    public void setTemplateModel(Map<String, String> templateModel) {
66        this.templateModel = templateModel;
67    }
68
69    public String getTemplateName() {
70        return templateName;
71    }
72
73    public void setTemplateName(String templateName) {
74        this.templateName = templateName;
75    }
76
77    public String[] getCc() {
78        return cc;
79    }
80
81    public void setCc(String[] cc) {
82        this.cc = cc;
83    }
84}
85

四:创建邮件常量类

创建core→constant→MailConstant


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
1package com.example.demo.core.constant;
2
3public class MailConstant {
4
5    /**
6     * 注册的模板名称
7     */
8    public static final String RETGISTEREMPLATE = "register";
9
10    /**
11     * 模板存放的路径
12     */
13    public static final String TEMPLATEPATH = "src/test/java/resources/template/mail";
14}
15
16

五:创建邮件业务类

MailService


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
1package com.example.demo.service;
2
3import com.example.demo.model.Mail;
4
5import javax.servlet.http.HttpServletRequest;
6
7public interface MailService {
8
9    /**
10     * 发送简单邮件
11     * @param mail
12     */
13    void sendSimpleMail(Mail mail);
14
15    /**
16     * 发送带附件的邮件
17     * @param mail
18     * @param request
19     */
20    void sendAttachmentsMail(Mail mail, HttpServletRequest request);
21
22    /**
23     * 发送静态资源  一张照片
24     * @param mail
25     * @throws Exception
26     */
27    void sendInlineMail(Mail mail) throws Exception;
28
29    /**
30     * 发送模板邮件
31     * @param mail
32     */
33    void sendTemplateMail(Mail mail);
34}
35
36

MailServiceImpl


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
135
136
137
138
139
140
141
142
1package com.example.demo.service.impl;
2
3import com.example.demo.core.constant.MailConstant;
4import com.example.demo.core.utils.UploadActionUtil;
5import com.example.demo.model.Mail;
6import com.example.demo.service.MailService;
7import freemarker.template.Template;
8import freemarker.template.TemplateExceptionHandler;
9import org.slf4j.Logger;
10import org.slf4j.LoggerFactory;
11import org.springframework.beans.factory.annotation.Qualifier;
12import org.springframework.beans.factory.annotation.Value;
13import org.springframework.core.io.FileSystemResource;
14import org.springframework.mail.SimpleMailMessage;
15import org.springframework.mail.javamail.JavaMailSender;
16import org.springframework.mail.javamail.MimeMessageHelper;
17import org.springframework.stereotype.Service;
18import org.springframework.ui.freemarker.FreeMarkerTemplateUtils;
19import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer;
20
21import javax.annotation.Resource;
22import javax.mail.internet.MimeMessage;
23import javax.servlet.http.HttpServletRequest;
24import java.io.File;
25import java.io.IOException;
26import java.util.List;
27
28@Service
29public class MailServiceImpl implements MailService {
30
31    private static final Logger logger = LoggerFactory.getLogger(MailServiceImpl.class);
32
33    @Resource
34    @Qualifier("javaMailSender")
35    private JavaMailSender mailSender;
36
37    @Value("${spring.mail.username}")
38    private String from;
39
40    @Resource
41    private FreeMarkerConfigurer freeMarkerConfigurer;
42
43    /**
44     * 发送简单邮件
45     */
46    @Override
47    public void sendSimpleMail(Mail mail){
48        SimpleMailMessage message = new SimpleMailMessage();
49        message.setFrom(from);
50        message.setTo(mail.getTo());
51        message.setSubject(mail.getSubject());
52        message.setText(mail.getText());
53        message.setCc(mail.getCc());
54        mailSender.send(message);
55    }
56
57    /**
58     * 发送附件
59     *
60     * @throws Exception
61     */
62    @Override
63    public void sendAttachmentsMail(Mail mail,HttpServletRequest request){
64        try{
65            MimeMessage mimeMessage = mailSender.createMimeMessage();
66            MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
67            helper.setFrom(from);
68            helper.setTo(mail.getTo());
69            helper.setSubject(mail.getSubject());
70            helper.setText(mail.getText());
71            List<String> list = UploadActionUtil.uploadFile(request);
72            for (int i = 1,length = list.size();i<=length;i++) {
73                String fileName = list.get(i-1);
74                String fileTyps = fileName.substring(fileName.lastIndexOf("."));
75                FileSystemResource file = new FileSystemResource(new File(fileName));
76                helper.addAttachment("附件-"+i+fileTyps, file);
77            }
78            mailSender.send(mimeMessage);
79        }catch (Exception e){
80            e.printStackTrace();
81        }
82
83    }
84
85    /**
86     * 发送静态资源  一张照片
87     * @param mail
88     * @throws Exception
89     */
90    @Override
91    public void sendInlineMail(Mail mail){
92        try{
93            MimeMessage mimeMessage = mailSender.createMimeMessage();
94            MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
95            helper.setFrom(from);
96            helper.setTo(mail.getTo());
97            helper.setSubject(mail.getSubject());
98            helper.setText("<html><body><img src=\"cid:chuchen\" ></body></html>", true);
99
100            FileSystemResource file = new FileSystemResource(new File("C:\\Users\\Administrator\\Desktop\\设计图\\已完成\\微信图片_20180323135358.png"));
101            // addInline函数中资源名称chuchen需要与正文中cid:chuchen对应起来
102            helper.addInline("chuchen", file);
103            mailSender.send(mimeMessage);
104        }catch (Exception e){
105            logger.error("发送邮件发生异常");
106        }
107
108    }
109
110    /**
111     * 发送模板邮件
112     * @param mail
113     */
114    @Override
115    public void sendTemplateMail(Mail mail){
116        MimeMessage message = null;
117        try {
118            message = mailSender.createMimeMessage();
119            MimeMessageHelper helper = new MimeMessageHelper(message, true);
120            helper.setFrom(from);
121            helper.setTo(mail.getTo());
122            helper.setSubject(mail.getSubject());
123            //读取 html 模板
124            freemarker.template.Configuration cfg = getConfiguration();
125            Template template = cfg.getTemplate(mail.getTemplateName()+".ftl");
126            String html = FreeMarkerTemplateUtils.processTemplateIntoString(template, mail.getTemplateModel());
127            helper.setText(html, true);
128        } catch (Exception e) {
129            e.printStackTrace();
130        }
131        mailSender.send(message);
132    }
133
134    private static freemarker.template.Configuration getConfiguration() throws IOException {
135        freemarker.template.Configuration cfg = new freemarker.template.Configuration(freemarker.template.Configuration.VERSION_2_3_23);
136        cfg.setDirectoryForTemplateLoading(new File(MailConstant.TEMPLATEPATH));
137        cfg.setDefaultEncoding("UTF-8");
138        cfg.setTemplateExceptionHandler(TemplateExceptionHandler.IGNORE_HANDLER);
139        return cfg;
140    }
141}
142

六:创建ftl模板

这里我们创建一个注册的模板,其他模板大家可自行创建

在src/test/java/resources/template/mail目录下创建register.ftl


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
1<html>
2<head>
3    <meta http-equiv="content-type" content="text/html;charset=utf8">
4</head>
5<body>
6<div><span>尊敬的</span>${to}:</div>
7<div>
8    <span>欢迎您加入,您的验证码为:
9        <span style="color: red;">${identifyingCode}</span>
10    </span>
11</div>
12<span style="margin-top: 100px">初晨科技</span>
13</body>
14</html>  
15

看到这里,可能有的同学就很熟悉,对,这就是自动生成Service,Controller这篇文章里用到的方法

七:创建MailController


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
1package com.example.demo.controller;
2
3import com.example.demo.core.constant.MailConstant;
4import com.example.demo.core.ret.RetResponse;
5import com.example.demo.core.ret.RetResult;
6import com.example.demo.core.utils.ApplicationUtils;
7import com.example.demo.model.Mail;
8import com.example.demo.service.MailService;
9import org.springframework.web.bind.annotation.PostMapping;
10import org.springframework.web.bind.annotation.RequestMapping;
11import org.springframework.web.bind.annotation.RestController;
12
13import javax.annotation.Resource;
14import javax.servlet.http.HttpServletRequest;
15import java.util.HashMap;
16import java.util.Map;
17
18@RestController
19@RequestMapping("/mail")
20public class MailController {
21
22    @Resource
23    private MailService mailService;
24
25    /**
26     * 发送注册验证码
27     * @param mail
28     * @return 验证码
29     * @throws Exception
30     */
31    @PostMapping("/sendTemplateMail")
32    public RetResult<String> sendTemplateMail(Mail mail) throws Exception {
33        String identifyingCode = ApplicationUtils.getNumStringRandom(6);
34        mail.setSubject("欢迎注册初晨");
35        mail.setTemplateName(MailConstant.RETGISTEREMPLATE);
36        Map<String,String> map = new HashMap<>();
37        map.put("identifyingCode",identifyingCode);
38        map.put("to",mail.getTo()[0]);
39        mail.setTemplateModel(map);
40        mailService.sendTemplateMail(mail);
41
42        return RetResponse.makeOKRsp(identifyingCode);
43    }
44
45    @PostMapping("/sendAttachmentsMail")
46    public RetResult<String> sendAttachmentsMail(Mail mail,HttpServletRequest request) throws Exception {
47        mail.setSubject("测试附件");
48        mailService.sendAttachmentsMail(mail, request);
49        return RetResponse.makeOKRsp();
50    }
51}
52

八:测试

输入localhost:8080/mail/sendTemplateMail

 

输入localhost:8080/mail/sendAttachmentsMail

 

ok,成功

给TA打赏
共{{data.count}}人
人已打赏
安全技术

C++遍历文件夹

2022-1-11 12:36:11

安全资讯

打卡月活5.5亿后,抖音下一个衡量点会是什么?

2021-6-15 10:36:11

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索