【java】javamail+freemarker生成邮件模板,并发送邮件

原文地址:https://blog.csdn.net/kisscatforever/article/details/72808669

一、前言

      在上一篇博客中小编向大家介绍了发送带附件的邮件,实践一下也是不错的。这一篇博客是为下一篇博客进行铺垫的,因为项目中需要一个推送的功能,要把推送的信息灵活的显示到一个固有的模板上。所以为了达到这个目的,小编就引入了freemarker。下面向大家介绍。

二、What is Apache FreeMarker?

      FreeMarker是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页、电子邮件、配置文件、源代码等)的通用工具。 它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。【百度百科】

 


这里写图片描述

 

      既然他是一个模板引擎,所以可以通过固定的模板,然后把数据补充进去,就可以达到使用的目的了。 我们有了模板+数据,再由freemarker组合就可以生成我们要的界面。

      这种方法通常被称为MVC(模型视图控制器)模式,并且特别适用于动态网页。它有助于将网页设计师(HTML作者)与开发人员(Java程序员通常)分开。设计师不会在模板中面对复杂的逻辑,并且可以改变页面的外观,而不需要修改或重新编译代码。

三、生成邮件模板并发送

      可以先看一下我的设计模板样式,其中的所有的数据都需要是可变化的:

 


这里写图片描述

 

      推荐几篇博客:

 

一篇很全面的freemarker教程

 

 

Java: FreeMarker的配置和使用

 

 

freemarker语法总结

 

四、小结

4.1 环境说明

  • freemarker.jar

  • mail.jar

  • FreeMarkerIDE,包含两个文件features和plugins,放到eclipse中。

4.2 具体

      freemarker工具类:

      这里要提示的是cfg.setClassForTemplateLoading(this.getClass(), “/com/dmsd/mail/ftl”);指明了模板存放的位置。

<span style="color:#000000"><code><span style="color:#000088">package</span> com.dmsd.freemarker.util;

<span style="color:#000088">import</span> java.io.File;
<span style="color:#000088">import</span> java.io.FileWriter;
<span style="color:#000088">import</span> java.io.IOException;
<span style="color:#000088">import</span> java.io.PrintWriter;
<span style="color:#000088">import</span> java.util.Map;

<span style="color:#000088">import</span> freemarker.template.Configuration;
<span style="color:#000088">import</span> freemarker.template.Template;
<span style="color:#000088">import</span> freemarker.template.TemplateException;


<span style="color:#000088">public</span> <span style="color:#000088">class</span> <span style="color:#4f4f4f">FreemarkerUtil</span> {

    <span style="color:#880000">/**
     * 获取模板信息
     *<span style="color:#4f4f4f"> @param</span> name 模板名
     *<span style="color:#4f4f4f"> @return</span>
     */</span>
    <span style="color:#000088">public</span> Template <span style="color:#009900">getTemplate</span>(String name){
        <span style="color:#880000">//通过freemarkerd COnfiguration读取相应的ftl</span>
        Configuration cfg = <span style="color:#000088">new</span> Configuration();
        <span style="color:#880000">//设定去哪里读取相应的ftl模板文件,指定模板路径</span>
        cfg.setClassForTemplateLoading(<span style="color:#000088">this</span>.getClass(), <span style="color:#009900">"/com/dmsd/mail/ftl"</span>);
        <span style="color:#000088">try</span> {
            <span style="color:#880000">//在模板文件目录中找到名称为name的文件</span>
            Template template =  cfg.getTemplate(name);
            <span style="color:#000088">return</span> template;
        } <span style="color:#000088">catch</span> (IOException e) {
            e.printStackTrace();
        }
        <span style="color:#000088">return</span> <span style="color:#000088">null</span>;
    } 
    <span style="color:#880000">/**
     * 输出到控制台
     *<span style="color:#4f4f4f"> @param</span> name
     *<span style="color:#4f4f4f"> @param</span> root
     *<span style="color:#4f4f4f"> @throws</span> TemplateException
     *<span style="color:#4f4f4f"> @throws</span> IOException
     */</span>
    <span style="color:#000088">public</span> <span style="color:#000088">void</span> <span style="color:#009900">print</span>(String name,Map<String,Object> root) <span style="color:#000088">throws</span> TemplateException, IOException {
        <span style="color:#880000">//通过Template可以将模板文件输出到相应的流</span>
        Template template = <span style="color:#000088">this</span>.getTemplate(name);
        template.process(root, <span style="color:#000088">new</span> PrintWriter(System.out));
    }

    <span style="color:#880000">/**
     * 输出到文件中
     *<span style="color:#4f4f4f"> @param</span> name
     *<span style="color:#4f4f4f"> @param</span> root
     *<span style="color:#4f4f4f"> @throws</span> TemplateException
     *<span style="color:#4f4f4f"> @throws</span> IOException
     */</span>
    <span style="color:#000088">public</span> <span style="color:#000088">void</span> <span style="color:#009900">fprint</span>(String name,Map<String,Object> root,String outFile)  {
        FileWriter out=<span style="color:#000088">null</span>;
        <span style="color:#000088">try</span> {
            out = <span style="color:#000088">new</span> FileWriter(<span style="color:#000088">new</span> File(<span style="color:#009900">"E:/"</span>+outFile));
            <span style="color:#880000">//获取模板</span>
            Template template = <span style="color:#000088">this</span>.getTemplate(name);
            <span style="color:#880000">//设置模板编码</span>
            template.setEncoding(<span style="color:#009900">"utf-8"</span>);
            <span style="color:#000088">try</span> {
                <span style="color:#880000">//输出</span>
                template.process(root, out);
            } <span style="color:#000088">catch</span> (TemplateException e) {
                e.printStackTrace();
            }
        } <span style="color:#000088">catch</span> (IOException e) {
            e.printStackTrace();

        }<span style="color:#000088">finally</span>{
            <span style="color:#000088">try</span> {
                <span style="color:#000088">if</span> (out!=<span style="color:#000088">null</span>) {
                    out.close();
                }
            } <span style="color:#000088">catch</span> (Exception e2) {
            }
        }
    }
}</code></span>

 

      Object类:提供数据

<span style="color:#000000"><code><span style="color:#000088">package</span> com.dmsd.test;

<span style="color:#000088">import</span> java.io.IOException;
<span style="color:#000088">import</span> java.text.DateFormat;
<span style="color:#000088">import</span> java.text.SimpleDateFormat;
<span style="color:#000088">import</span> java.util.Date;
<span style="color:#000088">import</span> java.util.HashMap;
<span style="color:#000088">import</span> java.util.Map;


<span style="color:#000088">import</span> org.junit.Before;
<span style="color:#000088">import</span> org.junit.Test;


<span style="color:#000088">import</span> com.dmsd.freemarker.util.FreemarkerUtil;
<span style="color:#000088">import</span> com.dmsd.mail.model.Itoo;

<span style="color:#000088">import</span> freemarker.template.TemplateException;


<span style="color:#000088">public</span> <span style="color:#000088">class</span> <span style="color:#4f4f4f">testfreemarker</span> {
    FreemarkerUtil fuFreemarkerUtil;
    Map<String, Object> root = <span style="color:#000088">null</span>;

    <span style="color:#9b859d">@Before</span>
    <span style="color:#000088">public</span> <span style="color:#000088">void</span> <span style="color:#009900">setUp</span>(){
        fuFreemarkerUtil=<span style="color:#000088">new</span> FreemarkerUtil();
        root = <span style="color:#000088">new</span> HashMap<String, Object>();
    }

    <span style="color:#000088">private</span> <span style="color:#000088">void</span> <span style="color:#009900">sprint</span>(String name) <span style="color:#000088">throws</span> TemplateException, IOException{
        fuFreemarkerUtil.print(name, root);
    }

    <span style="color:#000088">private</span> <span style="color:#000088">void</span> <span style="color:#009900">fprint</span>(String name,String filename) {
        fuFreemarkerUtil.fprint(name, root, filename);
    }

    <span style="color:#880000">/**
     * ITOO模板
     *<span style="color:#4f4f4f"> @throws</span> Exception
     */</span>
    <span style="color:#9b859d">@Test</span>
    <span style="color:#000088">public</span> <span style="color:#000088">void</span> <span style="color:#009900">testCreateHtml</span>() <span style="color:#000088">throws</span> Exception{

        Date date=<span style="color:#000088">new</span> Date();
        DateFormat format=<span style="color:#000088">new</span> SimpleDateFormat(<span style="color:#009900">"yyyy-MM-dd"</span>);
        String time=format.format(date);

        Itoo itooList=  <span style="color:#000088">new</span> Itoo(
                        <span style="color:#009900">"解聘通知书"</span>,
                        time,
                        <span style="color:#009900">"欢迎使用ITOO云平台"</span>,
                        <span style="color:#009900">"站在巨人的肩膀上"</span>,
                        <span style="color:#009900">"http://www.tfjybj.com"</span>,
                        <span style="color:#009900">"http://192.168.22.208/group1/M00/00/00/wKgW0Fkjp0SANTXDAAGh7DpPo2E431_big.png"</span>,
                        <span style="color:#009900">"http://baike.baidu.com/link?url=fl7uIbBoz9rWvJ8g2kSdcM7a-NRttA2gDQxu6pH9CLwkKgJ3Wl_Z1zn2OoqgxJhXenjdOyn3Bde5mH_hoJwytuC7Joj2hQCcyspGqAe1Bvx59pUq5RSoukPqdxI96NIH"</span>,
                        <span style="color:#009900">"不怕不知道,就怕不知道"</span>,
                        <span style="color:#009900">"http://192.168.22.208/group1/M00/00/00/wKgW0FkjqMqAGm-3AABvODFU6hI303_big.jpg"</span>,
                        <span style="color:#009900">"18333602097@163.com"</span>
                        );

        root.put(<span style="color:#009900">"itooList"</span>, itooList);

        <span style="color:#000088">this</span>.sprint(<span style="color:#009900">"index.ftl"</span>);
        <span style="color:#000088">this</span>.fprint(<span style="color:#009900">"index.ftl"</span>, <span style="color:#009900">"Ares.html"</span>   );

    }
}
</code></span>

      模板:index.html 
      在这个模板中,使用<#include “head.ftl”>引入了其他的模板。

      index.ftl:

<span style="color:#000000"><code>
<span style="color:#006666"><<span style="color:#4f4f4f">html</span>></span>
  <span style="color:#006666"><<span style="color:#4f4f4f">head</span>></span>
    <span style="color:#006666"><<span style="color:#4f4f4f">title</span>></span>index.html<span style="color:#006666"></<span style="color:#4f4f4f">title</span>></span>
    <span style="color:#006666"><<span style="color:#4f4f4f">meta</span> <span style="color:#4f4f4f">http-equiv</span>=<span style="color:#009900">"content-type"</span> <span style="color:#4f4f4f">content</span>=<span style="color:#009900">"text/html; charset=UTF-8"</span>></span>
  <span style="color:#006666"></<span style="color:#4f4f4f">head</span>></span>
 <span style="color:#006666"><<span style="color:#4f4f4f">body</span>></span>
 <span style="color:#006666"><<span style="color:#4f4f4f">div</span> <span style="color:#4f4f4f">style</span>=<span style="color:#009900">"padding:40px 0; height:auto; min-height:100px; text-align:center;"</span>></span>
            <span style="color:#006666"><<span style="color:#4f4f4f">div</span> <span style="color:#4f4f4f">align</span>=<span style="color:#009900">"center"</span> <span style="color:#4f4f4f">style</span>=<span style="color:#009900">"margin:0 auto; min-width:290px; max-width:750px;"</span>></span>
                <span style="color:#006666"><<span style="color:#4f4f4f">div</span> <span style="color:#4f4f4f">style</span>=<span style="color:#009900">"margin:0; background:#fff; border-radius:8px;"</span>></span>
                    <span style="color:#006666"><<span style="color:#4f4f4f">#include</span> "<span style="color:#4f4f4f">head.ftl</span>"></span>
                    <span style="color:#006666"><<span style="color:#4f4f4f">#include</span> "<span style="color:#4f4f4f">QEcode.ftl</span>"></span>
                <span style="color:#006666"></<span style="color:#4f4f4f">div</span>></span>  
                    <span style="color:#006666"><<span style="color:#4f4f4f">#include</span> "<span style="color:#4f4f4f">footer.ftl</span>"></span> 
                <span style="color:#006666"></<span style="color:#4f4f4f">div</span>></span>
            <span style="color:#006666"></<span style="color:#4f4f4f">div</span>></span>
        <span style="color:#006666"></<span style="color:#4f4f4f">div</span>></span>
    <span style="color:#006666"></<span style="color:#4f4f4f">body</span>></span>
<span style="color:#006666"></<span style="color:#4f4f4f">html</span>></span></code></span>

      head.ftl:

<span style="color:#000000"><code><span style="color:#006666"><<span style="color:#4f4f4f">div</span> <span style="color:#4f4f4f">style</span>=<span style="color:#009900">"background:#f2f2f2;"</span>></span>
    <span style="color:#006666"><<span style="color:#4f4f4f">div</span> <span style="color:#4f4f4f">style</span>=<span style="color:#009900">"background:url(http://192.168.22.208/group1/M00/00/00/wKgW0FkjpfqAJAPnAAAlhmNDKpE469_big.png) center top #f2f2f2 no-repeat; height:191px; text-align:left; position:relative; border-radius:8px 8px 0 0;"</span>></span>
        <span style="color:#006666"><<span style="color:#4f4f4f">div</span> <span style="color:#4f4f4f">style</span>=<span style="color:#009900">"padding:26px 0 0; color:#fff; font-size:42px; font-weight:100; text-align:center;"</span>></span>${itooList.title}<span style="color:#006666"></<span style="color:#4f4f4f">div</span>></span>

        <span style="color:#006666"><<span style="color:#4f4f4f">div</span> <span style="color:#4f4f4f">style</span>=<span style="color:#009900">"margin:5px 0 0; color:#fff; font-size:20px; font-weight:100; text-align:center;"</span>></span>${itooList.date}<span style="color:#006666"></<span style="color:#4f4f4f">div</span>></span>

        <span style="color:#006666"><<span style="color:#4f4f4f">div</span> <span style="color:#4f4f4f">style</span>=<span style="color:#009900">"margin:15px 0 30px; padding:0 10px; color:#fff; font-size:16px; font-weight:100; line-height:1.4; text-align:center;"</span>></span>${itooList.welcome}<span style="color:#006666"></<span style="color:#4f4f4f">div</span>></span>
    <span style="color:#006666"></<span style="color:#4f4f4f">div</span>></span>
<span style="color:#006666"></<span style="color:#4f4f4f">div</span>></span>

<span style="color:#006666"><<span style="color:#4f4f4f">div</span> <span style="color:#4f4f4f">style</span>=<span style="color:#009900">"margin:10px 0 0; padding:0 10px; font-size:18px; color:#363c4c;"</span>></span>
<span style="color:#006666"><<span style="color:#4f4f4f">pre</span>></span>
<span style="color:#006666"><<span style="color:#4f4f4f">p</span>></span>
张先生:<span style="color:#006666"><<span style="color:#4f4f4f">br</span>/></span>
         您于2013年9月1日在我公司单担任 总经理 职务,<span style="color:#006666"><<span style="color:#4f4f4f">br</span>/></span>
         根据公司有关规定及您的工作绩效和表现,您不适合本公司此职位,<span style="color:#006666"><<span style="color:#4f4f4f">br</span>/></span>
         故决定自2017年5月23日起,本公司解除与您的聘雇劳动关系,<span style="color:#006666"><<span style="color:#4f4f4f">br</span>/></span>
         请在收到通知书二日内在公司办公室办理相关离职手续。<span style="color:#006666"><<span style="color:#4f4f4f">br</span>/></span>
         非常感谢您在本公司的辛勤工作!同时祝愿您在未来有更好的发展!<span style="color:#006666"><<span style="color:#4f4f4f">br</span>/></span>
<span style="color:#006666"></<span style="color:#4f4f4f">p</span>></span>
<span style="color:#006666"></<span style="color:#4f4f4f">pre</span>></span>
<span style="color:#006666"></<span style="color:#4f4f4f">div</span>></span>

<span style="color:#006666"><<span style="color:#4f4f4f">div</span> <span style="color:#4f4f4f">style</span>=<span style="color:#009900">"background:#fff; position:relative; margin:10px 20px 0; padding:0 0 60px; border-bottom:1px solid #f1f1f1; border-radius:3px;"</span>></span>

    <span style="color:#006666"><<span style="color:#4f4f4f">div</span> <span style="color:#4f4f4f">style</span>=<span style="color:#009900">"padding:40px 0 0; font-size:34px;"</span>></span>${itooList.notice}<span style="color:#006666"></<span style="color:#4f4f4f">div</span>></span>
    <span style="color:#006666"><<span style="color:#4f4f4f">div</span> <span style="color:#4f4f4f">style</span>=<span style="color:#009900">"margin:10px 0 0; padding:0 10px; font-size:18px; color:#363c4c;"</span>></span>变是永远<span style="color:#006666"><<span style="color:#4f4f4f">span</span> <span style="color:#4f4f4f">style</span>=<span style="color:#009900">"font-size:40px; color:#f44336; font-style:italic;"</span>></span>不变<span style="color:#006666"></<span style="color:#4f4f4f">span</span>></span> 的<span style="color:#006666"></<span style="color:#4f4f4f">div</span>></span>
    <span style="color:#006666"><<span style="color:#4f4f4f">div</span> <span style="color:#4f4f4f">style</span>=<span style="color:#009900">"margin:10px 0 0; padding:0 10px; font-size:18px; color:#363c4c;"</span>></span>没有教不好的学生,只有不会教的老师!<span style="color:#006666"></<span style="color:#4f4f4f">div</span>></span>
<span style="color:#006666"></<span style="color:#4f4f4f">div</span>></span></code></span>

      QEcode.ftl:

<span style="color:#000000"><code><span style="color:#006666"><<span style="color:#4f4f4f">div</span>></span>
    <span style="color:#006666"><<span style="color:#4f4f4f">div</span>></span>
                        <span style="color:#006666"><<span style="color:#4f4f4f">a</span> <span style="color:#4f4f4f">href</span>=<span style="color:#009900">"${itooList.logolink}"</span> <span style="color:#4f4f4f">style</span>=<span style="color:#009900">"margin:30px 0 0; width:300px; display:inline-block; text-decoration:none; color:##363c4c;"</span> <span style="color:#4f4f4f">target</span>=<span style="color:#009900">"_blank"</span>></span><span style="color:#006666"><<span style="color:#4f4f4f">img</span> <span style="color:#4f4f4f">src</span>=<span style="color:#009900">"${itooList.logo}"</span> <span style="color:#4f4f4f">style</span>=<span style="color:#009900">"
                        width: 150px;
                    "</span>></span><span style="color:#006666"></<span style="color:#4f4f4f">a</span>></span>
                    <span style="color:#006666"></<span style="color:#4f4f4f">div</span>></span>

                    <span style="color:#006666"><<span style="color:#4f4f4f">div</span> <span style="color:#4f4f4f">style</span>=<span style="color:#009900">"margin:5px 0 0; font-size:16px; color:#363c4c;"</span>></span>
                        <span style="color:#006666"><<span style="color:#4f4f4f">a</span> <span style="color:#4f4f4f">href</span>=<span style="color:#009900">"${itooList.teacherlink}"</span> <span style="color:#4f4f4f">style</span>=<span style="color:#009900">"margin:30px 0 0; width:300px; display:inline-block; text-decoration:none; color:##363c4c;"</span> <span style="color:#4f4f4f">target</span>=<span style="color:#009900">"_blank"</span>></span>${itooList.teacherword}<span style="color:#006666"></<span style="color:#4f4f4f">a</span>></span>
                    <span style="color:#006666"></<span style="color:#4f4f4f">div</span>></span>

                    <span style="color:#006666"><<span style="color:#4f4f4f">div</span> <span style="color:#4f4f4f">style</span>=<span style="color:#009900">"margin:30px 0 0; width:300px; display:inline-block;"</span>></span>
                        <span style="color:#006666"><<span style="color:#4f4f4f">div</span>></span><span style="color:#006666"><<span style="color:#4f4f4f">img</span> <span style="color:#4f4f4f">src</span>=<span style="color:#009900">"${itooList.QRcode}"</span><span style="color:#009900">style="width:</span> <span style="color:#4f4f4f">150px</span>;"></span><span style="color:#006666"></<span style="color:#4f4f4f">div</span>></span>

                        <span style="color:#006666"><<span style="color:#4f4f4f">div</span> <span style="color:#4f4f4f">style</span>=<span style="color:#009900">"margin:5px 0 0; font-size:16px; color:#363c4c;"</span>></span>扫一扫关注公众号<span style="color:#006666"></<span style="color:#4f4f4f">div</span>></span>
                    <span style="color:#006666"></<span style="color:#4f4f4f">div</span>></span>
                    <span style="color:#006666"></<span style="color:#4f4f4f">div</span>></span>
</code></span>

      footer.ftl:

<span style="color:#000000"><code><span style="color:#006666"><<span style="color:#4f4f4f">br</span>/></span>
<span style="color:#006666"><<span style="color:#4f4f4f">div</span> <span style="color:#4f4f4f">style</span>=<span style="color:#009900">"background:#3587f2; padding:12px; line-height:1.8; font-size:14px; color:#fff;"</span>></span>提示:请不要对此邮件直接回复,系统看不懂您的回信^_^。如果您有建议或意见,请回复
    <span style="color:#006666"><<span style="color:#4f4f4f">a</span> <span style="color:#4f4f4f">href</span>=<span style="color:#009900">"mailto:${itooList.email}"</span> <span style="color:#4f4f4f">style</span>=<span style="color:#009900">"text-decoration:none; color:#fff;"</span>></span>${itooList.email}<span style="color:#006666"></<span style="color:#4f4f4f">a</span>></span>
<span style="color:#006666"></<span style="color:#4f4f4f">div</span>></span>


<span style="color:#006666"><<span style="color:#4f4f4f">div</span> <span style="color:#4f4f4f">style</span>=<span style="color:#009900">"background:url(http://192.168.22.208/group1/M00/00/00/wKgW0FkjpiuAO_ZOAAAC3nG29KQ692_big.png) bottom repeat-x; height:90px; border-radius:0 0 8px 8px; position:relative;"</span>></span>
<span style="color:#006666"></<span style="color:#4f4f4f">div</span>></span></code></span>

      生成效果:

 


这里写图片描述

 

      发送邮件后,可以借鉴《【java】javamail简介以及发送邮件》

四、小结

      通过对freemarker的使用,其中的一些标签等使用也是比较重要的,还有就是存储数据的时候,要把数据放入到map中,然后在前台取。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值