带有UI的Java电子邮件模板?

时间:2011-02-23 15:23:55

标签: java email templates

我的网站是用Java / JSP构建的,需要发送大约5-10个预定义的电子邮件,然后向注册的人发送特别的电子邮件。我希望避免“重新发明轮子”。我更喜欢电子邮件模板可以简单地使用所见即所得类型的gui进行管理。到目前为止,我所读过的所有内容(Velocity,Freemarker等)都适用于预定义的模板,没有用户界面,也没有真正帮助处理adhoc电子邮件。

我很好奇我最好自己写点什么,或者那里有什么东西可以提供帮助吗?

1 个答案:

答案 0 :(得分:2)

为什么需要GUI来制作电子邮件?最好保持电子邮件内容尽可能简单,而不是在其中嵌入HTML标记。如果您的用户决定使用普通/文本打开电子邮件,那么他们看到的只是一堆丑陋的标签。

使用Velocity或Freemarker等模板引擎是制作电子邮件模板的方法。即使使用adhoc电子邮件,您也可以使用电子邮件模板保持页眉​​和页脚的相同,并且可以使用您的adhoc消息替换正文内容。

在我的项目中,我有一个使用Velocity的电子邮件模板,如下所示: -

exception-email.vm文件

** Please do not reply to this message **

The project administrator has been notified regarding this error.
Remote Host : $remoteHost
Server      : $serverName
Request URI : $requestURI
User ID     : $currentUser
Exception   : 

$stackTrace

要将构建的电子邮件作为字符串,我执行以下操作: -

private String getMessage(HttpServletRequest request, Throwable t) {
    Map<String, String> values = new HashMap<String, String>();
    values.put("remoteHost", request.getRemoteHost());
    values.put("serverName", request.getServerName());
    values.put("requestURI", request.getRequestURI());
    values.put("currentUser", ((currentUser != null) ? currentUser.getLanId() : "(User is undefined)"));

    StringWriter sw = new StringWriter(500);
    t.printStackTrace(new PrintWriter(sw));

    values.put("stackTrace", sw.toString());

    return VelocityEngineUtils.mergeTemplateIntoString(velocityEngine, "exception-email.vm", values);
}

当然,我正在使用Spring连接velocityEngine: -

<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>
        </props>
    </property>
</bean>