zoukankan      html  css  js  c++  java
  • (十三)SpringBoot 发送E-mail

    一:添加mail依赖

    <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-mail</artifactId>
    </dependency>
    

      

    二:添加邮件配置

    打开application.properties

    #邮箱配置
    spring.mail.protocol=smtp
    #这里换成自己的邮箱类型   例如qq邮箱就写smtp.qq.com
    spring.mail.host=smtp.126.com
    spring.mail.port=25
    spring.mail.smtpAuth=true
    spring.mail.smtpStarttlsEnable=true
    #这里换成自己的邮箱类型   例如qq邮箱就写smtp.qq.com
    spring.mail.smtpSslTrust=smtp.126.com 
    #这里换成自己的邮箱账号
    spring.mail.username=xxxxxx@126.com
    #这里换成自己的邮箱密码或授权码   授权码获取可以百度
    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

    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";
    }
    

      

    五:创建邮件业务类

    MailService

    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

    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模板

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

    在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>欢迎您加入YUI,您的验证码为:
            <span style="color: red;">${identifyingCode}</span>
        </span>
    </div>
    <span style="margin-top: 100px">YUI科技</span>
    </body>
    </html>
    

      

    七:创建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/sendTemplateMail

    必填参数 to

  • 相关阅读:
    PIL PNG格式通道问题的解决方法
    opencv-python 学习初探2 去图片水印
    Appium、selenium与Robot Framework
    性能监控0
    XML
    Python3 读取和写入excel
    Python识别字符型图片验证码
    python进程、线程、协程
    算法和程序
    Zigbee
  • 原文地址:https://www.cnblogs.com/yui66/p/9632993.html
Copyright © 2011-2022 走看看