首先引入相关依赖
<!--发送 Emali的依赖-->
    <dependency>
        <groupId>org.spring work.boot</groupId>
        <artifactId>spring-boot-starter-mail</artifactId>
    </dependency>

    <!--发送 Emali的模板的依赖-->
    <dependency>
        <groupId>org.spring work.boot</groupId>
        <artifactId>spring-boot-starter-freemarker</artifactId>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
//
mail:
  fromMail:
    #addr: charging@bmw-brilliance.cn
    addr: 15011502566@163.com

spring:
  http:
    encoding:
      force: true
      charset: UTF-8
      enabled: true
  mail:
    host: smtp.163.com
    username: 15011502566@163.com
    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

<div  style=\"margin-bottom: 12px; position: relative; z-index: 1;\">
    <div class=\"body\" id=\"contentDiv\" style=\"padding: 15px 15px 10px; height: auto; line-height: 1.7; font-size: 14px; position: relative; z-index: 1; -ms-zoom: 1;\">
        <table width=\"800\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">
            <tr>
                <td height=\"24\" colspan=\"2\">
                    尊敬的:${username}
                </td>
            </tr>
              <tr>
                <td height=\"24\" colspan=\"2\">
                </td>
            </tr>
              <tr>
                <td height=\"24\" colspan=\"2\">
                    您的HOP系统账号为:${account}  &nbsp; 密码为:${password}
                </td>
            </tr>
            <tr height=\"24\">
                <td height=\"24\" colspan=\"2\"> HOP系统登陆地址为:<a href=\"https://charging.bmw-brilliance.cn\">https://charging.bmw-brilliance.cn</a>  </td>
            </tr>
              <tr>
                <td height=\"24\" colspan=\"2\">
                </td>
            </tr>
            <tr>
                <td colspan=\"4\" width=\"100%\">本邮件为HOP系统自动发送,请勿回复此邮件。如需帮助,请通过以下方式联系我们:</td>
            </tr>
            <tr height=\"24\">
                <td height=\"24\" colspan=\"2\">IT helpdesk 电话: 400-606-8961</td>
            </tr>
            <tr height=\"24\">
                <td height=\"24\" colspan=\"2\">IT helpdesk邮箱: BMW.CallCenter@bmw-brilliance.cn</td>
            </tr>
            <tr height=\"24\">
               <td> WebSMS:<a href=\"https://websms.bmw.com.cn\">https://websms.bmw.com.cn</a></td>
            </tr>
        </table>
    </div>
</div>

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

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

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

 

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

    /* String[] adds = {\"xxx@qq.com\",\"yyy@qq.com\"}; //同时发送给多人
    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);//添加多个图片可以使用多条 <img src=\'cid:\" + rscId + \"\' > 和 helper.addInline(rscId, res) 来实现
        mailSender.send(message);
        System.err.println(\"嵌入静态资源的邮件已经发送。\");
    } catch (MessagingException e) {
        System.err.println(\"发送嵌入静态资源的邮件时发生异常!\");
    }
}

 

 

 

 

收藏 打印