当前位置:  开发笔记 > 编程语言 > 正文

Java电子邮件模板的建议?

如何解决《Java电子邮件模板的建议?》经验,为你挑选了6个好方法。

我们有一个应用程序,需要发送各种不同类型的模板电子邮件.目前的代码非常繁琐且不够灵活.有没有人能够帮助这种类型的工作...我们正在寻找某种用于电子邮件的模板库.



1> javamonkey79..:

也许Apache Velocity可以为你工作?


+1之前我已经使用过Velocity + Spring.

2> Dave Ray..:

StringTemplate也是一个非常好的模板引擎.



3> Jan Vladimir..:

Jack Leow说他写了一个自定义的HttpServletResponse,以便他可以重新使用JSP来生成电子邮件模板,我只是做了同样的事情,并希望为那些不确定从哪里开始的人分享我的代码示例/原型:

通常在提供JSP页面时,你会做这样的事情:

res.setContentType("text/html");
RequestDispatcher jsp = req.getRequestDispatcher("/WEB-INF/templates/" + template);
res.setStatus(200);
jsp.forward(req, res);

现在,不要将jsp.forward转换为HttpServletResponse,而是为自定义Servlet响应执行jsp.forward:

EmailServletResponse res2 = new EmailServletResponse();
jsp.forward(req, res2);
System.out.println(res2.toString()); <<-- email gets printed here

您的EmailServlet响应将只是一个实现HttpServletResponse的类,填充空白并使用底层StringWriter来完成toString转换:

public class EmailServletResponse implements HttpServletResponse {

private int status;
private StringWriter sw = new StringWriter();

@Override
public void flushBuffer() throws IOException {
    sw.flush();
}

@Override
public int getBufferSize() {
    return 1024;
}

@Override
public String getCharacterEncoding() {
    return "UTF-8";
}

@Override
public String getContentType() {
    return "text/html";
}

@Override
public Locale getLocale() {
    return Locale.getDefault();
}

@Override
public ServletOutputStream getOutputStream() throws IOException {
    return new ServletOutputStream() {
        @Override
        public void write(int b) throws IOException {
            sw.write(b);
        }
    };
}

@Override
public PrintWriter getWriter() throws IOException {
    PrintWriter pw = new PrintWriter(sw);
    return pw;
}

@Override
public boolean isCommitted() {
    return false;
}

@Override
public void reset() {       
}

@Override
public void resetBuffer() {
}

@Override
public void setBufferSize(int arg0) {
}

@Override
public void setCharacterEncoding(String arg0) {
}

@Override
public void setContentLength(int arg0) {
}

@Override
public void setContentType(String arg0) {
}

@Override
public void setLocale(Locale arg0) {
}

@Override
public void addCookie(Cookie arg0) {
}

@Override
public void addDateHeader(String arg0, long arg1) {
}

@Override
public void addHeader(String arg0, String arg1) {
}

@Override
public void addIntHeader(String arg0, int arg1) {
}

@Override
public boolean containsHeader(String arg0) {
    return false;
}

@Override
public String encodeRedirectURL(String arg0) {
    return "";
}

@Override
public String encodeRedirectUrl(String arg0) {
    return "";
}

@Override
public String encodeURL(String arg0) {
    return "";
}

@Override
public String encodeUrl(String arg0) {
    return "";
}

@Override
public void sendError(int arg0) throws IOException {

}

@Override
public void sendError(int arg0, String arg1) throws IOException {

}

@Override
public void sendRedirect(String arg0) throws IOException {

}

@Override
public void setDateHeader(String arg0, long arg1) {

}

@Override
public void setHeader(String arg0, String arg1) {


}

@Override
public void setIntHeader(String arg0, int arg1) {

}

@Override
public void setStatus(int status) {
    this.status = status;
}

@Override
public void setStatus(int status, String message) {
    setStatus(status);
}

public String toString(){
    return sw.getBuffer().toString();
}
}

随意在需要的地方改进代码,这是一个快速的原型设计会话:)



4> Jack Leow..:

一年前我遇到了类似的问题.在我们的例子中,我们的前端开发人员都熟悉JSP,我真的不想将另一个模板引擎添加到组合中.我想要一些依赖于servlet容器的JSP处理器来为我生成电子邮件内容的东西.

这很简单:

    我必须在我的应用程序中有一个JSP页面(如果你不希望它可以从外部访问,你可以把它放在/ WEB-INF中).

    我编写了一个自定义文件HttpServletResponse,ServletOutputStream它捕获由servlet容器编写的内容并将其转换为String,并依赖于RequestDispatcher.include(...)对模板JSP发出"请求"(我还编写了一个自定义HttpServletRequest来隔离原始请求与变异).

    因为这有点像hack,而不是servlet API的使用方式,所以我将所有这些封装在一个实用程序类中,因此所有客户端代码所要做的就是传递JSP模板的路径,并取回已处理的内容.


在这里查看我的代码示例,它实际上非常简单:http://stackoverflow.com/a/20847683/527533

5> Adeel Ansari..:

我更喜欢Freemarker,而不是Velocity; imo,Freemarker在这种情况下更简单.

如果您使用的是Spring,那么您可能对Spring MVC中的Freemarker感兴趣.



6> Name is carl..:

这是一个Java模板基准测试

在此输入图像描述

推荐阅读
小白也坚强_177
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有