Spring Boot 集成freeMarker发送模板邮件

首先引入相关依赖

    
        org.springframework.boot
        spring-boot-starter-mail
    

    
    
        org.springframework.boot
        spring-boot-starter-freemarker
    
    
        junit
        junit
//
mail:
  fromMail:
    #addr: [email protected]
    addr: [email protected]

spring:
  http:
    encoding:
      force: true
      charset: UTF-8
      enabled: true
  mail:
    host: smtp.163.com
    username: [email protected]
    password: #这里填写你邮箱的认证密码,不是邮箱密码,具体如何认证请自行百度。
    properties:
      mail.smtp.auth: true
      mail.smtp.port: 25
      mail.smtp.starttls.enable: true
      mail.smtp.starttls.required: true

 

file:               #这里设置模板的读取路径,一般放在工程文件外面,这样每次修改模板的时候,就不需要重新部署了。                     
  template: d:\template\
    



@Configuration//设置freeMarker 配置文件
public class FreeMarkerConfig {


    @Value("${file.template}")//在配置文件中 配置模板的读取路径。
    private String templatePath;

    @Bean
    public FreeMarkerConfigurer freeMarkerConfigurer(){
        FreeMarkerConfigurer fc=new FreeMarkerConfigurer();
        fc.setTemplateLoaderPath("file:"+templatePath);//设置模板的获取路径。(我的不知道为啥 必须要加一个file才能取到。)
        fc.setDefaultEncoding("UTF-8");
        return  fc;
    }

        @Bean
        public ViewResolver viewResolver() {//设置读取模板的格式
            FreeMarkerViewResolver resolver = new FreeMarkerViewResolver();
            resolver.setCache(true);
            resolver.setPrefix("");
            resolver.setSuffix(".ftl");
            resolver.setContentType("text/html; charset=UTF-8");
            return resolver;
        }
}

 

@Autowired  //将刚刚配置的配置文件注入。
FreeMarkerConfigurer freeMarkerConfigurer;
@Value("${mail.fromMail.addr}")
private String from;//发送人

@Autowired
private JavaMailSender mailSender;//spring 提供的邮件发送类
private String getMailText(String username,String account,String password){//这里来填充模板内的占位符
    String htmlText="";
    try {
        //通过指定模板名获取FreeMarker模板实例
        Template tpl=freeMarkerConfigurer.getConfiguration().getTemplate("passwordTemplate.ftl");
        //FreeMarker通过Map传递动态数据
        Map map=new HashMap();
        map.put("username",username); //注意动态数据的key和模板标签中指定的属性相匹配
        map.put("password",password); //注意动态数据的key和模板标签中指定的属性相匹配
        map.put("account",account);
        //解析模板并替换动态数据,最终username将替换模板文件中的${username}标签。
        htmlText=FreeMarkerTemplateUtils.processTemplateIntoString(tpl,map);
    } catch (Exception e) {
        // TODO Auto-generated catch block
        throw new GunsException(BizExceptionEnum.TEMPLATE_NOT_FOND);
    }
    return htmlText;
}

//然后调用下面这个类,并传递相应的参数,就可以实现模板发送邮件啦

public void sendTemplateEmail(String to,String subject,String username,String account,String password) {
    MimeMessage message = mailSender.createMimeMessage();//创建一个MINE消息
    try {
        MimeMessageHelper helper = new MimeMessageHelper(message, true);
        helper.setFrom(from);
        helper.setTo(to);
        helper.setSubject(subject);
        String htmlText=getMailText(username,account,password);//使用模板生成html邮件内容
        helper.setText(htmlText, true);
        mailSender.send(message);
        System.err.println("模板邮件已经发送。");
    } catch (MessagingException e) {
        System.err.println("发送模板邮件时发生异常!");
    }

}

//这是我的模板   地址在:D:\template   名称是:passwordTemplate.ftl


   

       
           
               
           
             
               
           
             
               
           
           
               
           
             
               
           
           
               
           
           
               
           
           
               
           
           
               
           
       

                    尊敬的:${username}
               

               

                    您的HOP系统账号为:${account}    密码为:${password}
               
HOP系统登陆地址为:https://charging.bmw-brilliance.cn  

               
本邮件为HOP系统自动发送,请勿回复此邮件。如需帮助,请通过以下方式联系我们:
IT helpdesk 电话: 400-606-8961
IT helpdesk邮箱: [email protected]
WebSMS:https://websms.bmw.com.cn

   

//如果模板的有错误的话,邮件也会发送,但是显示的内容为空。注意模板的内容格式正确,和占位符必须都赋值。

//有问题的话可以联系我,小白,相互学习哈。

//先面贴一写发送非模板的邮件

 

@Override
public void sendSimpleEmail(String to, String subject, String content) {
    SimpleMailMessage message = new SimpleMailMessage();//创建简单邮件消息
    message.setFrom(from);//设置发送人
    message.setTo(to);//设置收件人

    /* String[] adds = {"[email protected]","[email protected]"}; //同时发送给多人
    message.setTo(adds);*/

    message.setSubject(subject);//设置主题
    message.setText(content);//设置内容
    try {
        mailSender.send(message);//执行发送邮件
        System.err.println("简单邮件已经发送。");
    } catch (Exception e) {
        System.err.println("发送简单邮件时发生异常!"+e.getMessage());
    }
}


@Override
public void sendHtmlEmail(String to, String subject, String content) {
    MimeMessage message = mailSender.createMimeMessage();//创建一个MINE消息

    try {
        LOGGER.info("from:"+from+",to:"+to+",subject:"+subject+",content:"+content);
        //true表示需要创建一个multipart message
        MimeMessageHelper helper = new MimeMessageHelper(message, true);
        helper.setFrom(from);
        helper.setTo(to);
        helper.setSubject(subject);
        helper.setText(content, true);


        mailSender.send(message);
        LOGGER.info("html邮件发送成功");

    } catch (MessagingException e) {
        LOGGER.error("发送html邮件时发生异常!"+e);
    }

}

@Override
public void sendAttachmentsEmail(String to, String subject, String content, String filePath) {
    MimeMessage message = mailSender.createMimeMessage();//创建一个MINE消息

    try {
        MimeMessageHelper helper = new MimeMessageHelper(message, true);
        helper.setFrom(from);
        helper.setTo(to);
        helper.setSubject(subject);
        helper.setText(content, true);// true表示这个邮件是有附件的

        FileSystemResource file = new FileSystemResource(new File(filePath));//创建文件系统资源
        String fileName = filePath.substring(filePath.lastIndexOf(File.separator));
        helper.addAttachment(fileName, file);//添加附件

        mailSender.send(message);
        System.err.println("带附件的邮件已经发送。");
    } catch (MessagingException e) {
        System.err.println("发送带附件的邮件时发生异常!"+ e);
    }

}


@Override
public void sendInlineResourceEmail(String to, String subject, String content, String rscPath, String rscId) {
    MimeMessage message = mailSender.createMimeMessage();
    try {
        MimeMessageHelper helper = new MimeMessageHelper(message, true);
        helper.setFrom(from);
        helper.setTo(to);
        helper.setSubject(subject);
        helper.setText(content, true);
        FileSystemResource res = new FileSystemResource(new File(rscPath));
        //添加内联资源,一个id对应一个资源,最终通过id来找到该资源
        helper.addInline(rscId, res);//添加多个图片可以使用多条  和 helper.addInline(rscId, res) 来实现
        mailSender.send(message);
        System.err.println("嵌入静态资源的邮件已经发送。");
    } catch (MessagingException e) {
        System.err.println("发送嵌入静态资源的邮件时发生异常!");
    }
}

 

 

 

 

你可能感兴趣的:(Spring,Boot)