美文网首页Java webspringboot
JAVA Spring Boot实现发邮件功能 可灵活配置消息

JAVA Spring Boot实现发邮件功能 可灵活配置消息

作者: 闲置的Programmer | 来源:发表于2019-12-12 15:20 被阅读0次

    1、添加pom.xml依赖文件

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

    2、创建工具类

    package com.superkind.common.util.email;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.mail.javamail.JavaMailSender;
    import org.springframework.mail.javamail.MimeMessageHelper;
    import org.springframework.stereotype.Component;
    
    import javax.mail.MessagingException;
    import javax.mail.internet.MimeMessage;
    
    /**
     * 邮件工具类
     * @author yokips
     * @date 2019/12/6 10:41
     */
    @Component
    public class EmailUtil {
    
        @Autowired
        private JavaMailSender javaMailSender;
    
        @Value("${spring.mail.fromMail.addr}")
        private String from;
    
        /**
         * html邮件
         * @param to 接收人
         * @param subject 主题
         * @param content 邮件内容
         * @return
         */
        public Boolean sendHtmlMail(String to, String subject, String content) {
            MimeMessage message = javaMailSender.createMimeMessage();
            try {
                // true表示需要创建一个multipart message
                MimeMessageHelper helper = new MimeMessageHelper(message, true);
                helper.setFrom(from);
                helper.setTo(to); //接收者的邮箱
                helper.setSubject(subject);//标题
                helper.setText(content, true);//内容
                javaMailSender.send(message);
                return true;
            } catch (MessagingException e) {
                return false;
            }
        }
    }
    
    
    

    3、在application.xml中写邮件相关配置

    mail:
        default-encoding: UTF-8
        host: smtp.exmail.qq.com
        username: xxxxx@sina.com                    
        password: xxxxxxxxxx
        fromMail:
          addr: 冲冲冲<xxxx@sina.com> #发件人 需要跟mail的username相同
        port: 465
        properties:
          mail:
            smtp:
              auth: true    #设置是否需要认证
              starttls:     #将纯文本连接升级为加密连接(TLS或SSL)而不是另外使用一个端口作加密通信
                enable: true
                required: true
              socketFactory:
                class: javax.net.ssl.SSLSocketFactory
    
    

    实际上这个工具类就已经可以实现发送邮件的功能了,但为了更灵活的对各种消息进行发送,可以使用消息模板来对内容进行控制

    1、建立消息模板表

    CREATE TABLE `cy_message_sys_message_teplate` (
      `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id',
      `msgtemplate_key` varchar(50) NOT NULL COMMENT '消息Key,代码中需要对应',
      `msgtemplate_name` varchar(50) NOT NULL COMMENT '描述',
      `msgtemplate_context` varchar(255) NOT NULL DEFAULT '0' COMMENT '消息模板内容',
      `del_flag` char(1) NOT NULL DEFAULT '0' COMMENT '数据是否删除 0正常1删除,默认0',
      `edit_flag` char(1) NOT NULL DEFAULT '0' COMMENT '0可编辑1不可编辑',
      `create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
      `update_time` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
      `url` varchar(255) DEFAULT NULL COMMENT '前端页面跳转',
      `type` char(255) DEFAULT '0' COMMENT '类型 1 指定人员',
      `user_id` int(11) DEFAULT NULL COMMENT '指定人员ID',
      PRIMARY KEY (`id`) USING BTREE
    ) ENGINE=InnoDB AUTO_INCREMENT=73 DEFAULT CHARSET=utf8 COMMENT='消息模板表';
    
    
    
    

    添加一条测试数据


    测试数据

    service层调用代码

    
    import org.springframework.beans.BeanUtils;
    import org.springframework.beans.factory.annotation.Autowired;
    
    import java.util.*;
    
    /**
     * <p>
     * 邮件发送相关代码
     * </p>
     *
     * @author yokip
     * @since 2019-12-10
     */
    @Service
    public class SysEnquiryServiceImpl extends ServiceImpl<SysEnquiryMapper, SysEnquiry> implements ISysEnquiryService {
    
    
        @Autowired
        private SysEnquiryInfoMapper infoMapper;
    
        @Autowired
        EmailUtil emailUtil;
        
        public void test(){
            //查找消息模板信息
            MessageTemlateInfoVO temlateInfo = infoMapper.getMessageTemplateInfo("TEST");
            if(temlateInfo==null){
                throw new RuntimeException("未找到消息模板");
            }
    
            //消息模板参数  将消息模板中的#{0} #{1} 替换成需要的字符
            HashMap params = new HashMap();
            params.put("0","测试测试");
            params.put("1","测试测试");
    
            //发送邮件
            emailUtil.sendHtmlMail("xxxxx@outlook.com",temlateInfo.getMsgtemplateName(),replaceString(temlateInfo.getMsgtemplateContext(),params));
    
    
            //如果是群发则循环发送
            List<String> emailList = new ArrayList<>();
            emailList.add("xxxxx@sina.com");
            emailList.add("xxxxx@outlook.com");
            emailList.add("xxxxx@qq.com");
    
            //循环发送邮件
            emailList.forEach(email->{
                emailUtil.sendHtmlMail("kimoji981002@outlook.com",temlateInfo.getMsgtemplateName(),replaceString(temlateInfo.getMsgtemplateContext(),params));
    
            });
    
    
        }
    
    
        //将消息模板中的#{0} #{1} 替换成需要的字符
        private String replaceString(String context, Map map) {
            for (int i = 0; i < map.size(); i++) {
                Object replaceValue = map.get("" + i + "");
                context = context.replace("#{" + (i) + "}", replaceValue.toString());
            }
            return context;
        }
    }
    
    
    
    
    

    相关文章

      网友评论

        本文标题:JAVA Spring Boot实现发邮件功能 可灵活配置消息

        本文链接:https://www.haomeiwen.com/subject/ixltnctx.html