從零搭建本身的SpringBoot後臺框架(十七)

Hello你們好,本章咱們添加系統發送郵件功能 。有問題能夠聯繫我mr_beany@163.com。另求各路大神指點,感謝

本章咱們介紹發送普通郵件,發送附件,發送模板郵件等html

一:添加mail依賴

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-mail</artifactId>
</dependency>複製代碼

二:添加郵件配置

打開application.propertiesjava

添加以下配置git

spring.mail.protocol=smtp
spring.mail.host=smtp.chuchenkj.xyz  #這裏換成本身的郵箱類型 例如qq郵箱就寫smtp.qq.com
spring.mail.port=25
spring.mail.smtpAuth=true
spring.mail.smtpStarttlsEnable=true
spring.mail.smtpSslTrust=smtp.chuchenkj.xyz   #這裏換成本身的郵箱類型 例如qq郵箱就寫smtp.qq.com
spring.mail.username=chuchenkf@chuchenkj.xyz  #這裏換成本身的郵箱帳號
spring.mail.password=****************         #這裏換成本身的郵箱密碼或受權碼 受權碼獲取能夠百度複製代碼

三:建立郵件實體類

package com.example.demo.model;

import java.util.Map;

public class Mail {

    /**
     * 發給多我的
     */
    private String[] to;

    /**
     * 抄送
     */
    private String[] cc;

    /**
     * 郵件標題
     */
    private String subject;

    /**
     * 郵件內容   簡單文本 和附件郵件必填  其他的不須要
     */
    private String text;

    /**
     * 模板須要的數據   發送模板郵件必填
     */
    private Map<String,String> templateModel;

    /**
     * 選用哪一個模板 發送模板郵件必填
     */
    private String templateName;

    public String[] getTo() {
        return to;
    }

    public void setTo(String[] to) {
        this.to = to;
    }

    public String getSubject() {
        return subject;
    }

    public void setSubject(String subject) {
        this.subject = subject;
    }

    public String getText() {
        return text;
    }

    public void setText(String text) {
        this.text = text;
    }

    public Map<String, String> getTemplateModel() {
        return templateModel;
    }

    public void setTemplateModel(Map<String, String> templateModel) {
        this.templateModel = templateModel;
    }

    public String getTemplateName() {
        return templateName;
    }

    public void setTemplateName(String templateName) {
        this.templateName = templateName;
    }

    public String[] getCc() {
        return cc;
    }

    public void setCc(String[] cc) {
        this.cc = cc;
    }
}複製代碼

四:建立郵件常量類

建立core→constant→MailConstant
github

package com.example.demo.core.constant;

public class MailConstant {

    /**
     * 註冊的模板名稱
     */
    public static final String RETGISTEREMPLATE = "register";

    /**
     * 模板存放的路徑
     */
    public static final String TEMPLATEPATH = "src/test/java/resources/template/mail";
}
複製代碼

五:建立郵件業務類

MailServiceweb

package com.example.demo.service;

import com.example.demo.model.Mail;

import javax.servlet.http.HttpServletRequest;

public interface MailService {

    /**
     * 發送簡單郵件
     * @param mail
     */
    void sendSimpleMail(Mail mail);

    /**
     * 發送帶附件的郵件
     * @param mail
     * @param request
     */
    void sendAttachmentsMail(Mail mail, HttpServletRequest request);

    /**
     * 發送靜態資源  一張照片
     * @param mail
     * @throws Exception
     */
    void sendInlineMail(Mail mail) throws Exception;

    /**
     * 發送模板郵件
     * @param mail
     */
    void sendTemplateMail(Mail mail);
}
複製代碼

MailServiceImpl
spring

package com.example.demo.service.impl;

import com.example.demo.core.constant.MailConstant;
import com.example.demo.core.utils.UploadActionUtil;
import com.example.demo.model.Mail;
import com.example.demo.service.MailService;
import freemarker.template.Template;
import freemarker.template.TemplateExceptionHandler;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.FileSystemResource;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;
import org.springframework.ui.freemarker.FreeMarkerTemplateUtils;
import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer;

import javax.annotation.Resource;
import javax.mail.internet.MimeMessage;
import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.util.List;

@Service
public class MailServiceImpl implements MailService {

    private static final Logger logger = LoggerFactory.getLogger(MailServiceImpl.class);

    @Resource
    @Qualifier("javaMailSender")
    private JavaMailSender mailSender;

    @Value("${spring.mail.username}")
    private String from;

    @Resource
    private FreeMarkerConfigurer freeMarkerConfigurer;

    /**
     * 發送簡單郵件
     */
    @Override
    public void sendSimpleMail(Mail mail){
        SimpleMailMessage message = new SimpleMailMessage();
        message.setFrom(from);
        message.setTo(mail.getTo());
        message.setSubject(mail.getSubject());
        message.setText(mail.getText());
        message.setCc(mail.getCc());
        mailSender.send(message);
    }

    /**
     * 發送附件
     *
     * @throws Exception
     */
    @Override
    public void sendAttachmentsMail(Mail mail,HttpServletRequest request){
        try{
            MimeMessage mimeMessage = mailSender.createMimeMessage();
            MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
            helper.setFrom(from);
            helper.setTo(mail.getTo());
            helper.setSubject(mail.getSubject());
            helper.setText(mail.getText());
            List<String> list = UploadActionUtil.uploadFile(request);
            for (int i = 1,length = list.size();i<=length;i++) {
                String fileName = list.get(i-1);
                String fileTyps = fileName.substring(fileName.lastIndexOf("."));
                FileSystemResource file = new FileSystemResource(new File(fileName));
                helper.addAttachment("附件-"+i+fileTyps, file);
            }
            mailSender.send(mimeMessage);
        }catch (Exception e){
            e.printStackTrace();
        }

    }

    /**
     * 發送靜態資源  一張照片
     * @param mail
     * @throws Exception
     */
    @Override
    public void sendInlineMail(Mail mail){
        try{
            MimeMessage mimeMessage = mailSender.createMimeMessage();
            MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
            helper.setFrom(from);
            helper.setTo(mail.getTo());
            helper.setSubject(mail.getSubject());
            helper.setText("<html><body><img src=\"cid:chuchen\" ></body></html>", true);

            FileSystemResource file = new FileSystemResource(new File("C:\\Users\\Administrator\\Desktop\\設計圖\\已完成\\微信圖片_20180323135358.png"));
            // addInline函數中資源名稱chuchen須要與正文中cid:chuchen對應起來
            helper.addInline("chuchen", file);
            mailSender.send(mimeMessage);
        }catch (Exception e){
            logger.error("發送郵件發生異常");
        }

    }

    /**
     * 發送模板郵件
     * @param mail
     */
    @Override
    public void sendTemplateMail(Mail mail){
        MimeMessage message = null;
        try {
            message = mailSender.createMimeMessage();
            MimeMessageHelper helper = new MimeMessageHelper(message, true);
            helper.setFrom(from);
            helper.setTo(mail.getTo());
            helper.setSubject(mail.getSubject());
            //讀取 html 模板
            freemarker.template.Configuration cfg = getConfiguration();
            Template template = cfg.getTemplate(mail.getTemplateName()+".ftl");
            String html = FreeMarkerTemplateUtils.processTemplateIntoString(template, mail.getTemplateModel());
            helper.setText(html, true);
        } catch (Exception e) {
            e.printStackTrace();
        }
        mailSender.send(message);
    }

    private static freemarker.template.Configuration getConfiguration() throws IOException {
        freemarker.template.Configuration cfg = new freemarker.template.Configuration(freemarker.template.Configuration.VERSION_2_3_23);
        cfg.setDirectoryForTemplateLoading(new File(MailConstant.TEMPLATEPATH));
        cfg.setDefaultEncoding("UTF-8");
        cfg.setTemplateExceptionHandler(TemplateExceptionHandler.IGNORE_HANDLER);
        return cfg;
    }
}複製代碼

六:建立ftl模板

這裏咱們建立一個註冊的模板,其餘模板你們可自行建立bash

在src/test/java/resources/template/mail目錄下建立register.ftl微信

<html>
<head>
    <meta http-equiv="content-type" content="text/html;charset=utf8">
</head>
<body>
<div><span>尊敬的</span>${to}:</div>
<div>
    <span>歡迎您加入初晨,您的驗證碼爲:
        <span style="color: red;">${identifyingCode}</span>
    </span>
</div>
<span style="margin-top: 100px">初晨科技</span>
</body>
</html>  複製代碼

看到這裏,可能有的同窗就很熟悉,對,這就是自動生成Service,Controller這篇文章裏用到的方法app

七:建立MailController

package com.example.demo.controller;

import com.example.demo.core.constant.MailConstant;
import com.example.demo.core.ret.RetResponse;
import com.example.demo.core.ret.RetResult;
import com.example.demo.core.utils.ApplicationUtils;
import com.example.demo.model.Mail;
import com.example.demo.service.MailService;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.Map;

@RestController
@RequestMapping("/mail")
public class MailController {

    @Resource
    private MailService mailService;

    /**
     * 發送註冊驗證碼
     * @param mail
     * @return 驗證碼
     * @throws Exception
     */
    @PostMapping("/sendTemplateMail")
    public RetResult<String> sendTemplateMail(Mail mail) throws Exception {
        String identifyingCode = ApplicationUtils.getNumStringRandom(6);
        mail.setSubject("歡迎註冊初晨");
        mail.setTemplateName(MailConstant.RETGISTEREMPLATE);
        Map<String,String> map = new HashMap<>();
        map.put("identifyingCode",identifyingCode);
        map.put("to",mail.getTo()[0]);
        mail.setTemplateModel(map);
        mailService.sendTemplateMail(mail);

        return RetResponse.makeOKRsp(identifyingCode);
    }

    @PostMapping("/sendAttachmentsMail")
    public RetResult<String> sendAttachmentsMail(Mail mail,HttpServletRequest request) throws Exception {
        mail.setSubject("測試附件");
        mailService.sendAttachmentsMail(mail, request);
        return RetResponse.makeOKRsp();
    }
}複製代碼

八:測試

輸入localhost:8080/mail/sendTemplateMaildom


打開郵箱


輸入localhost:8080/mail/sendAttachmentsMail




ok,成功

項目地址

碼雲地址: gitee.com/beany/mySpr…

GitHub地址: github.com/MyBeany/myS…

寫文章不易,如對您有幫助,請幫忙點下star

結尾

添加系統發送郵件功能已完成,後續功能接下來陸續更新,有問題能夠聯繫我mr_beany@163.com。另求各路大神指點,感謝你們。

相關文章
相關標籤/搜索