使用 Struts2 视图发送模板电子邮件

Send Template Email Using Struts2 View

我正在使用 Struts2,我想将我的其中一个操作的 html 输出作为电子邮件发送。 换句话说,我不想在浏览器中显示输出 html,而是想将其作为电子邮件发送。

我正在使用 Apache Tiles 创建我的页面。

编辑: 一般来说,我们能否将 struts 视图的 html 结果作为流并将其传递给另一个操作?

首先,我需要说明一下,使用 JSP 作为电子邮件模板并不是一个好主意。但是,如果您需要这样做,或者您需要记录用户看到的确切 HTML(或任何其他原因),您可以这样做:

  1. 为您的操作创建拦截器
  2. 从 ServletActionContext 获取响应
  3. 包装响应
  4. 调用动作
  5. 获取(甚至更改)响应。
  6. return结果。

这是我的部分代码:

import java.io.CharArrayWriter;
import java.io.PrintWriter;

import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;

//STEP 1
public class EmailInterceptor implements Interceptor {

    @Override
    public String intercept(ActionInvocation actionInvocation) throws Exception {
        // STEP 2
        HttpServletResponse response = ServletActionContext.getResponse();
        PrintWriter out = response.getWriter();
        // STEP 3
        CharResponseWrapper responseWrapper = new CharResponseWrapper((HttpServletResponse) response);

        ServletActionContext.setResponse(responseWrapper);
        // STEP 4
        String result = actionInvocation.invoke();
        // STEP 5
        String servletResponse = new String(responseWrapper.toString());
        out.write(servletResponse + "whatever");
        // STEP 6
        return result;

    }

    public class CharResponseWrapper extends HttpServletResponseWrapper {
        private CharArrayWriter output;

        public String toString() {
            return output.toString();
        }

        public CharResponseWrapper(HttpServletResponse response) {
            super(response);
            output = new CharArrayWriter();
        }

        public PrintWriter getWriter() {
            return new PrintWriter(output);
        }
    }

}