码迷,mamicode.com
首页 > 编程语言 > 详细

[JAVA教程] Velocity1.7邮件模板 , Jodd-mail3.7发送邮件

时间:2016-07-12 17:02:30      阅读:248      评论:0      收藏:0      [点我收藏+]

标签:

一、需求描述:
    
    日前,做了一个发送客户账单的功能,邮件模板采用自定义,生成vm文件,保存至redis,
    采用jodd-mail发送邮件,查询用户账单数据,账单明细,缓存加载模板并渲染数据,推送邮件至客户端.
    这里给大家推荐一下,jodd是一款很优秀的分类工具插件,邮件服务可以说是使用超级简单,
    但是性能很不错,实现代码干净利落;
    
二、Velocity的基本代码实现

    VelocityEngine ve = new VelocityEngine();
    ve.setProperty(Velocity.INPUT_ENCODING, "utf-8");// 设置输入字符集
    ve.setProperty(Velocity.OUTPUT_ENCODING, "utf-8");// 设置输出字符集
    ve.init();
    
    VelocityContext context = new VelocityContext();
    HashMap<String, Object> result = new HashMap<String, Object>();
    result.put("name", "麦德漂");
    result.put("age", "26")
    context.put("map", result);
    
    //ve.evaluate(context, writer, "logTag", StringTemplate);
    ve.evaluate(context, writer, "logTag", "第一列:$map.get(‘name‘),第二列:$map.get(‘key‘)");
    String content = writer.toString();
    writer.close();
    
    比较简单,如果缓存中没有模板内容,重新加载一遍
    VelocityContext context = new VelocityContext();
    StringWriter writer = new StringWriter();
    Template t = ve.getTemplate("/First.vm");
    t.merge(context, writer);
    String content = writer.toString();
    writer.close();

三、采用jodd发送邮件
    1.Jodd的流式编程:
        Email email = Email.create()
            .from("...@jodd.org")
            .to("...@jodd.org")
            .subject("Hello!")
            .addText("text message...")
            .addHtml("<b>HTML</b> message...")
            .priority(PRIORITY_HIGHEST);
    
    2.Jodd的邮件推送
        SmtpServer smtpServer = SmtpServer.create("mail.jodd.org").authenticateWith("user", "password");
        SendMailSession session = smtpServer.createSession();
        session.open();
        session.sendMail(email1);
        session.sendMail(email2);
        session.close();
    
    3.考虑到发送效率,避免进入垃圾箱,我目前每500封邮件关闭一次session,session中的邮件全部发送,保存发送记录,
      停顿10秒,失败时记录用户数据,支持失败重发.
      
四、关于统计邮件已读,未读
    
    邮件发送出去,很多时候我们很在意用户是否已读,刚开始有两种思路:
    1.邮件设置已读回执,这种解决方案需要用户来触发,交互性不好,且统计不一定准确,直接放弃
    2.在邮箱内容中添加隐藏图片,很简单,如下:
    <img style=‘display:none;‘ src=‘" + countUrl + id + "‘/>
    这样用户在打开邮件时,会加载图片重新打到你的服务器,方便监控已读未读情况.
    
    注:在使用OutLook时,隐藏图片无法隐藏,最后我的统计路径输出了一张无色的java矢量图,当然很小,同样扔到redis了.
    
博客书写过程中,难免出现一些疏漏和错误,欢迎大家批评指正.

[JAVA教程] Velocity1.7邮件模板 , Jodd-mail3.7发送邮件

标签:

原文地址:http://www.cnblogs.com/render-inside/p/5664125.html

(0)
(1)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!