2013-03-04 19 views
0

我需要發送HTML格式的電子郵件。看起來HTML電子郵件被視爲「視圖」元素,因此使用JSP進行呈現是有意義的。普通Java對象可以利用/捕獲/包含JSP輸出嗎?

但是,電子郵件任務將使用純Java編寫。我怎樣才能將JSP輸出轉換成Java?

即我設想:

emailbody.jsp:

<c:out var="invoicebody"> 
    <lots of html> 
    ${invoice.price} etc... 
</c:out> 

emailsend.java:

setup db connection 
setup email 
call emailbody.jsp 
email.body = invoicebody 
email.send etc... 

類似的東西...

現在我刮它通過http服務器,但似乎錯了。

格式化HTML電子郵件的最佳方式是什麼?使用Tomcat 7,Servlet的3.0 ...

感謝

+0

電子郵件是否在您的網絡應用程序?你有沒有考慮使用HttpURLConnection? – rickz 2013-03-04 15:33:35

+0

http://stackoverflow.com/questions/1075827/execute-jsp-directly-from-java/1076056#1076056 – 2013-03-05 11:24:22

+0

我想避免通過http服務器吮吸jsp。這不可能是最好的方式。我也不希望jsp可以從外部訪問。我也不希望它依賴於模擬對象的概念似乎很有趣...可能是我最好的選擇... – PrecisionPete 2013-03-05 18:18:36

回答

1

您可以使用腳本語言一樣MVEL填充要發送電子郵件爲HTML文件。

入住這MVEL 2.0 Templating Guide

我希望讓你在正確的方向。

也有其他替代品SzymonBiliński指出out.Listing他們下面

+1

Freemarker和Velocity是其他適用的常用工具。 – 2013-03-05 11:29:48

+0

也似乎很有趣。我不想引入另一種模板語言,因爲JSP幾乎就是這樣。但我喜歡它不再依賴於http服務器。 – PrecisionPete 2013-03-05 18:23:26

0

已經有使用標籤庫的郵件發送一個好的解決方案。

只要調用jsp,你不需要捕獲html。

+0

嘗試從JSP中取出它。它會降低應用程序執行速度,未記錄,並且如果出現問題,則不可重新觸發。例如沒有SMTP中繼。相反,我把請求放在數據庫中,並有批量作業發送電子郵件。由於批處理作業不是網頁,我不想通過網絡服務器運行它。 – PrecisionPete 2013-03-05 18:21:38

+0

...並且你不能模擬它,你很難調試,並且沒有好的黑名單解決方案。那麼它是一個簡單的實現,並不適合這樣的需求。我不知道需求,我會創建一個新的答案。 – 2013-03-06 06:55:13

1

你可以調用自己的web應用的URL是這樣的:

public static String getEmailBody(final String triggerId) throws IOException { 

     URL url = new URL("http://localhost:8080/emailbody.jsp?triggerId=" 
       + triggerId); 
     URLConnection openConnection = url.openConnection(); 
     openConnection.setReadTimeout(100); 
     InputStream inputStream = openConnection.getInputStream(); 
     int read; 
     ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
     do { 
      byte[] bytes = new byte[1024]; 
      read = inputStream.read(bytes); 
      baos.write(bytes); 
     } while (read > 0); 
     return baos.toString(); 
    } 

這是最超脫梅索德因爲你有一個「真正的」閱讀的HttpRequest和HttpResponse對象。

相關問題