在spring中发mail是一件容易的事,如果利用Velocity做mail的模板来发送就更得心应手了。

首先,还是简单描述sping中的配置,发mail需要一个mail的engin:

<bean id="mailEngine" class="com.aodragon.jdt.backend.service.impl.MailEngineImpl">

    <property name="mailSender">

      <ref local="mailSender"/>

    </property>

    <property name="velocityEngine">

      <ref local="velocityEngine"/>

    </property>

  </bean>

实现的类如下:

package com.aodragon.jdt.backend.service.impl;

import java.util.Map;

import javax.mail.MessagingException;

import javax.mail.internet.MimeMessage;

import org.apache.commons.logging.*;

import org.apache.velocity.app.VelocityEngine;

import org.apache.velocity.exception.VelocityException;

import org.springframework.core.io.ClassPathResource;

import org.springframework.mail.*;

import org.springframework.mail.javamail.*;

import org.springframework.ui.velocity.VelocityEngineUtils;

import com.aodragon.jdt.backend.service.MailEngine;

public class MailEngineImpl implements MailEngine {

    protected static final Log log = LogFactory.getLog(MailEngineImpl.class);

    private MailSender mailSender;

    private VelocityEngine velocityEngine;

    public void setMailSender(MailSender mailSender) {

        this.mailSender = mailSender;

    }

    public void setVelocityEngine(VelocityEngine velocityEngine) {

        this.velocityEngine = velocityEngine;

    }

    public void sendMessage(SimpleMailMessage msg, String templateName,

                            Map model) {

        String result = null;

        try {

            result =                VelocityEngineUtils.mergeTemplateIntoString(velocityEngine, templateName, model);

        } catch (VelocityException e) {

            e.printStackTrace();

        }

        msg.setText(result);

        send(msg);

    }

    public void sendMessage(SimpleMailMessage msg, String templateName, String encoding, Map model) {

        String result = null;

        try {

            result =                VelocityEngineUtils.mergeTemplateIntoString(velocityEngine, templateName, encoding,model);

        } catch (VelocityException e) {

            e.printStackTrace();

        }

        msg.setText(result);

        send(msg);

    }

    public void send(SimpleMailMessage msg) {

        try {

            mailSender.send(msg);

        } catch (MailException ex) {

            //log it and go on

            log.error(ex.getMessage());

        }

    }

    public void sendMessage(String[] emailAddresses,

                            ClassPathResource resource, String bodyText,

                            String subject, String attachmentName)

    throws MessagingException {

        MimeMessage message =

            ((JavaMailSenderImpl) mailSender).createMimeMessage();

        // use the true flag to indicate you need a multipart message

        MimeMessageHelper helper = new MimeMessageHelper(message, true);

        helper.setTo(emailAddresses);

        helper.setText(bodyText);

        helper.setSubject(subject);

        helper.addAttachment(attachmentName, resource);

        ((JavaMailSenderImpl) mailSender).send(message);

    }

}

这个engin实现了4个方法,在需要的时候调用,这里也需要两个对象:

private MailSender mailSender;

    private VelocityEngine velocityEngine;

所以在配置的时候需要注意有:

<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">

    <property name="host">

      <value>${email.host}</value>

    </property>

    <property name="username">

      <value>${email.username}</value>

    </property>

    <property name="password">

      <value>${email.password}</value>

    </property>

  </bean>

<bean id="velocityEngine" class="org.springframework.ui.velocity.VelocityEngineFactoryBean">

    <property name="velocityProperties">

      <props>

        <prop key="resource.loader">class</prop>

        <prop key="class.resource.loader.class">org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader</prop>

        <prop key="velocimacro.library"/>

      </props>

    </property>

  </bean>

这样配置是完成了,下面给一个在Action中发mail的调用示例

public ActionForward save(ActionMapping actionMapping,

                              ActionForm actionForm,

                              HttpServletRequest httpServletRequest,

                              HttpServletResponse httpServletRresponse) throws

        Exception {

        String toEmail = "…"

HashMap model = new HashMap();

        this.smm.setTo(toEmail);

        this.smm.setSubject("谢谢您的关注");

        model.put("content","………….. ");

        MessageResources resources = getResources(httpServletRequest);

        this.mailEngin.sendMessage(this.smm,resources.getMessage(_locale,"velocity.email.bookproduct"),model);

        return list(actionMapping, actionForm, httpServletRequest,

                    httpServletRresponse);

    } // end save

这里需要说明的就是调用sendMessage中的第2个参数为resources.getMessage(_locale,"velocity.email.bookproduct"),这里是为了适应多语言版本,调用对应的vm文件,velocity.email.bookproduct是保存在ApplicationResource.properties各个版本中的vm文件对应的路径。其中_locale = (Locale)request.getSession().getAttribute(Globals.LOCALE_KEY)。

这样,简单的Velocity结合Spring发送email就完成了,还可以添加一个TASK来管理邮件的队列,让系统定时发送队列中的邮件;在线管理mailSender中的各个参数等等。

利用Velocity结合Spring发email的更多相关文章

  1. 第19章-使用Spring发送Email

    1 配置Spring发送邮件 Spring Email抽象的核心是MailSender接口.顾名思义,MailSender的实现能够通过连接Email服务器实现邮件发送的功能,如图19.1所示. 图1 ...

  2. linux mail利用外部邮箱地址发邮件

    mail命令发送邮件需要sendmail或postfix服务 三种常用格式发信 mail -s "标题" xxx@xxx.xxx #第一种方法,你可以把当前shell当成编辑器来用 ...

  3. 利用阿里大于接口发短信(Delphi版)

    阿里大于是阿里通信旗下产品,融合了三大运营商的通信能力,提供包括短信.语音.流量直充.私密专线.店铺手机号等个性化服务.每条四分五,价钱还算公道,经老农测试,响应速度非常快,基本上是秒到.官方文档提供 ...

  4. 自我救赎 → 利用 IDEA 和 Spring Boot 搭建 SSM

    前言 开心一刻 儿子读高中放学回来了,一向不管他学习的我突然来了兴趣,想看看他的学习他的状况,抄起他的数学习题看了起来,当看到 1 x 2 x 3 x 4 x 5 x 6 x 7 x 8 x 9 x ...

  5. 使用Spring发送Email

    配置Spring发送邮件 Spring发送邮件底层还是使用JavaMail,我在http://www.cnblogs.com/lz2017/p/6882925.html 中记录过关于JavaMail的 ...

  6. Spring 发送 Email

    本文转自:http://zl198751.iteye.com/blog/757617 看到了本文,收获颇丰,感谢之至! 首先介绍下Email的发送流程: 需要选中smtp邮件服务器,Yahoo不提供免 ...

  7. 利用springframework+javax.mail发邮件(普通邮件、带附件邮件、HTML格式邮件)

    Spring提供了发送电子邮件的支持,可以发送普通邮件.带附件邮件.HTML格式邮件,甚至还可以使用Velocity模板定制化邮件内容. 一.引入相关的库 1 2 3 4 5 6 7 8 9 10 1 ...

  8. Velocity初探小结--Velocity在spring中的配置和使用

    最近正在做的项目前端使用了Velocity进行View层的数据渲染,之前没有接触过,草草过了一遍,就上手开始写,现在又回头细致的看了一遍,做个笔记. velocity是一种基于java的模板引擎技术, ...

  9. Spring – Sending E-Mail Via Gmail SMTP Server With MailSender--reference

    Spring comes with a useful ‘org.springframework.mail.javamail.JavaMailSenderImpl‘ class to simplify ...

随机推荐

  1. @Responsebody与@RequestBody

    前台发送请求后台用什么接收-->@RequsetMapping 何时使用@ResponseBody-->一般在异步获取数据时使用,后台传的数据切成ison传给前台 @Responsebod ...

  2. 数据可视化工具zeppelin安装

    介绍 zeppelin主要有以下功能 数据提取 数据发现 数据分析 数据可视化 目前版本(0.5-0.6)之前支持的数据搜索引擎有如下 安装 环境 centOS 6.6 编译准备工作 sudo yum ...

  3. shell 命令

  4. sql 中各种锁随记

    一. 为什么要引入锁    多个用户同时对数据库的并发操作时会带来以下数据不一致的问题:    丢失更新  A,B两个用户读同一数据并进行修改,其中一个用户的修改结果破坏了另一个修改的结果,比如订票系 ...

  5. python 笔记1

    Python join()方法 描述 Python join() 方法用于将序列中的元素以指定的字符连接生成一个新的字符串. 语法 join()方法语法: str.join(sequence) 参数 ...

  6. 静态关键字static

    //静态关键字的使用static //类里面的普通成员是属于对象的,不是属于类的(调用的时候是用对象调用) //什么叫做静态的:类静态成员是属于类的,不是属于每个对象的 //定义静态成员用static ...

  7. [div+css]网站布局实例二

    重点: 合理应用"xhtml标签"建立良好的页面结构 拿到一份"设计方案"的效果图后不要立即开始编码,而是要 首先理清"各元素之间的关系"; ...

  8. 二招解决php乱码问题

    PHP的乱码问题已经说了N+1遍了,但还是经常看到新手不知道该如何解决php乱码问题,在此本人再重新给总结一下,希望对新手有点帮助 php网页出现乱码一般是在建立数据库时用的编码和php网页的编码不同 ...

  9. 【转】Web UI自动化测试原理

    目前市面上有很多Web UI自动化测试框架,比如WatiN, Selinimu,WebDriver,还有VS2010中的Coded UI等等.  这些框架都可以操作Web中的控件,模拟用户输入,点击等 ...

  10. TVideoGrabber的使用(一)捕捉摄像头

    使用TVideoGrabber捕捉摄像头,相当容易,只需几句代码即可解决问题,首先我们新建一个工程,然后从控件面板上拉取一个 TVideoGrabber控件到窗体中,然后再在窗体上放置四个Button ...